Version Description
Download this release
Release Info
Developer | pross |
Plugin | WordPress Page Builder – Beaver Builder |
Version | 2.2.1.4 |
Comparing to | |
See all releases |
Code changes from version 2.2.0.6 to 2.2.1.4
- changelog.txt +82 -0
- classes/class-fl-builder-admin-posts.php +63 -15
- classes/class-fl-builder-admin-settings.php +65 -44
- classes/class-fl-builder-admin.php +20 -14
- classes/class-fl-builder-ajax-layout.php +111 -74
- classes/class-fl-builder-art.php +179 -175
- classes/class-fl-builder-auto-suggest.php +33 -34
- classes/class-fl-builder-color.php +24 -24
- classes/class-fl-builder-css.php +81 -76
- classes/class-fl-builder-debug.php +8 -2
- classes/class-fl-builder-export.php +5 -5
- classes/class-fl-builder-filesystem.php +3 -3
- classes/class-fl-builder-fonts.php +27 -2
- classes/class-fl-builder-icons.php +49 -42
- classes/class-fl-builder-import.php +1 -1
- classes/class-fl-builder-importer.php +8 -8
- classes/class-fl-builder-loader.php +5 -5
- classes/class-fl-builder-loop.php +94 -78
- classes/class-fl-builder-model.php +614 -564
- classes/class-fl-builder-module.php +21 -21
- classes/class-fl-builder-notifications.php +32 -18
- classes/class-fl-builder-privacy.php +9 -9
- classes/class-fl-builder-revisions.php +11 -11
- classes/class-fl-builder-service-activecampaign.php +62 -63
- classes/class-fl-builder-service-aweber.php +40 -41
- classes/class-fl-builder-service-campaign-monitor.php +32 -32
- classes/class-fl-builder-service-campayn.php +51 -52
- classes/class-fl-builder-service-constant-contact.php +48 -49
- classes/class-fl-builder-service-convertkit.php +24 -24
- classes/class-fl-builder-service-drip.php +47 -48
- classes/class-fl-builder-service-email-address.php +10 -10
- classes/class-fl-builder-service-enormail.php +22 -22
- classes/class-fl-builder-service-getresponse.php +36 -36
- classes/class-fl-builder-service-godaddy-email-marketing.php +35 -36
- classes/class-fl-builder-service-hatchbuck.php +36 -37
- classes/class-fl-builder-service-icontact-pro.php +77 -81
- classes/class-fl-builder-service-icontact.php +54 -56
- classes/class-fl-builder-service-infusionsoft.php +45 -46
- classes/class-fl-builder-service-madmimi.php +34 -35
- classes/class-fl-builder-service-mailchimp.php +37 -36
- classes/class-fl-builder-service-mailerlite.php +24 -24
- classes/class-fl-builder-service-mailpoet.php +21 -21
- classes/class-fl-builder-service-mailrelay.php +44 -45
- classes/class-fl-builder-service-mautic.php +56 -57
- classes/class-fl-builder-service-ontraport.php +35 -37
- classes/class-fl-builder-service-sendinblue.php +21 -21
- classes/class-fl-builder-service-sendy.php +33 -33
- classes/class-fl-builder-services.php +138 -138
- classes/class-fl-builder-settings-compat-helper.php +6 -6
- classes/class-fl-builder-settings-compat.php +1 -1
- classes/class-fl-builder-settings-presets.php +20 -10
- classes/class-fl-builder-shortcodes.php +5 -5
- classes/class-fl-builder-ui-content-panel.php +71 -71
- classes/class-fl-builder-ui-settings-forms.php +86 -83
- classes/class-fl-builder-update.php +14 -12
- classes/class-fl-builder-usage.php +138 -136
- classes/class-fl-builder-user-access.php +4 -4
- classes/class-fl-builder-user-settings.php +4 -4
- classes/class-fl-builder-utils.php +16 -16
- classes/class-fl-builder-wp-blocks-layout.php +19 -19
- classes/class-fl-builder-wp-blocks.php +16 -16
- classes/class-fl-builder-wpcli-command.php +8 -4
- classes/class-fl-builder-wpml.php +12 -8
- classes/class-fl-builder.php +483 -369
- css/fl-builder-layout-auto-spacing.css +0 -2
- css/fl-builder-layout.css +1 -1
- css/fl-builder-rtl.css +8 -0
- css/fl-builder.css +7 -4
- css/fl-builder.min.css +1 -1
- extensions/fl-builder-cache-helper/classes/class-fl-builder-cache-helper.php +10 -10
- extensions/fl-builder-cache-helper/plugins/defines.php +1 -1
- extensions/fl-builder-cache-helper/plugins/hummingbird.php +2 -2
- extensions/fl-builder-multisite/classes/class-fl-builder-multisite.php +9 -9
- fl-builder.php +1 -1
- fonts/fontawesome/css/all.min.css +1 -5
- fonts/fontawesome/webfonts/fa-brands-400.eot +0 -0
- fonts/fontawesome/webfonts/fa-brands-400.svg +8 -250
changelog.txt
CHANGED
@@ -1,3 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<h4>2.2.0.6 - 01/24/2019</h4>
|
2 |
<p><strong>Hot Fix</strong></p>
|
3 |
<ul>
|
1 |
+
<h4>2.2.1.4 - 03/05/2019</h4>
|
2 |
+
<p><strong>Hot Fix</strong></p>
|
3 |
+
<ul>
|
4 |
+
<li>Fixed PHP notice in WPML global node filter.</li>
|
5 |
+
<li>Fixed fatal JS error with SumoMe plugin.</li>
|
6 |
+
<li>Fixed PHP notice if a deleted font is registered.</li>
|
7 |
+
<li>Run fl_builder_cache_cleared after plugin update.</li>
|
8 |
+
</ul>
|
9 |
+
|
10 |
+
<h4>2.2.1.3 - 02/27/2019</h4>
|
11 |
+
<p><strong>Hot Fix</strong></p>
|
12 |
+
<ul>
|
13 |
+
<li>Updated translations, introduced de_formal and finally fixed de_de.</li>
|
14 |
+
<li>Fixed the form filter for settings presets throwing an error when sections or fields aren't defined.</li>
|
15 |
+
<li>Fixed a recursion bug when rendering WPML translated global columns.</li>
|
16 |
+
<li>Fixed more issues with SiteGround plugin.</li>
|
17 |
+
</ul>
|
18 |
+
|
19 |
+
<h4>2.2.1.2 - 02/20/2019</h4>
|
20 |
+
<p><strong>Hot Fix</strong></p>
|
21 |
+
<ul>
|
22 |
+
<li>Fixed Prebuilt Rows on multisite.</li>
|
23 |
+
<li>Fixed Text Editor links and relative urls on images.</li>
|
24 |
+
<li>Fixed Content Slider button colors.</li>
|
25 |
+
</ul>
|
26 |
+
|
27 |
+
<h4>2.2.1.1 - 02/14/2019</h4>
|
28 |
+
<p><strong>Hot Fix</strong></p>
|
29 |
+
<ul>
|
30 |
+
<li>Fixed JS issue on module setting.</li>
|
31 |
+
<li>Fixed background overlay z-index issues.</li>
|
32 |
+
</ul>
|
33 |
+
|
34 |
+
<h4>2.2.1 - 02/13/2019</h4>
|
35 |
+
<p><strong>Enhancements</strong></p>
|
36 |
+
<ul>
|
37 |
+
<li>Allow admin post type list to be sorted by builder enabled.</li>
|
38 |
+
<li>Add support for vw units for font-size in the Typography settings for modules.</li>
|
39 |
+
<li>Show recently used fonts in font selector.</li>
|
40 |
+
<li>Filter <code>fl_get_fa5_url</code> added to change the actual URL enqueued for FA5.</li>
|
41 |
+
<li>Added new filter to Map Module <code>fl_builder_map_args</code>.</li>
|
42 |
+
<li>Updated jQuery.validate to 1.18 to allow for customizable error messages.</li>
|
43 |
+
<li>Updated Flyout Menu icon to use FA5.</li>
|
44 |
+
<li>Changed Template taxonomy label from Categories to Categories ( Beaver Builder ) to avoid confusion in CPT plugins.</li>
|
45 |
+
<li>Allow modules to only display certain parts of the typography settings.</li>
|
46 |
+
<li>Add optional limit for multiple setting types, when limit is reached user can not add/copy.</li>
|
47 |
+
<li>Pass Youtube Embed Parameters StartTime and EndTime to Youtube Player API.</li>
|
48 |
+
<li>Convert notifications to use native WP cron.</li>
|
49 |
+
<li>Updated inline action and filter docs for use on hooks.wpbeaverbuilder.com</li>
|
50 |
+
</ul>
|
51 |
+
<p><strong>Bug Fixes</strong></p>
|
52 |
+
<ul>
|
53 |
+
<li>Fixed relative urls issue when adding images to rich-text module.</li>
|
54 |
+
<li>Fixed an issue with IE11 in layout css.</li>
|
55 |
+
<li>Fixed submenu issue in IE11 caused by z-index.</li>
|
56 |
+
<li>Fixed subject field connections not working with insert.</li>
|
57 |
+
<li>Fixed custom svg icons and groups not working for module aliases.</li>
|
58 |
+
<li>Fixed select fields not displaying selected value if all values are numbers.</li>
|
59 |
+
<li>Fixed modules ordering and sorted alphabetically.</li>
|
60 |
+
<li>Fixed Number Counter issue with Firefox and decimal numbers.</li>
|
61 |
+
<li>Fixed PHP notice when no image is selected but lightbox is used in Photo Module.</li>
|
62 |
+
<li>Fixed mega-menu issue with hide-heading on mobile menu.</li>
|
63 |
+
<li>Fixed fatal error in MailPoet 3 integration.</li>
|
64 |
+
<li>Fixed HTML module RTL language layout issue.</li>
|
65 |
+
<li>Fixed below row style in menu module when animation is enabled.</li>
|
66 |
+
<li>Fixed content slider buttons CSS not being applied.</li>
|
67 |
+
<li>Fixed invalid css if text color happens to be empty.</li>
|
68 |
+
<li>Fixed heading color not working when editing saved heading module.</li>
|
69 |
+
<li>Fixed auto spacing issue on mobile for columns.</li>
|
70 |
+
<li>Fixed rich-text module dropdowns being transparent if white text is selected in theme.</li>
|
71 |
+
<li>Changed row overlay background pseudo selector to :before to prevent z-index issues.</li>
|
72 |
+
<li>Posts module - Feed layout - hide image width option when it doesn't apply.</li>
|
73 |
+
<li>Fixed unnecessary large queries being used for demo usage stats data.</li>
|
74 |
+
</ul>
|
75 |
+
|
76 |
+
<h4>2.2.0.7 - 02/06/2019</h4>
|
77 |
+
<p><strong>Hot Fix</strong></p>
|
78 |
+
<ul>
|
79 |
+
<li>Multisite saved rows templates issue fixed.</li>
|
80 |
+
<li>Font Awesome updated to 5.7.1</li>
|
81 |
+
</ul>
|
82 |
+
|
83 |
<h4>2.2.0.6 - 01/24/2019</h4>
|
84 |
<p><strong>Hot Fix</strong></p>
|
85 |
<ul>
|
classes/class-fl-builder-admin-posts.php
CHANGED
@@ -15,12 +15,13 @@ final class FLBuilderAdminPosts {
|
|
15 |
*/
|
16 |
static public function init() {
|
17 |
/* Actions */
|
18 |
-
add_action( 'current_screen',
|
19 |
|
20 |
/* Filters */
|
21 |
-
add_filter( 'redirect_post_location',
|
22 |
-
add_filter( 'page_row_actions',
|
23 |
-
add_filter( 'post_row_actions',
|
|
|
24 |
}
|
25 |
|
26 |
/**
|
@@ -63,6 +64,22 @@ final class FLBuilderAdminPosts {
|
|
63 |
return use_block_editor_for_post_type( $post_type );
|
64 |
}
|
65 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
/**
|
67 |
* Sets the body class, loads assets and renders the UI
|
68 |
* if we are on a post type that supports the builder.
|
@@ -75,14 +92,45 @@ final class FLBuilderAdminPosts {
|
|
75 |
|
76 |
if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
|
77 |
|
78 |
-
$render_ui
|
79 |
-
$post_type
|
80 |
$post_types = FLBuilderModel::get_post_types();
|
81 |
|
82 |
if ( $render_ui && in_array( $post_type, $post_types ) ) {
|
83 |
-
add_filter( 'admin_body_class',
|
84 |
-
add_action( 'admin_enqueue_scripts',
|
85 |
-
add_action( 'edit_form_after_title',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
}
|
87 |
}
|
88 |
}
|
@@ -141,9 +189,9 @@ final class FLBuilderAdminPosts {
|
|
141 |
static public function render() {
|
142 |
global $post;
|
143 |
|
144 |
-
$post_type_obj
|
145 |
$post_type_name = strtolower( $post_type_obj->labels->singular_name );
|
146 |
-
$enabled
|
147 |
|
148 |
include FL_BUILDER_DIR . 'includes/admin-posts.php';
|
149 |
}
|
@@ -161,12 +209,12 @@ final class FLBuilderAdminPosts {
|
|
161 |
if ( 'trash' != $post->post_status && current_user_can( 'edit_post', $post->ID ) && wp_check_post_lock( $post->ID ) === false ) {
|
162 |
|
163 |
$is_post_editable = (bool) apply_filters( 'fl_builder_is_post_editable', true, $post );
|
164 |
-
$user_access
|
165 |
-
$post_types
|
166 |
|
167 |
if ( in_array( $post->post_type, $post_types ) && $is_post_editable && $user_access ) {
|
168 |
-
$enabled
|
169 |
-
$dot
|
170 |
$actions['fl-builder'] = '<a href="' . FLBuilderModel::get_edit_url() . '">' . FLBuilderModel::get_branding() . $dot . '</a>';
|
171 |
}
|
172 |
}
|
15 |
*/
|
16 |
static public function init() {
|
17 |
/* Actions */
|
18 |
+
add_action( 'current_screen', __CLASS__ . '::init_rendering' );
|
19 |
|
20 |
/* Filters */
|
21 |
+
add_filter( 'redirect_post_location', __CLASS__ . '::redirect_post_location' );
|
22 |
+
add_filter( 'page_row_actions', __CLASS__ . '::render_row_actions_link' );
|
23 |
+
add_filter( 'post_row_actions', __CLASS__ . '::render_row_actions_link' );
|
24 |
+
add_action( 'pre_get_posts', __CLASS__ . '::sort_builder_enabled' );
|
25 |
}
|
26 |
|
27 |
/**
|
64 |
return use_block_editor_for_post_type( $post_type );
|
65 |
}
|
66 |
|
67 |
+
/**
|
68 |
+
* Allow sorting by builder enabled in pages list.
|
69 |
+
* @since 2.2.1
|
70 |
+
*/
|
71 |
+
static public function sort_builder_enabled( $query ) {
|
72 |
+
global $pagenow;
|
73 |
+
if ( is_admin()
|
74 |
+
&& 'edit.php' == $pagenow
|
75 |
+
&& ! isset( $_GET['orderby'] )
|
76 |
+
&& isset( $_GET['post_type'] )
|
77 |
+
&& isset( $_GET['bbsort'] ) ) {
|
78 |
+
$query->set( 'meta_key', '_fl_builder_enabled' );
|
79 |
+
$query->set( 'meta_value', '1' );
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
/**
|
84 |
* Sets the body class, loads assets and renders the UI
|
85 |
* if we are on a post type that supports the builder.
|
92 |
|
93 |
if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
|
94 |
|
95 |
+
$render_ui = apply_filters( 'fl_builder_render_admin_edit_ui', true );
|
96 |
+
$post_type = self::get_post_type();
|
97 |
$post_types = FLBuilderModel::get_post_types();
|
98 |
|
99 |
if ( $render_ui && in_array( $post_type, $post_types ) ) {
|
100 |
+
add_filter( 'admin_body_class', __CLASS__ . '::body_class', 99 );
|
101 |
+
add_action( 'admin_enqueue_scripts', __CLASS__ . '::styles_scripts' );
|
102 |
+
add_action( 'edit_form_after_title', __CLASS__ . '::render' );
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
if ( 'edit.php' == $pagenow && true === apply_filters( 'fl_builder_admin_edit_sort_bb_enabled', true ) ) {
|
107 |
+
$post_types = FLBuilderModel::get_post_types();
|
108 |
+
$post_type = self::get_post_type();
|
109 |
+
if ( in_array( $post_type, $post_types ) ) {
|
110 |
+
wp_enqueue_script( 'fl-builder-admin-posts-list', FL_BUILDER_URL . 'js/fl-builder-admin-posts-list.js', array( 'jquery' ), FL_BUILDER_VERSION );
|
111 |
+
$args = array(
|
112 |
+
'post_type' => $post_type,
|
113 |
+
'posts_per_page' => -1,
|
114 |
+
'meta_query' => array(
|
115 |
+
array(
|
116 |
+
'key' => '_fl_builder_enabled',
|
117 |
+
'compare' => '!=',
|
118 |
+
'value' => '',
|
119 |
+
),
|
120 |
+
),
|
121 |
+
);
|
122 |
+
$result = new WP_Query( $args );
|
123 |
+
$count = is_array( $result->posts ) ? count( $result->posts ) : 0;
|
124 |
+
$clicked = isset( $_GET['bbsort'] ) ? true : false;
|
125 |
+
wp_localize_script( 'fl-builder-admin-posts-list',
|
126 |
+
'fl_builder_enabled_count',
|
127 |
+
array(
|
128 |
+
'count' => $count,
|
129 |
+
'brand' => FLBuilderModel::get_branding(),
|
130 |
+
'clicked' => $clicked,
|
131 |
+
'type' => $post_type,
|
132 |
+
)
|
133 |
+
);
|
134 |
}
|
135 |
}
|
136 |
}
|
189 |
static public function render() {
|
190 |
global $post;
|
191 |
|
192 |
+
$post_type_obj = get_post_type_object( $post->post_type );
|
193 |
$post_type_name = strtolower( $post_type_obj->labels->singular_name );
|
194 |
+
$enabled = FLBuilderModel::is_builder_enabled();
|
195 |
|
196 |
include FL_BUILDER_DIR . 'includes/admin-posts.php';
|
197 |
}
|
209 |
if ( 'trash' != $post->post_status && current_user_can( 'edit_post', $post->ID ) && wp_check_post_lock( $post->ID ) === false ) {
|
210 |
|
211 |
$is_post_editable = (bool) apply_filters( 'fl_builder_is_post_editable', true, $post );
|
212 |
+
$user_access = FLBuilderUserAccess::current_user_can( 'builder_access' );
|
213 |
+
$post_types = FLBuilderModel::get_post_types();
|
214 |
|
215 |
if ( in_array( $post->post_type, $post_types ) && $is_post_editable && $user_access ) {
|
216 |
+
$enabled = get_post_meta( $post->ID, '_fl_builder_enabled', true );
|
217 |
+
$dot = ' <span style="color:' . ( $enabled ? '#6bc373' : '#d9d9d9' ) . '; font-size:18px;">•</span>';
|
218 |
$actions['fl-builder'] = '<a href="' . FLBuilderModel::get_edit_url() . '">' . FLBuilderModel::get_branding() . $dot . '</a>';
|
219 |
}
|
220 |
}
|
classes/class-fl-builder-admin-settings.php
CHANGED
@@ -153,52 +153,52 @@ final class FLBuilderAdminSettings {
|
|
153 |
*/
|
154 |
static public function render_nav_items() {
|
155 |
$item_data = apply_filters( 'fl_builder_admin_settings_nav_items', array(
|
156 |
-
'welcome'
|
157 |
-
'title'
|
158 |
-
'show'
|
159 |
-
'priority'
|
160 |
),
|
161 |
-
'license'
|
162 |
-
'title'
|
163 |
-
'show'
|
164 |
-
'priority'
|
165 |
),
|
166 |
-
'upgrade'
|
167 |
-
'title'
|
168 |
-
'show'
|
169 |
-
'priority'
|
170 |
),
|
171 |
-
'modules'
|
172 |
-
'title'
|
173 |
-
'show'
|
174 |
-
'priority'
|
175 |
),
|
176 |
-
'post-types'
|
177 |
-
'title'
|
178 |
-
'show'
|
179 |
-
'priority'
|
180 |
),
|
181 |
'user-access' => array(
|
182 |
-
'title'
|
183 |
-
'show'
|
184 |
-
'priority'
|
185 |
),
|
186 |
-
'icons'
|
187 |
-
'title'
|
188 |
-
'show'
|
189 |
-
'priority'
|
190 |
),
|
191 |
-
'tools'
|
192 |
-
'title'
|
193 |
-
'show'
|
194 |
-
'priority'
|
195 |
),
|
196 |
) );
|
197 |
|
198 |
$sorted_data = array();
|
199 |
|
200 |
foreach ( $item_data as $key => $data ) {
|
201 |
-
$data['key']
|
202 |
$sorted_data[ $data['priority'] ] = $data;
|
203 |
}
|
204 |
|
@@ -248,7 +248,10 @@ final class FLBuilderAdminSettings {
|
|
248 |
// Tools
|
249 |
self::render_form( 'tools' );
|
250 |
|
251 |
-
|
|
|
|
|
|
|
252 |
do_action( 'fl_builder_admin_settings_render_forms' );
|
253 |
}
|
254 |
|
@@ -347,7 +350,10 @@ final class FLBuilderAdminSettings {
|
|
347 |
self::debug();
|
348 |
self::uninstall();
|
349 |
|
350 |
-
|
|
|
|
|
|
|
351 |
do_action( 'fl_builder_admin_settings_save' );
|
352 |
}
|
353 |
|
@@ -449,23 +455,30 @@ final class FLBuilderAdminSettings {
|
|
449 |
fl_builder_filesystem()->rmdir( $sets[ $key ]['path'], true );
|
450 |
FLBuilderIcons::remove_set( $key );
|
451 |
}
|
452 |
-
|
|
|
|
|
|
|
453 |
do_action( 'fl_builder_admin_settings_remove_icon_set', $key );
|
454 |
}
|
455 |
|
456 |
// Upload a new set?
|
457 |
if ( ! empty( $_POST['fl-new-icon-set'] ) ) {
|
458 |
|
459 |
-
$dir
|
460 |
-
$id
|
461 |
-
$path
|
462 |
-
$new_path
|
463 |
|
464 |
fl_builder_filesystem()->get_filesystem();
|
465 |
|
|
|
|
|
|
|
|
|
466 |
do_action( 'fl_builder_before_unzip_icon_set', $id, $path, $new_path );
|
467 |
|
468 |
-
$unzipped
|
469 |
|
470 |
// unzip returned a WP_Error
|
471 |
if ( is_wp_error( $unzipped ) ) {
|
@@ -484,9 +497,9 @@ final class FLBuilderAdminSettings {
|
|
484 |
|
485 |
if ( 1 == count( $files ) ) {
|
486 |
|
487 |
-
$values
|
488 |
$subfolder_info = array_shift( $values );
|
489 |
-
$subfolder
|
490 |
|
491 |
if ( fl_builder_filesystem()->file_exists( $subfolder ) && fl_builder_filesystem()->is_dir( $subfolder ) ) {
|
492 |
|
@@ -502,12 +515,16 @@ final class FLBuilderAdminSettings {
|
|
502 |
}
|
503 |
}
|
504 |
|
|
|
|
|
|
|
|
|
505 |
do_action( 'fl_builder_after_unzip_icon_set', $new_path );
|
506 |
|
507 |
$check_path = apply_filters( 'fl_builder_icon_set_check_path', $new_path );
|
508 |
|
509 |
// Check for supported sets.
|
510 |
-
$is_icomoon
|
511 |
$is_fontello = fl_builder_filesystem()->file_exists( $check_path . 'config.json' );
|
512 |
|
513 |
// Show an error if we don't have a supported icon set.
|
@@ -529,7 +546,7 @@ final class FLBuilderAdminSettings {
|
|
529 |
|
530 |
// Enable the new set.
|
531 |
if ( is_array( $enabled_icons ) ) {
|
532 |
-
$key
|
533 |
$enabled_icons[] = $key;
|
534 |
}
|
535 |
}
|
@@ -586,6 +603,10 @@ final class FLBuilderAdminSettings {
|
|
586 |
FLCustomizer::clear_all_css_cache();
|
587 |
}
|
588 |
}
|
|
|
|
|
|
|
|
|
589 |
do_action( 'fl_builder_cache_cleared' );
|
590 |
}
|
591 |
}
|
153 |
*/
|
154 |
static public function render_nav_items() {
|
155 |
$item_data = apply_filters( 'fl_builder_admin_settings_nav_items', array(
|
156 |
+
'welcome' => array(
|
157 |
+
'title' => __( 'Welcome', 'fl-builder' ),
|
158 |
+
'show' => ! FLBuilderModel::is_white_labeled() && ( is_network_admin() || ! self::multisite_support() ),
|
159 |
+
'priority' => 50,
|
160 |
),
|
161 |
+
'license' => array(
|
162 |
+
'title' => __( 'License', 'fl-builder' ),
|
163 |
+
'show' => FL_BUILDER_LITE !== true && ( is_network_admin() || ! self::multisite_support() ),
|
164 |
+
'priority' => 100,
|
165 |
),
|
166 |
+
'upgrade' => array(
|
167 |
+
'title' => __( 'Upgrade', 'fl-builder' ),
|
168 |
+
'show' => FL_BUILDER_LITE === true,
|
169 |
+
'priority' => 200,
|
170 |
),
|
171 |
+
'modules' => array(
|
172 |
+
'title' => __( 'Modules', 'fl-builder' ),
|
173 |
+
'show' => true,
|
174 |
+
'priority' => 300,
|
175 |
),
|
176 |
+
'post-types' => array(
|
177 |
+
'title' => __( 'Post Types', 'fl-builder' ),
|
178 |
+
'show' => true,
|
179 |
+
'priority' => 400,
|
180 |
),
|
181 |
'user-access' => array(
|
182 |
+
'title' => __( 'User Access', 'fl-builder' ),
|
183 |
+
'show' => true,
|
184 |
+
'priority' => 500,
|
185 |
),
|
186 |
+
'icons' => array(
|
187 |
+
'title' => __( 'Icons', 'fl-builder' ),
|
188 |
+
'show' => FL_BUILDER_LITE !== true,
|
189 |
+
'priority' => 600,
|
190 |
),
|
191 |
+
'tools' => array(
|
192 |
+
'title' => __( 'Tools', 'fl-builder' ),
|
193 |
+
'show' => true,
|
194 |
+
'priority' => 700,
|
195 |
),
|
196 |
) );
|
197 |
|
198 |
$sorted_data = array();
|
199 |
|
200 |
foreach ( $item_data as $key => $data ) {
|
201 |
+
$data['key'] = $key;
|
202 |
$sorted_data[ $data['priority'] ] = $data;
|
203 |
}
|
204 |
|
248 |
// Tools
|
249 |
self::render_form( 'tools' );
|
250 |
|
251 |
+
/**
|
252 |
+
* Let extensions hook into form rendering.
|
253 |
+
* @see fl_builder_admin_settings_render_forms
|
254 |
+
*/
|
255 |
do_action( 'fl_builder_admin_settings_render_forms' );
|
256 |
}
|
257 |
|
350 |
self::debug();
|
351 |
self::uninstall();
|
352 |
|
353 |
+
/**
|
354 |
+
* Let extensions hook into saving.
|
355 |
+
* @see fl_builder_admin_settings_save
|
356 |
+
*/
|
357 |
do_action( 'fl_builder_admin_settings_save' );
|
358 |
}
|
359 |
|
455 |
fl_builder_filesystem()->rmdir( $sets[ $key ]['path'], true );
|
456 |
FLBuilderIcons::remove_set( $key );
|
457 |
}
|
458 |
+
/**
|
459 |
+
* After set is deleted.
|
460 |
+
* @see fl_builder_admin_settings_remove_icon_set
|
461 |
+
*/
|
462 |
do_action( 'fl_builder_admin_settings_remove_icon_set', $key );
|
463 |
}
|
464 |
|
465 |
// Upload a new set?
|
466 |
if ( ! empty( $_POST['fl-new-icon-set'] ) ) {
|
467 |
|
468 |
+
$dir = FLBuilderModel::get_cache_dir( 'icons' );
|
469 |
+
$id = (int) $_POST['fl-new-icon-set'];
|
470 |
+
$path = apply_filters( 'fl_builder_icon_set_upload_path', get_attached_file( $id ) );
|
471 |
+
$new_path = apply_filters( 'fl_builder_icon_set_new_path', $dir['path'] . 'icon-' . time() . '/' );
|
472 |
|
473 |
fl_builder_filesystem()->get_filesystem();
|
474 |
|
475 |
+
/**
|
476 |
+
* Before set is unziped.
|
477 |
+
* @see fl_builder_before_unzip_icon_set
|
478 |
+
*/
|
479 |
do_action( 'fl_builder_before_unzip_icon_set', $id, $path, $new_path );
|
480 |
|
481 |
+
$unzipped = unzip_file( $path, $new_path );
|
482 |
|
483 |
// unzip returned a WP_Error
|
484 |
if ( is_wp_error( $unzipped ) ) {
|
497 |
|
498 |
if ( 1 == count( $files ) ) {
|
499 |
|
500 |
+
$values = array_values( $files );
|
501 |
$subfolder_info = array_shift( $values );
|
502 |
+
$subfolder = $new_path . $subfolder_info['name'] . '/';
|
503 |
|
504 |
if ( fl_builder_filesystem()->file_exists( $subfolder ) && fl_builder_filesystem()->is_dir( $subfolder ) ) {
|
505 |
|
515 |
}
|
516 |
}
|
517 |
|
518 |
+
/**
|
519 |
+
* After set is unzipped.
|
520 |
+
* @see fl_builder_after_unzip_icon_set
|
521 |
+
*/
|
522 |
do_action( 'fl_builder_after_unzip_icon_set', $new_path );
|
523 |
|
524 |
$check_path = apply_filters( 'fl_builder_icon_set_check_path', $new_path );
|
525 |
|
526 |
// Check for supported sets.
|
527 |
+
$is_icomoon = fl_builder_filesystem()->file_exists( $check_path . 'selection.json' );
|
528 |
$is_fontello = fl_builder_filesystem()->file_exists( $check_path . 'config.json' );
|
529 |
|
530 |
// Show an error if we don't have a supported icon set.
|
546 |
|
547 |
// Enable the new set.
|
548 |
if ( is_array( $enabled_icons ) ) {
|
549 |
+
$key = FLBuilderIcons::get_key_from_path( $check_path );
|
550 |
$enabled_icons[] = $key;
|
551 |
}
|
552 |
}
|
603 |
FLCustomizer::clear_all_css_cache();
|
604 |
}
|
605 |
}
|
606 |
+
/**
|
607 |
+
* Fires after cache is cleared.
|
608 |
+
* @see fl_builder_cache_cleared
|
609 |
+
*/
|
610 |
do_action( 'fl_builder_cache_cleared' );
|
611 |
}
|
612 |
}
|
classes/class-fl-builder-admin.php
CHANGED
@@ -17,14 +17,14 @@ final class FLBuilderAdmin {
|
|
17 |
$basename = plugin_basename( FL_BUILDER_FILE );
|
18 |
|
19 |
// Activation
|
20 |
-
register_activation_hook( FL_BUILDER_FILE,
|
21 |
|
22 |
// Actions
|
23 |
-
add_action( 'admin_init',
|
24 |
-
add_action( 'admin_init',
|
25 |
|
26 |
// Filters
|
27 |
-
add_filter( 'plugin_action_links_' . $basename,
|
28 |
}
|
29 |
|
30 |
/**
|
@@ -43,7 +43,10 @@ final class FLBuilderAdmin {
|
|
43 |
self::show_activate_error( __( 'The <strong>Page Builder</strong> plugin requires WordPress version 3.5 or greater. Please update WordPress before activating the plugin.', 'fl-builder' ) );
|
44 |
}
|
45 |
|
46 |
-
|
|
|
|
|
|
|
47 |
$activate = apply_filters( 'fl_builder_activate', true );
|
48 |
|
49 |
// Should we continue with activation?
|
@@ -52,8 +55,8 @@ final class FLBuilderAdmin {
|
|
52 |
// Check for multisite.
|
53 |
if ( is_multisite() ) {
|
54 |
$url = FLBuilderModel::get_upgrade_url( array(
|
55 |
-
'utm_medium'
|
56 |
-
'utm_source'
|
57 |
'utm_campaign' => 'no-multisite-support',
|
58 |
) );
|
59 |
self::show_activate_error( sprintf( __( 'This version of the <strong>Page Builder</strong> plugin is not compatible with WordPress Multisite. <a%s>Please upgrade</a> to the Multisite version of this plugin.', 'fl-builder' ), ' href="' . $url . '" target="_blank"' ) );
|
@@ -65,7 +68,10 @@ final class FLBuilderAdmin {
|
|
65 |
// Trigger the activation notice.
|
66 |
self::trigger_activate_notice();
|
67 |
|
68 |
-
|
|
|
|
|
|
|
69 |
do_action( 'fl_builder_activated' );
|
70 |
|
71 |
// Flush the rewrite rules.
|
@@ -216,18 +222,18 @@ final class FLBuilderAdmin {
|
|
216 |
*/
|
217 |
static public function render_plugin_action_links( $actions ) {
|
218 |
if ( FL_BUILDER_LITE === true ) {
|
219 |
-
$url
|
220 |
-
'utm_medium'
|
221 |
-
'utm_source'
|
222 |
'utm_campaign' => 'plugins-admin-upgrade',
|
223 |
) );
|
224 |
$actions[] = '<a href="' . $url . '" style="color:#3db634;" target="_blank">' . _x( 'Upgrade', 'Plugin action link label.', 'fl-builder' ) . '</a>';
|
225 |
}
|
226 |
|
227 |
if ( ! FLBuilderModel::is_white_labeled() ) {
|
228 |
-
$url
|
229 |
-
'utm_medium'
|
230 |
-
'utm_source'
|
231 |
'utm_campaign' => 'plugins-admin-changelog',
|
232 |
) );
|
233 |
$actions[] = '<a href="' . $url . '" target="_blank">' . _x( 'Change Log', 'Plugin action link label.', 'fl-builder' ) . '</a>';
|
17 |
$basename = plugin_basename( FL_BUILDER_FILE );
|
18 |
|
19 |
// Activation
|
20 |
+
register_activation_hook( FL_BUILDER_FILE, __CLASS__ . '::activate' );
|
21 |
|
22 |
// Actions
|
23 |
+
add_action( 'admin_init', __CLASS__ . '::show_activate_notice' );
|
24 |
+
add_action( 'admin_init', __CLASS__ . '::sanity_checks' );
|
25 |
|
26 |
// Filters
|
27 |
+
add_filter( 'plugin_action_links_' . $basename, __CLASS__ . '::render_plugin_action_links' );
|
28 |
}
|
29 |
|
30 |
/**
|
43 |
self::show_activate_error( __( 'The <strong>Page Builder</strong> plugin requires WordPress version 3.5 or greater. Please update WordPress before activating the plugin.', 'fl-builder' ) );
|
44 |
}
|
45 |
|
46 |
+
/**
|
47 |
+
* Allow extensions to hook activation.
|
48 |
+
* @see fl_builder_activate
|
49 |
+
*/
|
50 |
$activate = apply_filters( 'fl_builder_activate', true );
|
51 |
|
52 |
// Should we continue with activation?
|
55 |
// Check for multisite.
|
56 |
if ( is_multisite() ) {
|
57 |
$url = FLBuilderModel::get_upgrade_url( array(
|
58 |
+
'utm_medium' => 'bb-pro',
|
59 |
+
'utm_source' => 'plugins-admin-page',
|
60 |
'utm_campaign' => 'no-multisite-support',
|
61 |
) );
|
62 |
self::show_activate_error( sprintf( __( 'This version of the <strong>Page Builder</strong> plugin is not compatible with WordPress Multisite. <a%s>Please upgrade</a> to the Multisite version of this plugin.', 'fl-builder' ), ' href="' . $url . '" target="_blank"' ) );
|
68 |
// Trigger the activation notice.
|
69 |
self::trigger_activate_notice();
|
70 |
|
71 |
+
/**
|
72 |
+
* Allow add-ons to hook into activation.
|
73 |
+
* @see fl_builder_activated
|
74 |
+
*/
|
75 |
do_action( 'fl_builder_activated' );
|
76 |
|
77 |
// Flush the rewrite rules.
|
222 |
*/
|
223 |
static public function render_plugin_action_links( $actions ) {
|
224 |
if ( FL_BUILDER_LITE === true ) {
|
225 |
+
$url = FLBuilderModel::get_upgrade_url( array(
|
226 |
+
'utm_medium' => 'bb-lite',
|
227 |
+
'utm_source' => 'plugins-admin-page',
|
228 |
'utm_campaign' => 'plugins-admin-upgrade',
|
229 |
) );
|
230 |
$actions[] = '<a href="' . $url . '" style="color:#3db634;" target="_blank">' . _x( 'Upgrade', 'Plugin action link label.', 'fl-builder' ) . '</a>';
|
231 |
}
|
232 |
|
233 |
if ( ! FLBuilderModel::is_white_labeled() ) {
|
234 |
+
$url = FLBuilderModel::get_store_url( 'change-logs', array(
|
235 |
+
'utm_medium' => 'bb-pro',
|
236 |
+
'utm_source' => 'plugins-admin-page',
|
237 |
'utm_campaign' => 'plugins-admin-changelog',
|
238 |
) );
|
239 |
$actions[] = '<a href="' . $url . '" target="_blank">' . _x( 'Change Log', 'Plugin action link label.', 'fl-builder' ) . '</a>';
|
classes/class-fl-builder-ajax-layout.php
CHANGED
@@ -25,6 +25,10 @@ final class FLBuilderAJAXLayout {
|
|
25 |
* @return array
|
26 |
*/
|
27 |
static public function render( $node_id = null, $old_node_id = null ) {
|
|
|
|
|
|
|
|
|
28 |
do_action( 'fl_builder_before_render_ajax_layout' );
|
29 |
|
30 |
// Update the node ID in the post data?
|
@@ -50,18 +54,25 @@ final class FLBuilderAJAXLayout {
|
|
50 |
// Render the assets.
|
51 |
$assets = self::render_assets();
|
52 |
|
|
|
|
|
|
|
|
|
53 |
do_action( 'fl_builder_after_render_ajax_layout' );
|
54 |
|
55 |
-
|
|
|
|
|
|
|
56 |
return apply_filters( 'fl_builder_ajax_layout_response', array(
|
57 |
-
'partial'
|
58 |
-
'nodeId'
|
59 |
-
'nodeType'
|
60 |
-
'oldNodeId'
|
61 |
-
'html'
|
62 |
-
'scriptsStyles'
|
63 |
-
'css'
|
64 |
-
'js'
|
65 |
) );
|
66 |
}
|
67 |
|
@@ -78,19 +89,27 @@ final class FLBuilderAJAXLayout {
|
|
78 |
// Add the row.
|
79 |
$row = FLBuilderModel::add_row( $cols, $position, $module );
|
80 |
|
81 |
-
|
|
|
|
|
|
|
82 |
do_action( 'fl_builder_before_render_ajax_layout_html' );
|
83 |
ob_start();
|
84 |
FLBuilder::render_row( $row );
|
85 |
$html = ob_get_clean();
|
|
|
|
|
|
|
|
|
|
|
86 |
do_action( 'fl_builder_after_render_ajax_layout_html' );
|
87 |
|
88 |
// Return the response.
|
89 |
return array(
|
90 |
-
'partial'
|
91 |
-
'nodeType'
|
92 |
-
'html'
|
93 |
-
'js'
|
94 |
);
|
95 |
}
|
96 |
|
@@ -104,7 +123,9 @@ final class FLBuilderAJAXLayout {
|
|
104 |
* @return array
|
105 |
*/
|
106 |
static public function render_new_row_template( $position, $template_id, $template_type = 'user' ) {
|
107 |
-
if ( '
|
|
|
|
|
108 |
$template = FLBuilderModel::get_template( $template_id, 'row' );
|
109 |
$row = FLBuilderModel::apply_node_template( $template_id, null, $position, $template );
|
110 |
} else {
|
@@ -146,19 +167,27 @@ final class FLBuilderAJAXLayout {
|
|
146 |
// Add the group.
|
147 |
$group = FLBuilderModel::add_col_group( $node_id, $cols, $position, $module );
|
148 |
|
149 |
-
|
|
|
|
|
|
|
150 |
do_action( 'fl_builder_before_render_ajax_layout_html' );
|
151 |
ob_start();
|
152 |
FLBuilder::render_column_group( $group );
|
153 |
$html = ob_get_clean();
|
|
|
|
|
|
|
|
|
|
|
154 |
do_action( 'fl_builder_after_render_ajax_layout_html' );
|
155 |
|
156 |
// Return the response.
|
157 |
return array(
|
158 |
-
'partial'
|
159 |
-
'nodeType'
|
160 |
-
'html'
|
161 |
-
'js'
|
162 |
);
|
163 |
}
|
164 |
|
@@ -204,13 +233,13 @@ final class FLBuilderAJAXLayout {
|
|
204 |
|
205 |
// Get the node to render.
|
206 |
if ( ! $parent ) {
|
207 |
-
$row
|
208 |
-
$render_id
|
209 |
} elseif ( 'row' == $parent->type ) {
|
210 |
-
$group
|
211 |
-
$render_id
|
212 |
} elseif ( 'column-group' == $parent->type ) {
|
213 |
-
$render_id
|
214 |
} else {
|
215 |
$render_id = $column->node;
|
216 |
}
|
@@ -272,13 +301,13 @@ final class FLBuilderAJAXLayout {
|
|
272 |
|
273 |
// Get the node to render.
|
274 |
if ( ! $parent ) {
|
275 |
-
$row
|
276 |
-
$render_id
|
277 |
} elseif ( 'row' == $parent->type ) {
|
278 |
-
$group
|
279 |
-
$render_id
|
280 |
} elseif ( 'column-group' == $parent->type ) {
|
281 |
-
$render_id
|
282 |
} else {
|
283 |
$render_id = $module->node;
|
284 |
}
|
@@ -288,13 +317,13 @@ final class FLBuilderAJAXLayout {
|
|
288 |
|
289 |
// Return the response.
|
290 |
return array(
|
291 |
-
'type'
|
292 |
-
'nodeId'
|
293 |
-
'parentId'
|
294 |
-
'global'
|
295 |
-
'layout'
|
296 |
-
'settings'
|
297 |
-
'legacy'
|
298 |
);
|
299 |
}
|
300 |
|
@@ -323,39 +352,39 @@ final class FLBuilderAJAXLayout {
|
|
323 |
// Get the data if it's not cached.
|
324 |
if ( ! self::$partial_refresh_data ) {
|
325 |
|
326 |
-
$post_data
|
327 |
$partial_refresh = false;
|
328 |
-
$node_type
|
329 |
|
330 |
// Check for partial refresh if we have a node ID.
|
331 |
if ( isset( $post_data['node_id'] ) ) {
|
332 |
|
333 |
// Get the node.
|
334 |
-
$node_id
|
335 |
-
$node
|
336 |
$node_type = null;
|
337 |
|
338 |
// Check a module for partial refresh.
|
339 |
if ( $node && 'module' == $node->type ) {
|
340 |
-
$node
|
341 |
-
$node_type
|
342 |
-
$partial_refresh
|
343 |
} elseif ( $node ) {
|
344 |
-
$node_type
|
345 |
-
$partial_refresh
|
346 |
}
|
347 |
} else {
|
348 |
-
$node_id
|
349 |
-
$node
|
350 |
-
$node_type
|
351 |
}
|
352 |
|
353 |
// Cache the partial refresh data.
|
354 |
self::$partial_refresh_data = array(
|
355 |
'is_partial_refresh' => $partial_refresh,
|
356 |
-
'node_id'
|
357 |
-
'node'
|
358 |
-
'node_type'
|
359 |
);
|
360 |
}
|
361 |
|
@@ -372,7 +401,7 @@ final class FLBuilderAJAXLayout {
|
|
372 |
* @return bool
|
373 |
*/
|
374 |
static private function node_modules_support_partial_refresh( $node ) {
|
375 |
-
$nodes
|
376 |
|
377 |
if ( 'row' == $node->type ) {
|
378 |
|
@@ -426,6 +455,10 @@ final class FLBuilderAJAXLayout {
|
|
426 |
* @return string
|
427 |
*/
|
428 |
static private function render_html() {
|
|
|
|
|
|
|
|
|
429 |
do_action( 'fl_builder_before_render_ajax_layout_html' );
|
430 |
|
431 |
// Get the partial refresh data.
|
@@ -441,19 +474,19 @@ final class FLBuilderAJAXLayout {
|
|
441 |
|
442 |
case 'row':
|
443 |
FLBuilder::render_row( $partial_refresh_data['node'] );
|
444 |
-
|
445 |
|
446 |
case 'column-group':
|
447 |
FLBuilder::render_column_group( $partial_refresh_data['node'] );
|
448 |
-
|
449 |
|
450 |
case 'column':
|
451 |
FLBuilder::render_column( $partial_refresh_data['node'] );
|
452 |
-
|
453 |
|
454 |
case 'module':
|
455 |
FLBuilder::render_module( $partial_refresh_data['node'] );
|
456 |
-
|
457 |
}
|
458 |
} else {
|
459 |
FLBuilder::render_nodes();
|
@@ -474,7 +507,10 @@ final class FLBuilderAJAXLayout {
|
|
474 |
echo do_shortcode( $html );
|
475 |
$html = ob_get_clean();
|
476 |
}
|
477 |
-
|
|
|
|
|
|
|
478 |
do_action( 'fl_builder_after_render_ajax_layout_html' );
|
479 |
|
480 |
// Return the rendered HTML.
|
@@ -489,12 +525,12 @@ final class FLBuilderAJAXLayout {
|
|
489 |
* @return array
|
490 |
*/
|
491 |
static private function render_assets() {
|
492 |
-
$partial_refresh_data
|
493 |
-
$asset_info
|
494 |
-
$asset_ver
|
495 |
-
$enqueuemethod
|
496 |
-
$assets
|
497 |
-
'js'
|
498 |
'css' => '',
|
499 |
);
|
500 |
|
@@ -511,28 +547,29 @@ final class FLBuilderAJAXLayout {
|
|
511 |
switch ( $partial_refresh_data['node']->type ) {
|
512 |
|
513 |
case 'row':
|
514 |
-
$assets['js']
|
515 |
$assets['js'] .= FLBuilder::render_row_modules_js( $partial_refresh_data['node'] );
|
516 |
-
|
517 |
|
518 |
case 'column-group':
|
519 |
$assets['js'] = FLBuilder::render_column_group_modules_js( $partial_refresh_data['node'] );
|
520 |
-
|
521 |
|
522 |
case 'column':
|
523 |
$assets['js'] = FLBuilder::render_column_modules_js( $partial_refresh_data['node'] );
|
524 |
-
|
525 |
|
526 |
case 'module':
|
527 |
$assets['js'] = FLBuilder::render_module_js( $partial_refresh_data['node'] );
|
528 |
-
|
529 |
}
|
530 |
|
531 |
$assets['js'] .= 'FLBuilder._renderLayoutComplete();';
|
532 |
|
533 |
try {
|
534 |
$min = FLJSMin::minify( $assets['js'] );
|
535 |
-
} catch ( Exception $e ) {
|
|
|
536 |
|
537 |
if ( $min ) {
|
538 |
$assets['js'] = $min;
|
@@ -608,9 +645,9 @@ final class FLBuilderAJAXLayout {
|
|
608 |
global $wp_scripts;
|
609 |
global $wp_styles;
|
610 |
|
611 |
-
$partial_refresh_data
|
612 |
-
$modules
|
613 |
-
$scripts_styles
|
614 |
|
615 |
// Enqueue module font styles.
|
616 |
if ( ! $partial_refresh_data['is_partial_refresh'] ) {
|
@@ -620,7 +657,7 @@ final class FLBuilderAJAXLayout {
|
|
620 |
foreach ( $nodes as $node ) {
|
621 |
if ( 'module' === $node->type && isset( FLBuilderModel::$modules[ $node->settings->type ] ) ) {
|
622 |
$node->form = FLBuilderModel::$modules[ $node->settings->type ]->form;
|
623 |
-
$modules[]
|
624 |
}
|
625 |
}
|
626 |
} else {
|
25 |
* @return array
|
26 |
*/
|
27 |
static public function render( $node_id = null, $old_node_id = null ) {
|
28 |
+
/**
|
29 |
+
* Before ajax layout rendered.
|
30 |
+
* @see fl_builder_before_render_ajax_layout
|
31 |
+
*/
|
32 |
do_action( 'fl_builder_before_render_ajax_layout' );
|
33 |
|
34 |
// Update the node ID in the post data?
|
54 |
// Render the assets.
|
55 |
$assets = self::render_assets();
|
56 |
|
57 |
+
/**
|
58 |
+
* After ajax layout rendered.
|
59 |
+
* @see fl_builder_after_render_ajax_layout
|
60 |
+
*/
|
61 |
do_action( 'fl_builder_after_render_ajax_layout' );
|
62 |
|
63 |
+
/**
|
64 |
+
* Return filtered response.
|
65 |
+
* @see fl_builder_ajax_layout_response
|
66 |
+
*/
|
67 |
return apply_filters( 'fl_builder_ajax_layout_response', array(
|
68 |
+
'partial' => $partial_refresh_data['is_partial_refresh'],
|
69 |
+
'nodeId' => $partial_refresh_data['node_id'],
|
70 |
+
'nodeType' => $partial_refresh_data['node_type'],
|
71 |
+
'oldNodeId' => $old_node_id,
|
72 |
+
'html' => $html,
|
73 |
+
'scriptsStyles' => $scripts_styles,
|
74 |
+
'css' => $assets['css'],
|
75 |
+
'js' => $assets['js'],
|
76 |
) );
|
77 |
}
|
78 |
|
89 |
// Add the row.
|
90 |
$row = FLBuilderModel::add_row( $cols, $position, $module );
|
91 |
|
92 |
+
/**
|
93 |
+
* Render the row.
|
94 |
+
* @see fl_builder_before_render_ajax_layout_html
|
95 |
+
*/
|
96 |
do_action( 'fl_builder_before_render_ajax_layout_html' );
|
97 |
ob_start();
|
98 |
FLBuilder::render_row( $row );
|
99 |
$html = ob_get_clean();
|
100 |
+
|
101 |
+
/**
|
102 |
+
* After rendering row.
|
103 |
+
* @see fl_builder_after_render_ajax_layout_html
|
104 |
+
*/
|
105 |
do_action( 'fl_builder_after_render_ajax_layout_html' );
|
106 |
|
107 |
// Return the response.
|
108 |
return array(
|
109 |
+
'partial' => true,
|
110 |
+
'nodeType' => $row->type,
|
111 |
+
'html' => $html,
|
112 |
+
'js' => 'FLBuilder._renderLayoutComplete();',
|
113 |
);
|
114 |
}
|
115 |
|
123 |
* @return array
|
124 |
*/
|
125 |
static public function render_new_row_template( $position, $template_id, $template_type = 'user' ) {
|
126 |
+
if ( class_exists( 'FLBuilderTemplatesOverride' ) && FLBuilderTemplatesOverride::show_rows() && FLBuilderTemplatesOverride::get_source_site_id() ) {
|
127 |
+
$row = FLBuilderModel::apply_node_template( $template_id, null, $position );
|
128 |
+
} elseif ( 'core' == $template_type ) {
|
129 |
$template = FLBuilderModel::get_template( $template_id, 'row' );
|
130 |
$row = FLBuilderModel::apply_node_template( $template_id, null, $position, $template );
|
131 |
} else {
|
167 |
// Add the group.
|
168 |
$group = FLBuilderModel::add_col_group( $node_id, $cols, $position, $module );
|
169 |
|
170 |
+
/**
|
171 |
+
* Render the group.
|
172 |
+
* @see fl_builder_before_render_ajax_layout_html
|
173 |
+
*/
|
174 |
do_action( 'fl_builder_before_render_ajax_layout_html' );
|
175 |
ob_start();
|
176 |
FLBuilder::render_column_group( $group );
|
177 |
$html = ob_get_clean();
|
178 |
+
|
179 |
+
/**
|
180 |
+
* After rendering group.
|
181 |
+
* @see fl_builder_after_render_ajax_layout_html
|
182 |
+
*/
|
183 |
do_action( 'fl_builder_after_render_ajax_layout_html' );
|
184 |
|
185 |
// Return the response.
|
186 |
return array(
|
187 |
+
'partial' => true,
|
188 |
+
'nodeType' => $group->type,
|
189 |
+
'html' => $html,
|
190 |
+
'js' => 'FLBuilder._renderLayoutComplete();',
|
191 |
);
|
192 |
}
|
193 |
|
233 |
|
234 |
// Get the node to render.
|
235 |
if ( ! $parent ) {
|
236 |
+
$row = FLBuilderModel::get_col_parent( 'row', $column );
|
237 |
+
$render_id = $row->node;
|
238 |
} elseif ( 'row' == $parent->type ) {
|
239 |
+
$group = FLBuilderModel::get_col_parent( 'column-group', $column );
|
240 |
+
$render_id = $group->node;
|
241 |
} elseif ( 'column-group' == $parent->type ) {
|
242 |
+
$render_id = $parent->node;
|
243 |
} else {
|
244 |
$render_id = $column->node;
|
245 |
}
|
301 |
|
302 |
// Get the node to render.
|
303 |
if ( ! $parent ) {
|
304 |
+
$row = FLBuilderModel::get_module_parent( 'row', $module );
|
305 |
+
$render_id = $row->node;
|
306 |
} elseif ( 'row' == $parent->type ) {
|
307 |
+
$group = FLBuilderModel::get_module_parent( 'column-group', $module );
|
308 |
+
$render_id = $group->node;
|
309 |
} elseif ( 'column-group' == $parent->type ) {
|
310 |
+
$render_id = $parent->node;
|
311 |
} else {
|
312 |
$render_id = $module->node;
|
313 |
}
|
317 |
|
318 |
// Return the response.
|
319 |
return array(
|
320 |
+
'type' => $module->settings->type,
|
321 |
+
'nodeId' => $module->node,
|
322 |
+
'parentId' => $module->parent,
|
323 |
+
'global' => FLBuilderModel::is_node_global( $module ),
|
324 |
+
'layout' => self::render( $render_id ),
|
325 |
+
'settings' => null === $template_id && ! $alias ? null : $module->settings,
|
326 |
+
'legacy' => FLBuilderUISettingsForms::pre_render_legacy_module_settings( $module->settings->type, $module->settings ),
|
327 |
);
|
328 |
}
|
329 |
|
352 |
// Get the data if it's not cached.
|
353 |
if ( ! self::$partial_refresh_data ) {
|
354 |
|
355 |
+
$post_data = FLBuilderModel::get_post_data();
|
356 |
$partial_refresh = false;
|
357 |
+
$node_type = null;
|
358 |
|
359 |
// Check for partial refresh if we have a node ID.
|
360 |
if ( isset( $post_data['node_id'] ) ) {
|
361 |
|
362 |
// Get the node.
|
363 |
+
$node_id = $post_data['node_id'];
|
364 |
+
$node = FLBuilderModel::get_node( $post_data['node_id'] );
|
365 |
$node_type = null;
|
366 |
|
367 |
// Check a module for partial refresh.
|
368 |
if ( $node && 'module' == $node->type ) {
|
369 |
+
$node = FLBuilderModel::get_module( $node_id );
|
370 |
+
$node_type = 'module';
|
371 |
+
$partial_refresh = $node->partial_refresh;
|
372 |
} elseif ( $node ) {
|
373 |
+
$node_type = $node->type;
|
374 |
+
$partial_refresh = self::node_modules_support_partial_refresh( $node );
|
375 |
}
|
376 |
} else {
|
377 |
+
$node_id = null;
|
378 |
+
$node = null;
|
379 |
+
$node_type = null;
|
380 |
}
|
381 |
|
382 |
// Cache the partial refresh data.
|
383 |
self::$partial_refresh_data = array(
|
384 |
'is_partial_refresh' => $partial_refresh,
|
385 |
+
'node_id' => $node_id,
|
386 |
+
'node' => $node,
|
387 |
+
'node_type' => $node_type,
|
388 |
);
|
389 |
}
|
390 |
|
401 |
* @return bool
|
402 |
*/
|
403 |
static private function node_modules_support_partial_refresh( $node ) {
|
404 |
+
$nodes = FLBuilderModel::get_categorized_nodes();
|
405 |
|
406 |
if ( 'row' == $node->type ) {
|
407 |
|
455 |
* @return string
|
456 |
*/
|
457 |
static private function render_html() {
|
458 |
+
/**
|
459 |
+
* Before html for layout or node is rendered.
|
460 |
+
* @see fl_builder_before_render_ajax_layout_html
|
461 |
+
*/
|
462 |
do_action( 'fl_builder_before_render_ajax_layout_html' );
|
463 |
|
464 |
// Get the partial refresh data.
|
474 |
|
475 |
case 'row':
|
476 |
FLBuilder::render_row( $partial_refresh_data['node'] );
|
477 |
+
break;
|
478 |
|
479 |
case 'column-group':
|
480 |
FLBuilder::render_column_group( $partial_refresh_data['node'] );
|
481 |
+
break;
|
482 |
|
483 |
case 'column':
|
484 |
FLBuilder::render_column( $partial_refresh_data['node'] );
|
485 |
+
break;
|
486 |
|
487 |
case 'module':
|
488 |
FLBuilder::render_module( $partial_refresh_data['node'] );
|
489 |
+
break;
|
490 |
}
|
491 |
} else {
|
492 |
FLBuilder::render_nodes();
|
507 |
echo do_shortcode( $html );
|
508 |
$html = ob_get_clean();
|
509 |
}
|
510 |
+
/**
|
511 |
+
* After html for layout or node is rendered.
|
512 |
+
* @see fl_builder_after_render_ajax_layout_html
|
513 |
+
*/
|
514 |
do_action( 'fl_builder_after_render_ajax_layout_html' );
|
515 |
|
516 |
// Return the rendered HTML.
|
525 |
* @return array
|
526 |
*/
|
527 |
static private function render_assets() {
|
528 |
+
$partial_refresh_data = self::get_partial_refresh_data();
|
529 |
+
$asset_info = FLBuilderModel::get_asset_info();
|
530 |
+
$asset_ver = FLBuilderModel::get_asset_version();
|
531 |
+
$enqueuemethod = FLBuilderModel::get_asset_enqueue_method();
|
532 |
+
$assets = array(
|
533 |
+
'js' => '',
|
534 |
'css' => '',
|
535 |
);
|
536 |
|
547 |
switch ( $partial_refresh_data['node']->type ) {
|
548 |
|
549 |
case 'row':
|
550 |
+
$assets['js'] = FLBuilder::render_row_js( $partial_refresh_data['node'] );
|
551 |
$assets['js'] .= FLBuilder::render_row_modules_js( $partial_refresh_data['node'] );
|
552 |
+
break;
|
553 |
|
554 |
case 'column-group':
|
555 |
$assets['js'] = FLBuilder::render_column_group_modules_js( $partial_refresh_data['node'] );
|
556 |
+
break;
|
557 |
|
558 |
case 'column':
|
559 |
$assets['js'] = FLBuilder::render_column_modules_js( $partial_refresh_data['node'] );
|
560 |
+
break;
|
561 |
|
562 |
case 'module':
|
563 |
$assets['js'] = FLBuilder::render_module_js( $partial_refresh_data['node'] );
|
564 |
+
break;
|
565 |
}
|
566 |
|
567 |
$assets['js'] .= 'FLBuilder._renderLayoutComplete();';
|
568 |
|
569 |
try {
|
570 |
$min = FLJSMin::minify( $assets['js'] );
|
571 |
+
} catch ( Exception $e ) {
|
572 |
+
}
|
573 |
|
574 |
if ( $min ) {
|
575 |
$assets['js'] = $min;
|
645 |
global $wp_scripts;
|
646 |
global $wp_styles;
|
647 |
|
648 |
+
$partial_refresh_data = self::get_partial_refresh_data();
|
649 |
+
$modules = array();
|
650 |
+
$scripts_styles = '';
|
651 |
|
652 |
// Enqueue module font styles.
|
653 |
if ( ! $partial_refresh_data['is_partial_refresh'] ) {
|
657 |
foreach ( $nodes as $node ) {
|
658 |
if ( 'module' === $node->type && isset( FLBuilderModel::$modules[ $node->settings->type ] ) ) {
|
659 |
$node->form = FLBuilderModel::$modules[ $node->settings->type ]->form;
|
660 |
+
$modules[] = $node;
|
661 |
}
|
662 |
}
|
663 |
} else {
|
classes/class-fl-builder-art.php
CHANGED
@@ -41,73 +41,77 @@ class FLBuilderArt {
|
|
41 |
$art_dir = FL_BUILDER_DIR . 'includes/shapes/';
|
42 |
|
43 |
self::register_shape(array(
|
44 |
-
'label'
|
45 |
-
'name'
|
46 |
-
'width'
|
47 |
'height' => 33.98,
|
48 |
'render' => $art_dir . 'edge-slant.svg.php',
|
49 |
));
|
50 |
|
51 |
self::register_shape(array(
|
52 |
-
'label'
|
53 |
-
'name'
|
54 |
-
'width'
|
55 |
'height' => 102,
|
56 |
'render' => $art_dir . 'wavy.svg.php',
|
57 |
));
|
58 |
|
59 |
self::register_shape( array(
|
60 |
-
'label'
|
61 |
-
'name'
|
62 |
-
'width'
|
63 |
'height' => 50,
|
64 |
'render' => $art_dir . 'midpoint.svg.php',
|
65 |
));
|
66 |
|
67 |
self::register_shape( array(
|
68 |
-
'label'
|
69 |
-
'name'
|
70 |
-
'width'
|
71 |
'height' => 34,
|
72 |
'render' => $art_dir . 'triangle.svg.php',
|
73 |
));
|
74 |
self::register_shape( array(
|
75 |
-
'label'
|
76 |
-
'name'
|
77 |
-
'width'
|
78 |
'height' => 100,
|
79 |
'render' => $art_dir . 'circle.svg.php',
|
80 |
));
|
81 |
self::register_shape( array(
|
82 |
-
'label'
|
83 |
-
'name'
|
84 |
-
'width'
|
85 |
'height' => 50,
|
86 |
'render' => $art_dir . 'concave.svg.php',
|
87 |
));
|
88 |
self::register_shape( array(
|
89 |
-
'label'
|
90 |
-
'name'
|
91 |
-
'width'
|
92 |
'height' => 315,
|
93 |
'render' => $art_dir . 'dot-cluster.svg.php',
|
94 |
));
|
95 |
self::register_shape( array(
|
96 |
-
'label'
|
97 |
-
'name'
|
98 |
-
'width'
|
99 |
'height' => 600,
|
100 |
'render' => $art_dir . 'topography.svg.php',
|
101 |
));
|
102 |
self::register_shape( array(
|
103 |
-
'label'
|
104 |
-
'name'
|
105 |
-
'width'
|
106 |
'height' => 450,
|
107 |
'render' => $art_dir . 'rect.svg.php',
|
108 |
));
|
109 |
|
110 |
-
|
|
|
|
|
|
|
|
|
111 |
do_action( 'fl_register_art' );
|
112 |
}
|
113 |
|
@@ -119,33 +123,33 @@ class FLBuilderArt {
|
|
119 |
*/
|
120 |
static public function register_shape( $args = array() ) {
|
121 |
$defaults = array(
|
122 |
-
'label'
|
123 |
-
'name'
|
124 |
-
'x'
|
125 |
-
'y'
|
126 |
-
'width'
|
127 |
-
'height'
|
128 |
'preserve_aspect_ratio' => 'none',
|
129 |
-
'render'
|
130 |
-
'preset_settings'
|
131 |
);
|
132 |
|
133 |
$args = wp_parse_args( $args, $defaults );
|
134 |
-
$key
|
135 |
|
136 |
/**
|
137 |
* Setup a preset to reference the shape's initial configuration later
|
138 |
* This is so when you choose a shape, we can also setup other fields for the optimal inital appearance.
|
139 |
*/
|
140 |
FLBuilderSettingsPresets::register( 'shape', array(
|
141 |
-
'name'
|
142 |
-
'label'
|
143 |
'settings' => $args['preset_settings'],
|
144 |
-
'data'
|
145 |
'viewBox' => array(
|
146 |
-
'x'
|
147 |
-
'y'
|
148 |
-
'width'
|
149 |
'height' => $args['height'],
|
150 |
),
|
151 |
),
|
@@ -236,17 +240,17 @@ class FLBuilderArt {
|
|
236 |
|
237 |
if ( ! empty( $settings->{'top_edge_shape'} ) ) {
|
238 |
$layers['top'] = array(
|
239 |
-
'label'
|
240 |
-
'type'
|
241 |
-
'prefix'
|
242 |
'position' => 'top',
|
243 |
);
|
244 |
}
|
245 |
if ( ! empty( $settings->{'bottom_edge_shape'} ) ) {
|
246 |
$layers['bottom'] = array(
|
247 |
-
'label'
|
248 |
-
'type'
|
249 |
-
'prefix'
|
250 |
'position' => 'bottom',
|
251 |
);
|
252 |
}
|
@@ -294,23 +298,23 @@ class FLBuilderArt {
|
|
294 |
*/
|
295 |
static public function render_node_shape_layer( $layer, $node ) {
|
296 |
|
297 |
-
$settings
|
298 |
-
$id
|
299 |
-
$position
|
300 |
-
$prefix
|
301 |
$shape_name = $settings->{ $prefix . 'shape' };
|
302 |
$shape_args = self::get_art( $shape_name );
|
303 |
-
$content
|
304 |
|
305 |
-
$x
|
306 |
-
$y
|
307 |
-
$width
|
308 |
-
$height
|
309 |
-
$view_box
|
310 |
$preserve_aspect_ratio = $shape_args['preserve_aspect_ratio'];
|
311 |
|
312 |
-
$align
|
313 |
-
$ending
|
314 |
$svg_class = 'fl-builder-layer-align-' . $ending;
|
315 |
include FL_BUILDER_DIR . 'includes/shape-layer.php';
|
316 |
}
|
@@ -323,8 +327,8 @@ class FLBuilderArt {
|
|
323 |
*/
|
324 |
static public function get_shape_settings_sections() {
|
325 |
$sections = array();
|
326 |
-
$layers
|
327 |
-
'top'
|
328 |
'bottom' => __( 'Bottom', 'fl-builder' ),
|
329 |
);
|
330 |
|
@@ -333,18 +337,18 @@ class FLBuilderArt {
|
|
333 |
|
334 |
// Preset & Shape Section
|
335 |
$sections[ $prefix . 'shape' ] = array(
|
336 |
-
'title'
|
337 |
'fields' => array(
|
338 |
$prefix . 'shape' => array(
|
339 |
-
'type'
|
340 |
-
'label'
|
341 |
'options' => 'shapes',
|
342 |
-
'hide'
|
343 |
'' => array(
|
344 |
'sections' => array(
|
345 |
$prefix . 'style',
|
346 |
),
|
347 |
-
'fields'
|
348 |
$prefix . 'size',
|
349 |
$prefix . 'align',
|
350 |
$prefix . 'z_pos',
|
@@ -352,21 +356,21 @@ class FLBuilderArt {
|
|
352 |
),
|
353 |
),
|
354 |
'preview' => array(
|
355 |
-
'type'
|
356 |
'callback' => 'previewShape',
|
357 |
-
'prefix'
|
358 |
'position' => $position,
|
359 |
),
|
360 |
),
|
361 |
-
$prefix . 'size'
|
362 |
-
'type'
|
363 |
-
'label'
|
364 |
-
'units'
|
365 |
-
'slider'
|
366 |
-
'width'
|
367 |
'px' => array(
|
368 |
-
'min'
|
369 |
-
'max'
|
370 |
'step' => 10,
|
371 |
),
|
372 |
'vw' => array(
|
@@ -377,15 +381,15 @@ class FLBuilderArt {
|
|
377 |
'min' => 0,
|
378 |
'max' => 500,
|
379 |
),
|
380 |
-
'%'
|
381 |
'min' => 0,
|
382 |
'max' => 300,
|
383 |
),
|
384 |
),
|
385 |
'height' => array(
|
386 |
'px' => array(
|
387 |
-
'min'
|
388 |
-
'max'
|
389 |
'step' => 10,
|
390 |
),
|
391 |
'vw' => array(
|
@@ -396,12 +400,12 @@ class FLBuilderArt {
|
|
396 |
'min' => 0,
|
397 |
'max' => 200,
|
398 |
),
|
399 |
-
'%'
|
400 |
'min' => 0,
|
401 |
'max' => 100,
|
402 |
),
|
403 |
),
|
404 |
-
'top'
|
405 |
'px' => array(
|
406 |
'min' => -500,
|
407 |
'max' => 500,
|
@@ -414,43 +418,43 @@ class FLBuilderArt {
|
|
414 |
'min' => -20,
|
415 |
'max' => 20,
|
416 |
),
|
417 |
-
'%'
|
418 |
'min' => 0,
|
419 |
'max' => 100,
|
420 |
),
|
421 |
),
|
422 |
),
|
423 |
-
'keys'
|
424 |
-
'width'
|
425 |
'height' => __( 'Height', 'fl-builder' ),
|
426 |
-
'top'
|
427 |
),
|
428 |
'preview' => array(
|
429 |
-
'type'
|
430 |
'callback' => 'previewShapeLayerSize',
|
431 |
-
'prefix'
|
432 |
'position' => $position,
|
433 |
),
|
434 |
),
|
435 |
$prefix . 'align' => array(
|
436 |
-
'type'
|
437 |
-
'label'
|
438 |
'default' => $position . ' center',
|
439 |
'options' => array(
|
440 |
-
'top left'
|
441 |
-
'top center'
|
442 |
-
'top right'
|
443 |
-
'center left'
|
444 |
'center center' => __( 'Center', 'fl-builder' ),
|
445 |
-
'center right'
|
446 |
-
'bottom left'
|
447 |
'bottom center' => __( 'Bottom Center', 'fl-builder' ),
|
448 |
-
'bottom right'
|
449 |
),
|
450 |
'preview' => array(
|
451 |
-
'type'
|
452 |
'callback' => 'previewShapeAlign',
|
453 |
-
'prefix'
|
454 |
'selector' => ".fl-builder-$position-edge-layer > *",
|
455 |
),
|
456 |
),
|
@@ -459,66 +463,66 @@ class FLBuilderArt {
|
|
459 |
|
460 |
// Shape Styles
|
461 |
$sections[ $prefix . 'style' ] = array(
|
462 |
-
'title'
|
463 |
'fields' => array(
|
464 |
-
$prefix . 'fill_style'
|
465 |
-
'type'
|
466 |
'options' => array(
|
467 |
-
'color'
|
468 |
'gradient' => __( 'Gradient Fill', 'fl-builder' ),
|
469 |
),
|
470 |
'default' => 'color',
|
471 |
'preview' => array(
|
472 |
-
'type'
|
473 |
'callback' => 'previewShapeFillStyle',
|
474 |
'position' => $position,
|
475 |
-
'prefix'
|
476 |
'selector' => ".fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
477 |
),
|
478 |
-
'toggle'
|
479 |
-
'color'
|
480 |
'fields' => array(
|
481 |
-
$prefix . 'fill_color'
|
482 |
),
|
483 |
),
|
484 |
'gradient' => array(
|
485 |
'fields' => array(
|
486 |
-
$prefix . 'fill_gradient'
|
487 |
),
|
488 |
),
|
489 |
),
|
490 |
),
|
491 |
-
$prefix . 'fill_color'
|
492 |
-
'type'
|
493 |
-
'connections'
|
494 |
-
'label'
|
495 |
-
'show_reset'
|
496 |
-
'show_alpha'
|
497 |
-
'responsive'
|
498 |
-
'default'
|
499 |
-
'preview'
|
500 |
-
'type'
|
501 |
'selector' => ".fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
502 |
'property' => 'fill',
|
503 |
),
|
504 |
),
|
505 |
$prefix . 'fill_gradient' => array(
|
506 |
-
'type'
|
507 |
-
'label'
|
508 |
'default' => '',
|
509 |
'preview' => array(
|
510 |
-
'type'
|
511 |
'callback' => 'previewShapeGradientFill',
|
512 |
'position' => $position,
|
513 |
-
'prefix'
|
514 |
),
|
515 |
),
|
516 |
|
517 |
-
$prefix . 'transform'
|
518 |
-
'type'
|
519 |
-
'label'
|
520 |
'preview' => array(
|
521 |
-
'type'
|
522 |
'callback' => 'previewShapeTransform',
|
523 |
'selector' => ".fl-builder-$position-edge-layer",
|
524 |
'position' => $position,
|
@@ -529,17 +533,17 @@ class FLBuilderArt {
|
|
529 |
}
|
530 |
|
531 |
$sections['shapes_container'] = array(
|
532 |
-
'title'
|
533 |
'fields' => array(
|
534 |
'container_overflow' => array(
|
535 |
-
'type'
|
536 |
-
'label'
|
537 |
'options' => array(
|
538 |
-
''
|
539 |
'hidden' => __( 'Clip Contents', 'fl-builder' ),
|
540 |
),
|
541 |
'preview' => array(
|
542 |
-
'type'
|
543 |
'selector' => '.fl-row-content-wrap',
|
544 |
'property' => 'overflow',
|
545 |
),
|
@@ -557,7 +561,7 @@ class FLBuilderArt {
|
|
557 |
*/
|
558 |
static public function render_shape_layers_css( $node ) {
|
559 |
$settings = $node->settings;
|
560 |
-
$id
|
561 |
|
562 |
$layers = array( 'top', 'bottom' );
|
563 |
|
@@ -567,44 +571,44 @@ class FLBuilderArt {
|
|
567 |
if ( ! empty( $settings->{ $prefix . 'shape' } ) ) {
|
568 |
|
569 |
$shape_name = $settings->{ $prefix . 'shape' };
|
570 |
-
$presets
|
571 |
-
$preset
|
572 |
|
573 |
FLBuilderCSS::rule( array(
|
574 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer",
|
575 |
-
'enabled'
|
576 |
-
'props'
|
577 |
$position => $settings->{ $prefix . 'size_top'} . $settings->{ $prefix . 'size_unit' },
|
578 |
),
|
579 |
) );
|
580 |
|
581 |
// Width, Height & Align
|
582 |
$shape_selector = ".fl-node-$id .fl-builder-$position-edge-layer > *";
|
583 |
-
$shape_align
|
584 |
-
$align_y
|
585 |
-
$align_x
|
586 |
-
$width
|
587 |
-
$height
|
588 |
-
$size_unit
|
589 |
|
590 |
// Defaults
|
591 |
$shape_size_rule = array(
|
592 |
'selector' => $shape_selector,
|
593 |
-
'enabled'
|
594 |
-
'props'
|
595 |
);
|
596 |
-
$size_props
|
597 |
-
'width'
|
598 |
-
'left'
|
599 |
-
'right'
|
600 |
'height' => 'auto',
|
601 |
-
'top'
|
602 |
'bottom' => 'auto',
|
603 |
);
|
604 |
|
605 |
if ( ! empty( $width ) ) {
|
606 |
$size_props['width'] = $width . $size_unit;
|
607 |
-
$width_offset
|
608 |
|
609 |
switch ( $align_x ) {
|
610 |
case 'left':
|
@@ -621,12 +625,12 @@ class FLBuilderArt {
|
|
621 |
|
622 |
$height_offset = '';
|
623 |
if ( ! empty( $height ) ) {
|
624 |
-
$height_offset
|
625 |
$size_props['height'] = $height . $size_unit;
|
626 |
} elseif ( $width ) {
|
627 |
$view_box_height = $preset['data']['viewBox']['width'];
|
628 |
-
$implied_height
|
629 |
-
$height_offset
|
630 |
}
|
631 |
|
632 |
switch ( $align_y ) {
|
@@ -635,7 +639,7 @@ class FLBuilderArt {
|
|
635 |
break;
|
636 |
case 'bottom':
|
637 |
$size_props['bottom'] = '0';
|
638 |
-
$size_props['top']
|
639 |
break;
|
640 |
case 'center':
|
641 |
$size_props['top'] = "calc( 50% - $height_offset )";
|
@@ -647,10 +651,10 @@ class FLBuilderArt {
|
|
647 |
|
648 |
// Shape Transforms
|
649 |
|
650 |
-
$transforms
|
651 |
$layer_transforms = array();
|
652 |
$shape_transforms = array();
|
653 |
-
$sign
|
654 |
if ( ! empty( $transforms ) ) {
|
655 |
|
656 |
foreach ( $transforms as $prop => $value ) {
|
@@ -681,14 +685,14 @@ class FLBuilderArt {
|
|
681 |
$value = abs( $value );
|
682 |
}
|
683 |
|
684 |
-
$value
|
685 |
$shape_transforms[] = $value;
|
686 |
break;
|
687 |
|
688 |
case 'translateX':
|
689 |
case 'translateY':
|
690 |
if ( ! empty( $value ) ) {
|
691 |
-
$value
|
692 |
$shape_transforms[] = $value;
|
693 |
}
|
694 |
break;
|
@@ -710,9 +714,9 @@ class FLBuilderArt {
|
|
710 |
// Shape Transforms
|
711 |
FLBuilderCSS::rule( array(
|
712 |
'settings' => $settings,
|
713 |
-
'enabled'
|
714 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer > *",
|
715 |
-
'props'
|
716 |
'transform' => implode( ' ', $shape_transforms ),
|
717 |
),
|
718 |
) );
|
@@ -724,20 +728,20 @@ class FLBuilderArt {
|
|
724 |
|
725 |
case 'color':
|
726 |
FLBuilderCSS::responsive_rule( array(
|
727 |
-
'settings'
|
728 |
'setting_name' => $prefix . 'fill_color',
|
729 |
-
'selector'
|
730 |
-
'prop'
|
731 |
) );
|
732 |
break;
|
733 |
|
734 |
case 'gradient':
|
735 |
$gradient_type = $settings->{ $prefix . 'fill_gradient' }['type'];
|
736 |
-
$gradient_id
|
737 |
FLBuilderCSS::rule( array(
|
738 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer .fl-shape",
|
739 |
-
'enabled'
|
740 |
-
'props'
|
741 |
'fill' => 'url(#' . $gradient_id . ')',
|
742 |
),
|
743 |
) );
|
@@ -746,15 +750,15 @@ class FLBuilderArt {
|
|
746 |
$pattern_id = "fl-row-$id-$prefix-pattern";
|
747 |
FLBuilderCSS::rule( array(
|
748 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
749 |
-
'enabled'
|
750 |
-
'props'
|
751 |
'fill' => 'url(#' . $pattern_id . ')',
|
752 |
),
|
753 |
) );
|
754 |
FLBuilderCSS::rule( array(
|
755 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer pattern .fl-shape",
|
756 |
-
'enabled'
|
757 |
-
'props'
|
758 |
'fill' => $settings->{ $prefix . 'fill_pattern_shape_color' },
|
759 |
),
|
760 |
) );
|
@@ -766,10 +770,10 @@ class FLBuilderArt {
|
|
766 |
|
767 |
// Shared styles
|
768 |
FLBuilderCSS::responsive_rule( array(
|
769 |
-
'settings'
|
770 |
'setting_name' => 'container_overflow',
|
771 |
-
'selector'
|
772 |
-
'prop'
|
773 |
) );
|
774 |
}
|
775 |
|
41 |
$art_dir = FL_BUILDER_DIR . 'includes/shapes/';
|
42 |
|
43 |
self::register_shape(array(
|
44 |
+
'label' => __( 'Slanted Edge', 'fl-builder' ),
|
45 |
+
'name' => 'edge-slant',
|
46 |
+
'width' => 422,
|
47 |
'height' => 33.98,
|
48 |
'render' => $art_dir . 'edge-slant.svg.php',
|
49 |
));
|
50 |
|
51 |
self::register_shape(array(
|
52 |
+
'label' => __( 'Waves', 'fl-builder' ),
|
53 |
+
'name' => 'wavy',
|
54 |
+
'width' => 800,
|
55 |
'height' => 102,
|
56 |
'render' => $art_dir . 'wavy.svg.php',
|
57 |
));
|
58 |
|
59 |
self::register_shape( array(
|
60 |
+
'label' => __( 'Midpoint', 'fl-builder' ),
|
61 |
+
'name' => 'midpoint',
|
62 |
+
'width' => 800,
|
63 |
'height' => 50,
|
64 |
'render' => $art_dir . 'midpoint.svg.php',
|
65 |
));
|
66 |
|
67 |
self::register_shape( array(
|
68 |
+
'label' => __( 'Triangle', 'fl-builder' ),
|
69 |
+
'name' => 'triangle',
|
70 |
+
'width' => 50,
|
71 |
'height' => 34,
|
72 |
'render' => $art_dir . 'triangle.svg.php',
|
73 |
));
|
74 |
self::register_shape( array(
|
75 |
+
'label' => __( 'Circle', 'fl-builder' ),
|
76 |
+
'name' => 'circle',
|
77 |
+
'width' => 100,
|
78 |
'height' => 100,
|
79 |
'render' => $art_dir . 'circle.svg.php',
|
80 |
));
|
81 |
self::register_shape( array(
|
82 |
+
'label' => __( 'Concave', 'fl-builder' ),
|
83 |
+
'name' => 'concave',
|
84 |
+
'width' => 800,
|
85 |
'height' => 50,
|
86 |
'render' => $art_dir . 'concave.svg.php',
|
87 |
));
|
88 |
self::register_shape( array(
|
89 |
+
'label' => __( 'Spots', 'fl-builder' ),
|
90 |
+
'name' => 'dot-cluster',
|
91 |
+
'width' => 800,
|
92 |
'height' => 315,
|
93 |
'render' => $art_dir . 'dot-cluster.svg.php',
|
94 |
));
|
95 |
self::register_shape( array(
|
96 |
+
'label' => __( 'Topography', 'fl-builder' ),
|
97 |
+
'name' => 'topography',
|
98 |
+
'width' => 600,
|
99 |
'height' => 600,
|
100 |
'render' => $art_dir . 'topography.svg.php',
|
101 |
));
|
102 |
self::register_shape( array(
|
103 |
+
'label' => __( 'Rectangle', 'fl-builder' ),
|
104 |
+
'name' => 'rect',
|
105 |
+
'width' => 800,
|
106 |
'height' => 450,
|
107 |
'render' => $art_dir . 'rect.svg.php',
|
108 |
));
|
109 |
|
110 |
+
/**
|
111 |
+
* Trigger registration process for external shapes.
|
112 |
+
* @see fl_register_art
|
113 |
+
* @link https://kb.wpbeaverbuilder.com/article/687-add-custom-shape-art
|
114 |
+
*/
|
115 |
do_action( 'fl_register_art' );
|
116 |
}
|
117 |
|
123 |
*/
|
124 |
static public function register_shape( $args = array() ) {
|
125 |
$defaults = array(
|
126 |
+
'label' => __( 'Untitled Shape', 'fl-builder' ),
|
127 |
+
'name' => 'untitled-shape',
|
128 |
+
'x' => 0,
|
129 |
+
'y' => 0,
|
130 |
+
'width' => 0,
|
131 |
+
'height' => 0,
|
132 |
'preserve_aspect_ratio' => 'none',
|
133 |
+
'render' => '',
|
134 |
+
'preset_settings' => array(),
|
135 |
);
|
136 |
|
137 |
$args = wp_parse_args( $args, $defaults );
|
138 |
+
$key = $args['name'];
|
139 |
|
140 |
/**
|
141 |
* Setup a preset to reference the shape's initial configuration later
|
142 |
* This is so when you choose a shape, we can also setup other fields for the optimal inital appearance.
|
143 |
*/
|
144 |
FLBuilderSettingsPresets::register( 'shape', array(
|
145 |
+
'name' => $args['name'],
|
146 |
+
'label' => $args['label'],
|
147 |
'settings' => $args['preset_settings'],
|
148 |
+
'data' => array(
|
149 |
'viewBox' => array(
|
150 |
+
'x' => $args['x'],
|
151 |
+
'y' => $args['y'],
|
152 |
+
'width' => $args['width'],
|
153 |
'height' => $args['height'],
|
154 |
),
|
155 |
),
|
240 |
|
241 |
if ( ! empty( $settings->{'top_edge_shape'} ) ) {
|
242 |
$layers['top'] = array(
|
243 |
+
'label' => __( 'Top Shape Layer', 'fl-builder' ),
|
244 |
+
'type' => 'shape',
|
245 |
+
'prefix' => 'top_edge_',
|
246 |
'position' => 'top',
|
247 |
);
|
248 |
}
|
249 |
if ( ! empty( $settings->{'bottom_edge_shape'} ) ) {
|
250 |
$layers['bottom'] = array(
|
251 |
+
'label' => __( 'Bottom Shape Layer', 'fl-builder' ),
|
252 |
+
'type' => 'shape',
|
253 |
+
'prefix' => 'bottom_edge_',
|
254 |
'position' => 'bottom',
|
255 |
);
|
256 |
}
|
298 |
*/
|
299 |
static public function render_node_shape_layer( $layer, $node ) {
|
300 |
|
301 |
+
$settings = $node->settings;
|
302 |
+
$id = $node->node;
|
303 |
+
$position = $layer['position'];
|
304 |
+
$prefix = $layer['prefix'];
|
305 |
$shape_name = $settings->{ $prefix . 'shape' };
|
306 |
$shape_args = self::get_art( $shape_name );
|
307 |
+
$content = self::render_art( $shape_args, $settings );
|
308 |
|
309 |
+
$x = $shape_args['x'];
|
310 |
+
$y = $shape_args['y'];
|
311 |
+
$width = $shape_args['width'];
|
312 |
+
$height = $shape_args['height'];
|
313 |
+
$view_box = "$x $y $width $height";
|
314 |
$preserve_aspect_ratio = $shape_args['preserve_aspect_ratio'];
|
315 |
|
316 |
+
$align = $settings->{ $prefix . 'align' };
|
317 |
+
$ending = str_replace( ' ', '-', $align );
|
318 |
$svg_class = 'fl-builder-layer-align-' . $ending;
|
319 |
include FL_BUILDER_DIR . 'includes/shape-layer.php';
|
320 |
}
|
327 |
*/
|
328 |
static public function get_shape_settings_sections() {
|
329 |
$sections = array();
|
330 |
+
$layers = array(
|
331 |
+
'top' => __( 'Top', 'fl-builder' ),
|
332 |
'bottom' => __( 'Bottom', 'fl-builder' ),
|
333 |
);
|
334 |
|
337 |
|
338 |
// Preset & Shape Section
|
339 |
$sections[ $prefix . 'shape' ] = array(
|
340 |
+
'title' => sprintf( __( '%s Shape', 'fl-builder' ), $position_label ),
|
341 |
'fields' => array(
|
342 |
$prefix . 'shape' => array(
|
343 |
+
'type' => 'select',
|
344 |
+
'label' => __( 'Shape', 'fl-builder' ),
|
345 |
'options' => 'shapes',
|
346 |
+
'hide' => array(
|
347 |
'' => array(
|
348 |
'sections' => array(
|
349 |
$prefix . 'style',
|
350 |
),
|
351 |
+
'fields' => array(
|
352 |
$prefix . 'size',
|
353 |
$prefix . 'align',
|
354 |
$prefix . 'z_pos',
|
356 |
),
|
357 |
),
|
358 |
'preview' => array(
|
359 |
+
'type' => 'callback',
|
360 |
'callback' => 'previewShape',
|
361 |
+
'prefix' => $prefix,
|
362 |
'position' => $position,
|
363 |
),
|
364 |
),
|
365 |
+
$prefix . 'size' => array(
|
366 |
+
'type' => 'dimension',
|
367 |
+
'label' => __( 'Size', 'fl-builder' ),
|
368 |
+
'units' => array( 'px', 'vw', 'vh', '%' ),
|
369 |
+
'slider' => array(
|
370 |
+
'width' => array(
|
371 |
'px' => array(
|
372 |
+
'min' => 0,
|
373 |
+
'max' => 5000,
|
374 |
'step' => 10,
|
375 |
),
|
376 |
'vw' => array(
|
381 |
'min' => 0,
|
382 |
'max' => 500,
|
383 |
),
|
384 |
+
'%' => array(
|
385 |
'min' => 0,
|
386 |
'max' => 300,
|
387 |
),
|
388 |
),
|
389 |
'height' => array(
|
390 |
'px' => array(
|
391 |
+
'min' => 0,
|
392 |
+
'max' => 2000,
|
393 |
'step' => 10,
|
394 |
),
|
395 |
'vw' => array(
|
400 |
'min' => 0,
|
401 |
'max' => 200,
|
402 |
),
|
403 |
+
'%' => array(
|
404 |
'min' => 0,
|
405 |
'max' => 100,
|
406 |
),
|
407 |
),
|
408 |
+
'top' => array(
|
409 |
'px' => array(
|
410 |
'min' => -500,
|
411 |
'max' => 500,
|
418 |
'min' => -20,
|
419 |
'max' => 20,
|
420 |
),
|
421 |
+
'%' => array(
|
422 |
'min' => 0,
|
423 |
'max' => 100,
|
424 |
),
|
425 |
),
|
426 |
),
|
427 |
+
'keys' => array(
|
428 |
+
'width' => __( 'Width', 'fl-builder' ),
|
429 |
'height' => __( 'Height', 'fl-builder' ),
|
430 |
+
'top' => __( 'Y Offset', 'fl-builder' ),
|
431 |
),
|
432 |
'preview' => array(
|
433 |
+
'type' => 'callback',
|
434 |
'callback' => 'previewShapeLayerSize',
|
435 |
+
'prefix' => $prefix,
|
436 |
'position' => $position,
|
437 |
),
|
438 |
),
|
439 |
$prefix . 'align' => array(
|
440 |
+
'type' => 'select',
|
441 |
+
'label' => __( 'Align', 'fl-builder' ),
|
442 |
'default' => $position . ' center',
|
443 |
'options' => array(
|
444 |
+
'top left' => __( 'Top Left', 'fl-builder' ),
|
445 |
+
'top center' => __( 'Top Center', 'fl-builder' ),
|
446 |
+
'top right' => __( 'Top Right', 'fl-builder' ),
|
447 |
+
'center left' => __( 'Center Left', 'fl-builder' ),
|
448 |
'center center' => __( 'Center', 'fl-builder' ),
|
449 |
+
'center right' => __( 'Center Right', 'fl-builder' ),
|
450 |
+
'bottom left' => __( 'Bottom Left', 'fl-builder' ),
|
451 |
'bottom center' => __( 'Bottom Center', 'fl-builder' ),
|
452 |
+
'bottom right' => __( 'Bottom Right', 'fl-builder' ),
|
453 |
),
|
454 |
'preview' => array(
|
455 |
+
'type' => 'callback',
|
456 |
'callback' => 'previewShapeAlign',
|
457 |
+
'prefix' => $prefix,
|
458 |
'selector' => ".fl-builder-$position-edge-layer > *",
|
459 |
),
|
460 |
),
|
463 |
|
464 |
// Shape Styles
|
465 |
$sections[ $prefix . 'style' ] = array(
|
466 |
+
'title' => sprintf( __( '%s Shape Style', 'fl-builder' ), $position_label ),
|
467 |
'fields' => array(
|
468 |
+
$prefix . 'fill_style' => array(
|
469 |
+
'type' => 'button-group',
|
470 |
'options' => array(
|
471 |
+
'color' => __( 'Color Fill', 'fl-builder' ),
|
472 |
'gradient' => __( 'Gradient Fill', 'fl-builder' ),
|
473 |
),
|
474 |
'default' => 'color',
|
475 |
'preview' => array(
|
476 |
+
'type' => 'callback',
|
477 |
'callback' => 'previewShapeFillStyle',
|
478 |
'position' => $position,
|
479 |
+
'prefix' => $prefix,
|
480 |
'selector' => ".fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
481 |
),
|
482 |
+
'toggle' => array(
|
483 |
+
'color' => array(
|
484 |
'fields' => array(
|
485 |
+
$prefix . 'fill_color',
|
486 |
),
|
487 |
),
|
488 |
'gradient' => array(
|
489 |
'fields' => array(
|
490 |
+
$prefix . 'fill_gradient',
|
491 |
),
|
492 |
),
|
493 |
),
|
494 |
),
|
495 |
+
$prefix . 'fill_color' => array(
|
496 |
+
'type' => 'color',
|
497 |
+
'connections' => array( 'color' ),
|
498 |
+
'label' => __( 'Color', 'fl-builder' ),
|
499 |
+
'show_reset' => true,
|
500 |
+
'show_alpha' => true,
|
501 |
+
'responsive' => true,
|
502 |
+
'default' => 'aaa',
|
503 |
+
'preview' => array(
|
504 |
+
'type' => 'css',
|
505 |
'selector' => ".fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
506 |
'property' => 'fill',
|
507 |
),
|
508 |
),
|
509 |
$prefix . 'fill_gradient' => array(
|
510 |
+
'type' => 'gradient',
|
511 |
+
'label' => __( 'Gradient', 'fl-builder' ),
|
512 |
'default' => '',
|
513 |
'preview' => array(
|
514 |
+
'type' => 'callback',
|
515 |
'callback' => 'previewShapeGradientFill',
|
516 |
'position' => $position,
|
517 |
+
'prefix' => $prefix,
|
518 |
),
|
519 |
),
|
520 |
|
521 |
+
$prefix . 'transform' => array(
|
522 |
+
'type' => 'shape-transform',
|
523 |
+
'label' => __( 'Transform', 'fl-builder' ),
|
524 |
'preview' => array(
|
525 |
+
'type' => 'callback',
|
526 |
'callback' => 'previewShapeTransform',
|
527 |
'selector' => ".fl-builder-$position-edge-layer",
|
528 |
'position' => $position,
|
533 |
}
|
534 |
|
535 |
$sections['shapes_container'] = array(
|
536 |
+
'title' => __( 'Shape Container', 'fl-builder' ),
|
537 |
'fields' => array(
|
538 |
'container_overflow' => array(
|
539 |
+
'type' => 'select',
|
540 |
+
'label' => __( 'Clip Within Container', 'fl-builder' ),
|
541 |
'options' => array(
|
542 |
+
'' => __( 'No Clip', 'fl-builder' ),
|
543 |
'hidden' => __( 'Clip Contents', 'fl-builder' ),
|
544 |
),
|
545 |
'preview' => array(
|
546 |
+
'type' => 'css',
|
547 |
'selector' => '.fl-row-content-wrap',
|
548 |
'property' => 'overflow',
|
549 |
),
|
561 |
*/
|
562 |
static public function render_shape_layers_css( $node ) {
|
563 |
$settings = $node->settings;
|
564 |
+
$id = $node->node;
|
565 |
|
566 |
$layers = array( 'top', 'bottom' );
|
567 |
|
571 |
if ( ! empty( $settings->{ $prefix . 'shape' } ) ) {
|
572 |
|
573 |
$shape_name = $settings->{ $prefix . 'shape' };
|
574 |
+
$presets = FLBuilderSettingsPresets::get_presets();
|
575 |
+
$preset = $presets['shape'][ $shape_name ];
|
576 |
|
577 |
FLBuilderCSS::rule( array(
|
578 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer",
|
579 |
+
'enabled' => $settings->{ $prefix . 'size_top'} && $settings->{ $prefix . 'size_unit' },
|
580 |
+
'props' => array(
|
581 |
$position => $settings->{ $prefix . 'size_top'} . $settings->{ $prefix . 'size_unit' },
|
582 |
),
|
583 |
) );
|
584 |
|
585 |
// Width, Height & Align
|
586 |
$shape_selector = ".fl-node-$id .fl-builder-$position-edge-layer > *";
|
587 |
+
$shape_align = explode( ' ', $settings->{ $prefix . 'align' } );
|
588 |
+
$align_y = $shape_align[0];
|
589 |
+
$align_x = $shape_align[1];
|
590 |
+
$width = $settings->{ $prefix . 'size_width'};
|
591 |
+
$height = $settings->{ $prefix . 'size_height' };
|
592 |
+
$size_unit = $settings->{ $prefix . 'size_unit' };
|
593 |
|
594 |
// Defaults
|
595 |
$shape_size_rule = array(
|
596 |
'selector' => $shape_selector,
|
597 |
+
'enabled' => true,
|
598 |
+
'props' => array(),
|
599 |
);
|
600 |
+
$size_props = array(
|
601 |
+
'width' => '100%',
|
602 |
+
'left' => 'auto',
|
603 |
+
'right' => 'auto',
|
604 |
'height' => 'auto',
|
605 |
+
'top' => 'auto',
|
606 |
'bottom' => 'auto',
|
607 |
);
|
608 |
|
609 |
if ( ! empty( $width ) ) {
|
610 |
$size_props['width'] = $width . $size_unit;
|
611 |
+
$width_offset = ( $width / 2 ) . $size_unit;
|
612 |
|
613 |
switch ( $align_x ) {
|
614 |
case 'left':
|
625 |
|
626 |
$height_offset = '';
|
627 |
if ( ! empty( $height ) ) {
|
628 |
+
$height_offset = ( $height / 2 ) . $size_unit;
|
629 |
$size_props['height'] = $height . $size_unit;
|
630 |
} elseif ( $width ) {
|
631 |
$view_box_height = $preset['data']['viewBox']['width'];
|
632 |
+
$implied_height = ( $width / $view_box_height ) * 100;
|
633 |
+
$height_offset = ( $implied_height / 2 ) . $size_unit;
|
634 |
}
|
635 |
|
636 |
switch ( $align_y ) {
|
639 |
break;
|
640 |
case 'bottom':
|
641 |
$size_props['bottom'] = '0';
|
642 |
+
$size_props['top'] = 'auto';
|
643 |
break;
|
644 |
case 'center':
|
645 |
$size_props['top'] = "calc( 50% - $height_offset )";
|
651 |
|
652 |
// Shape Transforms
|
653 |
|
654 |
+
$transforms = $settings->{ $prefix . 'transform' };
|
655 |
$layer_transforms = array();
|
656 |
$shape_transforms = array();
|
657 |
+
$sign = '';
|
658 |
if ( ! empty( $transforms ) ) {
|
659 |
|
660 |
foreach ( $transforms as $prop => $value ) {
|
685 |
$value = abs( $value );
|
686 |
}
|
687 |
|
688 |
+
$value = $prop . '(' . $value . ')';
|
689 |
$shape_transforms[] = $value;
|
690 |
break;
|
691 |
|
692 |
case 'translateX':
|
693 |
case 'translateY':
|
694 |
if ( ! empty( $value ) ) {
|
695 |
+
$value = $prop . '(' . $value . 'px)';
|
696 |
$shape_transforms[] = $value;
|
697 |
}
|
698 |
break;
|
714 |
// Shape Transforms
|
715 |
FLBuilderCSS::rule( array(
|
716 |
'settings' => $settings,
|
717 |
+
'enabled' => ! empty( $shape_transforms ),
|
718 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer > *",
|
719 |
+
'props' => array(
|
720 |
'transform' => implode( ' ', $shape_transforms ),
|
721 |
),
|
722 |
) );
|
728 |
|
729 |
case 'color':
|
730 |
FLBuilderCSS::responsive_rule( array(
|
731 |
+
'settings' => $settings,
|
732 |
'setting_name' => $prefix . 'fill_color',
|
733 |
+
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
734 |
+
'prop' => 'fill',
|
735 |
) );
|
736 |
break;
|
737 |
|
738 |
case 'gradient':
|
739 |
$gradient_type = $settings->{ $prefix . 'fill_gradient' }['type'];
|
740 |
+
$gradient_id = "fl-row-$id-$prefix-$gradient_type-gradient";
|
741 |
FLBuilderCSS::rule( array(
|
742 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer .fl-shape",
|
743 |
+
'enabled' => $settings->{ $prefix . 'fill_gradient' },
|
744 |
+
'props' => array(
|
745 |
'fill' => 'url(#' . $gradient_id . ')',
|
746 |
),
|
747 |
) );
|
750 |
$pattern_id = "fl-row-$id-$prefix-pattern";
|
751 |
FLBuilderCSS::rule( array(
|
752 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer .fl-shape-content .fl-shape",
|
753 |
+
'enabled' => true,
|
754 |
+
'props' => array(
|
755 |
'fill' => 'url(#' . $pattern_id . ')',
|
756 |
),
|
757 |
) );
|
758 |
FLBuilderCSS::rule( array(
|
759 |
'selector' => ".fl-node-$id .fl-builder-$position-edge-layer pattern .fl-shape",
|
760 |
+
'enabled' => true,
|
761 |
+
'props' => array(
|
762 |
'fill' => $settings->{ $prefix . 'fill_pattern_shape_color' },
|
763 |
),
|
764 |
) );
|
770 |
|
771 |
// Shared styles
|
772 |
FLBuilderCSS::responsive_rule( array(
|
773 |
+
'settings' => $settings,
|
774 |
'setting_name' => 'container_overflow',
|
775 |
+
'selector' => ".fl-node-$id .fl-row-content-wrap",
|
776 |
+
'prop' => 'overflow',
|
777 |
) );
|
778 |
}
|
779 |
|
classes/class-fl-builder-auto-suggest.php
CHANGED
@@ -21,19 +21,19 @@ final class FLBuilderAutoSuggest {
|
|
21 |
|
22 |
case 'fl_as_posts':
|
23 |
$data = self::posts();
|
24 |
-
|
25 |
|
26 |
case 'fl_as_terms':
|
27 |
$data = self::terms();
|
28 |
-
|
29 |
|
30 |
case 'fl_as_users':
|
31 |
$data = self::users();
|
32 |
-
|
33 |
|
34 |
case 'fl_as_links':
|
35 |
$data = self::links();
|
36 |
-
|
37 |
}
|
38 |
|
39 |
if ( isset( $data ) ) {
|
@@ -56,23 +56,22 @@ final class FLBuilderAutoSuggest {
|
|
56 |
|
57 |
case 'fl_as_posts':
|
58 |
$data = self::posts_value( $value );
|
59 |
-
|
60 |
|
61 |
case 'fl_as_terms':
|
62 |
$data = self::terms_value( $value, $data );
|
63 |
-
|
64 |
|
65 |
case 'fl_as_users':
|
66 |
$data = self::users_value( $value );
|
67 |
-
|
68 |
-
|
69 |
-
default :
|
70 |
|
|
|
71 |
if ( function_exists( $action . '_value' ) ) {
|
72 |
$data = call_user_func_array( $action . '_value', array( $value, $data ) );
|
73 |
}
|
74 |
|
75 |
-
|
76 |
}
|
77 |
|
78 |
return isset( $data ) ? str_replace( "'", ''', json_encode( $data ) ) : '';
|
@@ -124,9 +123,9 @@ final class FLBuilderAutoSuggest {
|
|
124 |
static public function posts() {
|
125 |
global $wpdb;
|
126 |
|
127 |
-
$data
|
128 |
-
$like
|
129 |
-
$types
|
130 |
$types_in = join( "', '", array_map( 'esc_sql', $types ) );
|
131 |
|
132 |
// @codingStandardsIgnoreStart
|
@@ -140,7 +139,7 @@ final class FLBuilderAutoSuggest {
|
|
140 |
|
141 |
foreach ( $posts as $post ) {
|
142 |
$data[] = array(
|
143 |
-
'name'
|
144 |
'value' => $post->ID,
|
145 |
);
|
146 |
}
|
@@ -162,11 +161,11 @@ final class FLBuilderAutoSuggest {
|
|
162 |
|
163 |
if ( ! empty( $ids ) ) {
|
164 |
|
165 |
-
$order
|
166 |
-
$list
|
167 |
-
$how_many
|
168 |
$placeholders = array_fill( 0, $how_many, '%d' );
|
169 |
-
$format
|
170 |
|
171 |
$query = "SELECT ID, post_title FROM {$wpdb->posts} WHERE ID IN ($format) ORDER BY FIELD(ID, $order)";
|
172 |
|
@@ -176,7 +175,7 @@ final class FLBuilderAutoSuggest {
|
|
176 |
|
177 |
foreach ( $posts as $post ) {
|
178 |
$data[] = array(
|
179 |
-
'name'
|
180 |
'value' => $post->ID,
|
181 |
);
|
182 |
}
|
@@ -195,12 +194,12 @@ final class FLBuilderAutoSuggest {
|
|
195 |
$data = array();
|
196 |
$cats = get_categories(array(
|
197 |
'hide_empty' => 0,
|
198 |
-
'taxonomy'
|
199 |
));
|
200 |
|
201 |
foreach ( $cats as $cat ) {
|
202 |
$data[] = array(
|
203 |
-
'name'
|
204 |
'value' => $cat->term_id,
|
205 |
);
|
206 |
}
|
@@ -223,13 +222,13 @@ final class FLBuilderAutoSuggest {
|
|
223 |
|
224 |
$cats = get_categories(array(
|
225 |
'hide_empty' => 0,
|
226 |
-
'taxonomy'
|
227 |
-
'include'
|
228 |
));
|
229 |
|
230 |
foreach ( $cats as $cat ) {
|
231 |
$data[] = array(
|
232 |
-
'name'
|
233 |
'value' => $cat->term_id,
|
234 |
);
|
235 |
}
|
@@ -253,7 +252,7 @@ final class FLBuilderAutoSuggest {
|
|
253 |
|
254 |
foreach ( $users as $user ) {
|
255 |
$data[] = array(
|
256 |
-
'name'
|
257 |
'value' => $user->ID,
|
258 |
);
|
259 |
}
|
@@ -275,10 +274,10 @@ final class FLBuilderAutoSuggest {
|
|
275 |
|
276 |
if ( ! empty( $ids ) ) {
|
277 |
|
278 |
-
$list
|
279 |
-
$how_many
|
280 |
$placeholders = array_fill( 0, $how_many, '%d' );
|
281 |
-
$format
|
282 |
|
283 |
$query = "SELECT * FROM {$wpdb->users} WHERE ID IN ($format)";
|
284 |
|
@@ -288,7 +287,7 @@ final class FLBuilderAutoSuggest {
|
|
288 |
|
289 |
foreach ( $users as $user ) {
|
290 |
$data[] = array(
|
291 |
-
'name'
|
292 |
'value' => $user->ID,
|
293 |
);
|
294 |
}
|
@@ -305,10 +304,10 @@ final class FLBuilderAutoSuggest {
|
|
305 |
static public function links() {
|
306 |
global $wpdb;
|
307 |
|
308 |
-
$data
|
309 |
-
$like
|
310 |
-
$types
|
311 |
-
$slugs
|
312 |
|
313 |
foreach ( $types as $slug => $type ) {
|
314 |
$slugs[] = esc_sql( $slug );
|
@@ -328,7 +327,7 @@ final class FLBuilderAutoSuggest {
|
|
328 |
|
329 |
foreach ( $posts as $post ) {
|
330 |
$data[] = array(
|
331 |
-
'name'
|
332 |
'value' => get_permalink( $post->ID ),
|
333 |
);
|
334 |
}
|
21 |
|
22 |
case 'fl_as_posts':
|
23 |
$data = self::posts();
|
24 |
+
break;
|
25 |
|
26 |
case 'fl_as_terms':
|
27 |
$data = self::terms();
|
28 |
+
break;
|
29 |
|
30 |
case 'fl_as_users':
|
31 |
$data = self::users();
|
32 |
+
break;
|
33 |
|
34 |
case 'fl_as_links':
|
35 |
$data = self::links();
|
36 |
+
break;
|
37 |
}
|
38 |
|
39 |
if ( isset( $data ) ) {
|
56 |
|
57 |
case 'fl_as_posts':
|
58 |
$data = self::posts_value( $value );
|
59 |
+
break;
|
60 |
|
61 |
case 'fl_as_terms':
|
62 |
$data = self::terms_value( $value, $data );
|
63 |
+
break;
|
64 |
|
65 |
case 'fl_as_users':
|
66 |
$data = self::users_value( $value );
|
67 |
+
break;
|
|
|
|
|
68 |
|
69 |
+
default:
|
70 |
if ( function_exists( $action . '_value' ) ) {
|
71 |
$data = call_user_func_array( $action . '_value', array( $value, $data ) );
|
72 |
}
|
73 |
|
74 |
+
break;
|
75 |
}
|
76 |
|
77 |
return isset( $data ) ? str_replace( "'", ''', json_encode( $data ) ) : '';
|
123 |
static public function posts() {
|
124 |
global $wpdb;
|
125 |
|
126 |
+
$data = array();
|
127 |
+
$like = self::get_like();
|
128 |
+
$types = explode( ',', esc_sql( $_REQUEST['fl_as_action_data'] ) );
|
129 |
$types_in = join( "', '", array_map( 'esc_sql', $types ) );
|
130 |
|
131 |
// @codingStandardsIgnoreStart
|
139 |
|
140 |
foreach ( $posts as $post ) {
|
141 |
$data[] = array(
|
142 |
+
'name' => $post->post_title,
|
143 |
'value' => $post->ID,
|
144 |
);
|
145 |
}
|
161 |
|
162 |
if ( ! empty( $ids ) ) {
|
163 |
|
164 |
+
$order = implode( ',', array_filter( explode( ',', $ids ), 'intval' ) );
|
165 |
+
$list = explode( ',', $ids );
|
166 |
+
$how_many = count( $list );
|
167 |
$placeholders = array_fill( 0, $how_many, '%d' );
|
168 |
+
$format = implode( ', ', $placeholders );
|
169 |
|
170 |
$query = "SELECT ID, post_title FROM {$wpdb->posts} WHERE ID IN ($format) ORDER BY FIELD(ID, $order)";
|
171 |
|
175 |
|
176 |
foreach ( $posts as $post ) {
|
177 |
$data[] = array(
|
178 |
+
'name' => $post->post_title,
|
179 |
'value' => $post->ID,
|
180 |
);
|
181 |
}
|
194 |
$data = array();
|
195 |
$cats = get_categories(array(
|
196 |
'hide_empty' => 0,
|
197 |
+
'taxonomy' => $_REQUEST['fl_as_action_data'],
|
198 |
));
|
199 |
|
200 |
foreach ( $cats as $cat ) {
|
201 |
$data[] = array(
|
202 |
+
'name' => $cat->name,
|
203 |
'value' => $cat->term_id,
|
204 |
);
|
205 |
}
|
222 |
|
223 |
$cats = get_categories(array(
|
224 |
'hide_empty' => 0,
|
225 |
+
'taxonomy' => $taxonomy,
|
226 |
+
'include' => $ids,
|
227 |
));
|
228 |
|
229 |
foreach ( $cats as $cat ) {
|
230 |
$data[] = array(
|
231 |
+
'name' => $cat->name,
|
232 |
'value' => $cat->term_id,
|
233 |
);
|
234 |
}
|
252 |
|
253 |
foreach ( $users as $user ) {
|
254 |
$data[] = array(
|
255 |
+
'name' => $user->user_login,
|
256 |
'value' => $user->ID,
|
257 |
);
|
258 |
}
|
274 |
|
275 |
if ( ! empty( $ids ) ) {
|
276 |
|
277 |
+
$list = explode( ',', $ids );
|
278 |
+
$how_many = count( $list );
|
279 |
$placeholders = array_fill( 0, $how_many, '%d' );
|
280 |
+
$format = implode( ', ', $placeholders );
|
281 |
|
282 |
$query = "SELECT * FROM {$wpdb->users} WHERE ID IN ($format)";
|
283 |
|
287 |
|
288 |
foreach ( $users as $user ) {
|
289 |
$data[] = array(
|
290 |
+
'name' => $user->user_login,
|
291 |
'value' => $user->ID,
|
292 |
);
|
293 |
}
|
304 |
static public function links() {
|
305 |
global $wpdb;
|
306 |
|
307 |
+
$data = array();
|
308 |
+
$like = self::get_like();
|
309 |
+
$types = FLBuilderLoop::post_types();
|
310 |
+
$slugs = array();
|
311 |
|
312 |
foreach ( $types as $slug => $type ) {
|
313 |
$slugs[] = esc_sql( $slug );
|
327 |
|
328 |
foreach ( $posts as $post ) {
|
329 |
$data[] = array(
|
330 |
+
'name' => $post->post_title,
|
331 |
'value' => get_permalink( $post->ID ),
|
332 |
);
|
333 |
}
|
classes/class-fl-builder-color.php
CHANGED
@@ -63,15 +63,15 @@ final class FLBuilderColor {
|
|
63 |
// Get rgb vars.
|
64 |
if ( $is_rgb ) {
|
65 |
$rgb = explode( ',', preg_replace( '/[a-z\(\)]/', '', $value ) );
|
66 |
-
$r
|
67 |
-
$g
|
68 |
-
$b
|
69 |
-
$a
|
70 |
} else {
|
71 |
$rgb = self::hex_to_rgb( $value );
|
72 |
-
$r
|
73 |
-
$g
|
74 |
-
$b
|
75 |
}
|
76 |
|
77 |
// Should we darken the color?
|
@@ -83,9 +83,9 @@ final class FLBuilderColor {
|
|
83 |
|
84 |
// Adjustr the rgb values.
|
85 |
$steps = max( -255, min( 255, $steps ) );
|
86 |
-
$r
|
87 |
-
$g
|
88 |
-
$b
|
89 |
|
90 |
// Return the adjusted color value.
|
91 |
if ( $is_rgb ) {
|
@@ -110,7 +110,7 @@ final class FLBuilderColor {
|
|
110 |
*/
|
111 |
static public function gradient( $setting ) {
|
112 |
$gradient = '';
|
113 |
-
$values
|
114 |
|
115 |
if ( ! is_array( $setting ) ) {
|
116 |
return $gradient;
|
@@ -175,7 +175,7 @@ final class FLBuilderColor {
|
|
175 |
$setting['color'] = '#' . $setting['color'];
|
176 |
}
|
177 |
|
178 |
-
$shadow
|
179 |
$shadow .= $setting['vertical'] . 'px ';
|
180 |
$shadow .= $setting['blur'] . 'px ';
|
181 |
|
@@ -202,25 +202,25 @@ final class FLBuilderColor {
|
|
202 |
// Get rgb vars.
|
203 |
if ( $is_rgb ) {
|
204 |
$rgb = explode( ',', preg_replace( '/[a-z\(\)]/', '', $value ) );
|
205 |
-
$r
|
206 |
-
$g
|
207 |
-
$b
|
208 |
-
$a
|
209 |
} else {
|
210 |
$rgb = self::hex_to_rgb( $value );
|
211 |
-
$r
|
212 |
-
$g
|
213 |
-
$b
|
214 |
-
$a
|
215 |
}
|
216 |
if ( count( $rgb ) === 4 ) {
|
217 |
$rgb = array_slice( $rgb, 0, 3 );
|
218 |
}
|
219 |
return array(
|
220 |
-
'r'
|
221 |
-
'g'
|
222 |
-
'b'
|
223 |
-
'a'
|
224 |
'rgb' => 'rgb(' . implode( ',', $rgb ) . ')',
|
225 |
);
|
226 |
}
|
63 |
// Get rgb vars.
|
64 |
if ( $is_rgb ) {
|
65 |
$rgb = explode( ',', preg_replace( '/[a-z\(\)]/', '', $value ) );
|
66 |
+
$r = $rgb[0];
|
67 |
+
$g = $rgb[1];
|
68 |
+
$b = $rgb[2];
|
69 |
+
$a = count( $rgb ) > 3 ? $rgb[3] : false;
|
70 |
} else {
|
71 |
$rgb = self::hex_to_rgb( $value );
|
72 |
+
$r = $rgb['r'];
|
73 |
+
$g = $rgb['g'];
|
74 |
+
$b = $rgb['b'];
|
75 |
}
|
76 |
|
77 |
// Should we darken the color?
|
83 |
|
84 |
// Adjustr the rgb values.
|
85 |
$steps = max( -255, min( 255, $steps ) );
|
86 |
+
$r = max( 0, min( 255, $r + $steps ) );
|
87 |
+
$g = max( 0, min( 255, $g + $steps ) );
|
88 |
+
$b = max( 0, min( 255, $b + $steps ) );
|
89 |
|
90 |
// Return the adjusted color value.
|
91 |
if ( $is_rgb ) {
|
110 |
*/
|
111 |
static public function gradient( $setting ) {
|
112 |
$gradient = '';
|
113 |
+
$values = array();
|
114 |
|
115 |
if ( ! is_array( $setting ) ) {
|
116 |
return $gradient;
|
175 |
$setting['color'] = '#' . $setting['color'];
|
176 |
}
|
177 |
|
178 |
+
$shadow = $setting['horizontal'] . 'px ';
|
179 |
$shadow .= $setting['vertical'] . 'px ';
|
180 |
$shadow .= $setting['blur'] . 'px ';
|
181 |
|
202 |
// Get rgb vars.
|
203 |
if ( $is_rgb ) {
|
204 |
$rgb = explode( ',', preg_replace( '/[a-z\(\)]/', '', $value ) );
|
205 |
+
$r = $rgb[0];
|
206 |
+
$g = $rgb[1];
|
207 |
+
$b = $rgb[2];
|
208 |
+
$a = count( $rgb ) > 3 ? $rgb[3] : false;
|
209 |
} else {
|
210 |
$rgb = self::hex_to_rgb( $value );
|
211 |
+
$r = $rgb['r'];
|
212 |
+
$g = $rgb['g'];
|
213 |
+
$b = $rgb['b'];
|
214 |
+
$a = 1;
|
215 |
}
|
216 |
if ( count( $rgb ) === 4 ) {
|
217 |
$rgb = array_slice( $rgb, 0, 3 );
|
218 |
}
|
219 |
return array(
|
220 |
+
'r' => $r,
|
221 |
+
'g' => $g,
|
222 |
+
'b' => $b,
|
223 |
+
'a' => $a,
|
224 |
'rgb' => 'rgb(' . implode( ',', $rgb ) . ')',
|
225 |
);
|
226 |
}
|
classes/class-fl-builder-css.php
CHANGED
@@ -35,29 +35,29 @@ final class FLBuilderCSS {
|
|
35 |
* @return void
|
36 |
*/
|
37 |
static public function responsive_rule( $args = array() ) {
|
38 |
-
$global_settings
|
39 |
-
$default_args
|
40 |
-
'settings'
|
41 |
-
'setting_name'
|
42 |
'setting_base_name' => '',
|
43 |
-
'selector'
|
44 |
-
'prop'
|
45 |
-
'props'
|
46 |
-
'unit'
|
47 |
-
'enabled'
|
48 |
'ignore' => array(),
|
49 |
);
|
50 |
-
$args
|
51 |
-
$settings
|
52 |
-
$setting_name
|
53 |
$setting_base_name = $args['setting_base_name'];
|
54 |
-
$selector
|
55 |
-
$prop
|
56 |
-
$props
|
57 |
-
$default_unit
|
58 |
-
$enabled
|
59 |
-
$breakpoints
|
60 |
-
$ignore
|
61 |
|
62 |
if ( ! $settings || empty( $setting_name ) || empty( $selector ) ) {
|
63 |
return;
|
@@ -69,10 +69,10 @@ final class FLBuilderCSS {
|
|
69 |
continue;
|
70 |
}
|
71 |
|
72 |
-
$suffix
|
73 |
-
$name
|
74 |
$base_name = empty( $setting_base_name ) ? $name : $setting_base_name . $suffix;
|
75 |
-
$setting
|
76 |
|
77 |
if ( null === $setting ) {
|
78 |
continue;
|
@@ -83,14 +83,14 @@ final class FLBuilderCSS {
|
|
83 |
if ( ! empty( $prop ) ) {
|
84 |
$props[ $prop ] = array(
|
85 |
'value' => $setting,
|
86 |
-
'unit'
|
87 |
);
|
88 |
}
|
89 |
|
90 |
self::$rules[] = array(
|
91 |
-
'media'
|
92 |
'selector' => $selector,
|
93 |
-
'props'
|
94 |
);
|
95 |
}
|
96 |
}
|
@@ -104,18 +104,18 @@ final class FLBuilderCSS {
|
|
104 |
* @return void
|
105 |
*/
|
106 |
static public function dimension_field_rule( $args = array() ) {
|
107 |
-
$args
|
108 |
-
'settings'
|
109 |
-
'setting_name'
|
110 |
-
'selector'
|
111 |
-
'props'
|
112 |
-
'unit'
|
113 |
) );
|
114 |
-
$settings
|
115 |
$setting_base_name = $args['setting_name'];
|
116 |
-
$selector
|
117 |
-
$props
|
118 |
-
$unit
|
119 |
|
120 |
if ( ! $settings || empty( $setting_base_name ) || empty( $selector ) ) {
|
121 |
return;
|
@@ -123,12 +123,12 @@ final class FLBuilderCSS {
|
|
123 |
|
124 |
foreach ( $props as $prop => $settings_name ) {
|
125 |
$rules = self::responsive_rule( array(
|
126 |
-
'settings'
|
127 |
-
'setting_name'
|
128 |
'setting_base_name' => $setting_base_name,
|
129 |
-
'selector'
|
130 |
-
'prop'
|
131 |
-
'unit'
|
132 |
) );
|
133 |
|
134 |
if ( ! empty( $rules ) ) {
|
@@ -146,17 +146,17 @@ final class FLBuilderCSS {
|
|
146 |
*/
|
147 |
static public function compound_field_rule( $args = array() ) {
|
148 |
$global_settings = FLBuilderModel::get_global_settings();
|
149 |
-
$args
|
150 |
-
'type'
|
151 |
-
'selector'
|
152 |
-
'settings'
|
153 |
-
'setting_name'
|
154 |
) );
|
155 |
-
$type
|
156 |
-
$selector
|
157 |
-
$settings
|
158 |
-
$setting_name
|
159 |
-
$breakpoints
|
160 |
|
161 |
if ( empty( $type ) || empty( $selector ) || ! $settings || empty( $setting_name ) ) {
|
162 |
return;
|
@@ -168,10 +168,10 @@ final class FLBuilderCSS {
|
|
168 |
continue;
|
169 |
}
|
170 |
|
171 |
-
$name
|
172 |
-
$setting
|
173 |
$callback = "{$type}_field_props";
|
174 |
-
$props
|
175 |
|
176 |
// Settings must be an array. Settings in nested forms can become objects when encoded.
|
177 |
if ( is_object( $setting ) ) {
|
@@ -191,9 +191,9 @@ final class FLBuilderCSS {
|
|
191 |
}
|
192 |
|
193 |
self::$rules[] = array(
|
194 |
-
'media'
|
195 |
'selector' => $selector,
|
196 |
-
'props'
|
197 |
);
|
198 |
}
|
199 |
}
|
@@ -221,8 +221,8 @@ final class FLBuilderCSS {
|
|
221 |
$props = array();
|
222 |
|
223 |
if ( isset( $setting['style'] ) && ! empty( $setting['style'] ) ) {
|
224 |
-
$props['border-style']
|
225 |
-
$props['border-width']
|
226 |
$props['background-clip'] = 'padding-box';
|
227 |
}
|
228 |
if ( isset( $setting['color'] ) && ! empty( $setting['color'] ) ) {
|
@@ -283,7 +283,8 @@ final class FLBuilderCSS {
|
|
283 |
* @return array
|
284 |
*/
|
285 |
static public function typography_field_props( $setting = array() ) {
|
286 |
-
$props
|
|
|
287 |
|
288 |
if ( isset( $setting['font_family'] ) && 'Default' !== $setting['font_family'] ) {
|
289 |
$fallback = FLBuilderFonts::get_font_fallback( $setting['font_family'] );
|
@@ -297,7 +298,11 @@ final class FLBuilderCSS {
|
|
297 |
$props['font-weight'] = $setting['font_weight'];
|
298 |
}
|
299 |
if ( isset( $setting['font_size'] ) && ! empty( $setting['font_size']['length'] ) ) {
|
300 |
-
|
|
|
|
|
|
|
|
|
301 |
}
|
302 |
if ( isset( $setting['line_height'] ) && ! empty( $setting['line_height']['length'] ) ) {
|
303 |
$props['line-height'] = $setting['line_height']['length'] . $setting['line_height']['unit'];
|
@@ -336,20 +341,20 @@ final class FLBuilderCSS {
|
|
336 |
*/
|
337 |
static public function render() {
|
338 |
$rendered = array();
|
339 |
-
$css
|
340 |
|
341 |
foreach ( self::$rules as $args ) {
|
342 |
$defaults = array(
|
343 |
-
'media'
|
344 |
'selector' => '',
|
345 |
-
'enabled'
|
346 |
-
'props'
|
347 |
);
|
348 |
|
349 |
-
$args
|
350 |
-
$media
|
351 |
$selector = $args['selector'];
|
352 |
-
$props
|
353 |
|
354 |
if ( ! $args['enabled'] || empty( $selector ) || empty( $props ) ) {
|
355 |
continue;
|
@@ -370,7 +375,7 @@ final class FLBuilderCSS {
|
|
370 |
|
371 |
if ( ! empty( $media ) ) {
|
372 |
$css .= "@media($media) {\n";
|
373 |
-
$tab
|
374 |
} else {
|
375 |
$tab = '';
|
376 |
}
|
@@ -401,10 +406,10 @@ final class FLBuilderCSS {
|
|
401 |
* @return string
|
402 |
*/
|
403 |
static public function properties( $props ) {
|
404 |
-
$css
|
405 |
$defaults = array(
|
406 |
-
'value'
|
407 |
-
'unit'
|
408 |
'enabled' => true,
|
409 |
);
|
410 |
|
@@ -416,9 +421,9 @@ final class FLBuilderCSS {
|
|
416 |
);
|
417 |
}
|
418 |
|
419 |
-
$args
|
420 |
$value = $args['value'];
|
421 |
-
$type
|
422 |
|
423 |
if ( '' === $value || ! $args['enabled'] ) {
|
424 |
continue;
|
@@ -432,12 +437,12 @@ final class FLBuilderCSS {
|
|
432 |
} else {
|
433 |
$css .= "\t$name: #$value;\n";
|
434 |
if ( isset( $args['opacity'] ) && '' !== $args['opacity'] ) {
|
435 |
-
$rgb
|
436 |
-
$a
|
437 |
$css .= "\t$name: rgba($rgb,$a);\n";
|
438 |
}
|
439 |
}
|
440 |
-
|
441 |
|
442 |
case 'image':
|
443 |
if ( stristr( $value, 'gradient(' ) ) {
|
@@ -445,7 +450,7 @@ final class FLBuilderCSS {
|
|
445 |
} else {
|
446 |
$css .= "\t$name: url($value);\n";
|
447 |
}
|
448 |
-
|
449 |
|
450 |
default:
|
451 |
$css .= "\t$name: $value";
|
35 |
* @return void
|
36 |
*/
|
37 |
static public function responsive_rule( $args = array() ) {
|
38 |
+
$global_settings = FLBuilderModel::get_global_settings();
|
39 |
+
$default_args = array(
|
40 |
+
'settings' => null,
|
41 |
+
'setting_name' => '',
|
42 |
'setting_base_name' => '',
|
43 |
+
'selector' => '',
|
44 |
+
'prop' => '',
|
45 |
+
'props' => array(),
|
46 |
+
'unit' => '',
|
47 |
+
'enabled' => true,
|
48 |
'ignore' => array(),
|
49 |
);
|
50 |
+
$args = wp_parse_args( $args, $default_args );
|
51 |
+
$settings = $args['settings'];
|
52 |
+
$setting_name = $args['setting_name'];
|
53 |
$setting_base_name = $args['setting_base_name'];
|
54 |
+
$selector = $args['selector'];
|
55 |
+
$prop = $args['prop'];
|
56 |
+
$props = $args['props'];
|
57 |
+
$default_unit = $args['unit'];
|
58 |
+
$enabled = $args['enabled'];
|
59 |
+
$breakpoints = array( '', 'medium', 'responsive' );
|
60 |
+
$ignore = $args['ignore'];
|
61 |
|
62 |
if ( ! $settings || empty( $setting_name ) || empty( $selector ) ) {
|
63 |
return;
|
69 |
continue;
|
70 |
}
|
71 |
|
72 |
+
$suffix = empty( $breakpoint ) ? '' : "_{$breakpoint}";
|
73 |
+
$name = $setting_name . $suffix;
|
74 |
$base_name = empty( $setting_base_name ) ? $name : $setting_base_name . $suffix;
|
75 |
+
$setting = isset( $settings->{$name} ) ? $settings->{$name} : null;
|
76 |
|
77 |
if ( null === $setting ) {
|
78 |
continue;
|
83 |
if ( ! empty( $prop ) ) {
|
84 |
$props[ $prop ] = array(
|
85 |
'value' => $setting,
|
86 |
+
'unit' => FLBuilderCSS::get_unit( $base_name, $settings, $default_unit ),
|
87 |
);
|
88 |
}
|
89 |
|
90 |
self::$rules[] = array(
|
91 |
+
'media' => $breakpoint,
|
92 |
'selector' => $selector,
|
93 |
+
'props' => $props,
|
94 |
);
|
95 |
}
|
96 |
}
|
104 |
* @return void
|
105 |
*/
|
106 |
static public function dimension_field_rule( $args = array() ) {
|
107 |
+
$args = wp_parse_args( $args, array(
|
108 |
+
'settings' => null,
|
109 |
+
'setting_name' => '',
|
110 |
+
'selector' => '',
|
111 |
+
'props' => array(),
|
112 |
+
'unit' => '',
|
113 |
) );
|
114 |
+
$settings = $args['settings'];
|
115 |
$setting_base_name = $args['setting_name'];
|
116 |
+
$selector = $args['selector'];
|
117 |
+
$props = $args['props'];
|
118 |
+
$unit = $args['unit'];
|
119 |
|
120 |
if ( ! $settings || empty( $setting_base_name ) || empty( $selector ) ) {
|
121 |
return;
|
123 |
|
124 |
foreach ( $props as $prop => $settings_name ) {
|
125 |
$rules = self::responsive_rule( array(
|
126 |
+
'settings' => $settings,
|
127 |
+
'setting_name' => $settings_name,
|
128 |
'setting_base_name' => $setting_base_name,
|
129 |
+
'selector' => $selector,
|
130 |
+
'prop' => $prop,
|
131 |
+
'unit' => $unit,
|
132 |
) );
|
133 |
|
134 |
if ( ! empty( $rules ) ) {
|
146 |
*/
|
147 |
static public function compound_field_rule( $args = array() ) {
|
148 |
$global_settings = FLBuilderModel::get_global_settings();
|
149 |
+
$args = wp_parse_args( $args, array(
|
150 |
+
'type' => '',
|
151 |
+
'selector' => '',
|
152 |
+
'settings' => null,
|
153 |
+
'setting_name' => '',
|
154 |
) );
|
155 |
+
$type = $args['type'];
|
156 |
+
$selector = $args['selector'];
|
157 |
+
$settings = $args['settings'];
|
158 |
+
$setting_name = $args['setting_name'];
|
159 |
+
$breakpoints = array( '', 'medium', 'responsive' );
|
160 |
|
161 |
if ( empty( $type ) || empty( $selector ) || ! $settings || empty( $setting_name ) ) {
|
162 |
return;
|
168 |
continue;
|
169 |
}
|
170 |
|
171 |
+
$name = empty( $breakpoint ) ? $setting_name : "{$setting_name}_{$breakpoint}";
|
172 |
+
$setting = isset( $settings->{$name} ) ? $settings->{$name} : null;
|
173 |
$callback = "{$type}_field_props";
|
174 |
+
$props = array();
|
175 |
|
176 |
// Settings must be an array. Settings in nested forms can become objects when encoded.
|
177 |
if ( is_object( $setting ) ) {
|
191 |
}
|
192 |
|
193 |
self::$rules[] = array(
|
194 |
+
'media' => $breakpoint,
|
195 |
'selector' => $selector,
|
196 |
+
'props' => $props,
|
197 |
);
|
198 |
}
|
199 |
}
|
221 |
$props = array();
|
222 |
|
223 |
if ( isset( $setting['style'] ) && ! empty( $setting['style'] ) ) {
|
224 |
+
$props['border-style'] = $setting['style'];
|
225 |
+
$props['border-width'] = '0'; // Default to zero.
|
226 |
$props['background-clip'] = 'padding-box';
|
227 |
}
|
228 |
if ( isset( $setting['color'] ) && ! empty( $setting['color'] ) ) {
|
283 |
* @return array
|
284 |
*/
|
285 |
static public function typography_field_props( $setting = array() ) {
|
286 |
+
$props = array();
|
287 |
+
$settings = FLBuilderModel::get_global_settings();
|
288 |
|
289 |
if ( isset( $setting['font_family'] ) && 'Default' !== $setting['font_family'] ) {
|
290 |
$fallback = FLBuilderFonts::get_font_fallback( $setting['font_family'] );
|
298 |
$props['font-weight'] = $setting['font_weight'];
|
299 |
}
|
300 |
if ( isset( $setting['font_size'] ) && ! empty( $setting['font_size']['length'] ) ) {
|
301 |
+
if ( 'vw' == $setting['font_size']['unit'] && isset( $settings->responsive_base_fontsize ) ) {
|
302 |
+
$props['font-size'] = sprintf( 'calc(%spx + %svw)', $settings->responsive_base_fontsize, $setting['font_size']['length'] );
|
303 |
+
} else {
|
304 |
+
$props['font-size'] = $setting['font_size']['length'] . $setting['font_size']['unit'];
|
305 |
+
}
|
306 |
}
|
307 |
if ( isset( $setting['line_height'] ) && ! empty( $setting['line_height']['length'] ) ) {
|
308 |
$props['line-height'] = $setting['line_height']['length'] . $setting['line_height']['unit'];
|
341 |
*/
|
342 |
static public function render() {
|
343 |
$rendered = array();
|
344 |
+
$css = '';
|
345 |
|
346 |
foreach ( self::$rules as $args ) {
|
347 |
$defaults = array(
|
348 |
+
'media' => '',
|
349 |
'selector' => '',
|
350 |
+
'enabled' => true,
|
351 |
+
'props' => array(),
|
352 |
);
|
353 |
|
354 |
+
$args = array_merge( $defaults, $args );
|
355 |
+
$media = self::media_value( $args['media'] );
|
356 |
$selector = $args['selector'];
|
357 |
+
$props = self::properties( $args['props'] );
|
358 |
|
359 |
if ( ! $args['enabled'] || empty( $selector ) || empty( $props ) ) {
|
360 |
continue;
|
375 |
|
376 |
if ( ! empty( $media ) ) {
|
377 |
$css .= "@media($media) {\n";
|
378 |
+
$tab = "\t";
|
379 |
} else {
|
380 |
$tab = '';
|
381 |
}
|
406 |
* @return string
|
407 |
*/
|
408 |
static public function properties( $props ) {
|
409 |
+
$css = '';
|
410 |
$defaults = array(
|
411 |
+
'value' => '',
|
412 |
+
'unit' => '',
|
413 |
'enabled' => true,
|
414 |
);
|
415 |
|
421 |
);
|
422 |
}
|
423 |
|
424 |
+
$args = array_merge( $defaults, $args );
|
425 |
$value = $args['value'];
|
426 |
+
$type = self::property_type( $name );
|
427 |
|
428 |
if ( '' === $value || ! $args['enabled'] ) {
|
429 |
continue;
|
437 |
} else {
|
438 |
$css .= "\t$name: #$value;\n";
|
439 |
if ( isset( $args['opacity'] ) && '' !== $args['opacity'] ) {
|
440 |
+
$rgb = implode( ',', FLBuilderColor::hex_to_rgb( $value ) );
|
441 |
+
$a = $args['opacity'] / 100;
|
442 |
$css .= "\t$name: rgba($rgb,$a);\n";
|
443 |
}
|
444 |
}
|
445 |
+
break;
|
446 |
|
447 |
case 'image':
|
448 |
if ( stristr( $value, 'gradient(' ) ) {
|
450 |
} else {
|
451 |
$css .= "\t$name: url($value);\n";
|
452 |
}
|
453 |
+
break;
|
454 |
|
455 |
default:
|
456 |
$css .= "\t$name: $value";
|
classes/class-fl-builder-debug.php
CHANGED
@@ -316,7 +316,7 @@ final class FL_Debug {
|
|
316 |
$cache = FLBuilderModel::get_cache_dir();
|
317 |
|
318 |
$args = array(
|
319 |
-
'name' => 'Beaver Builder Path',
|
320 |
'data' => $cache['path'],
|
321 |
);
|
322 |
self::register( 'bb_cache_path', $args );
|
@@ -331,7 +331,7 @@ final class FL_Debug {
|
|
331 |
$cache = FLCustomizer::get_cache_dir();
|
332 |
|
333 |
$args = array(
|
334 |
-
'name' => 'Beaver Theme Path',
|
335 |
'data' => $cache['path'],
|
336 |
);
|
337 |
self::register( 'bb_theme_cache_path', $args );
|
@@ -343,6 +343,12 @@ final class FL_Debug {
|
|
343 |
self::register( 'bb_theme_cache_path_writable', $args );
|
344 |
}
|
345 |
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
$args = array(
|
347 |
'name' => 'License',
|
348 |
'data' => self::divider(),
|
316 |
$cache = FLBuilderModel::get_cache_dir();
|
317 |
|
318 |
$args = array(
|
319 |
+
'name' => 'Beaver Builder Cache Path',
|
320 |
'data' => $cache['path'],
|
321 |
);
|
322 |
self::register( 'bb_cache_path', $args );
|
331 |
$cache = FLCustomizer::get_cache_dir();
|
332 |
|
333 |
$args = array(
|
334 |
+
'name' => 'Beaver Theme Cache Path',
|
335 |
'data' => $cache['path'],
|
336 |
);
|
337 |
self::register( 'bb_theme_cache_path', $args );
|
343 |
self::register( 'bb_theme_cache_path_writable', $args );
|
344 |
}
|
345 |
|
346 |
+
$args = array(
|
347 |
+
'name' => 'WordPress Content Path',
|
348 |
+
'data' => WP_CONTENT_DIR,
|
349 |
+
);
|
350 |
+
self::register( 'bb_content_path', $args );
|
351 |
+
|
352 |
$args = array(
|
353 |
'name' => 'License',
|
354 |
'data' => self::divider(),
|
classes/class-fl-builder-export.php
CHANGED
@@ -61,15 +61,15 @@ final class FLBuilderExport {
|
|
61 |
$type = isset( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : 'fl-builder-template';
|
62 |
$data = array();
|
63 |
$query = new WP_Query( array(
|
64 |
-
'post_type'
|
65 |
-
'orderby'
|
66 |
-
'order'
|
67 |
-
'posts_per_page'
|
68 |
) );
|
69 |
|
70 |
foreach ( $query->posts as $post ) {
|
71 |
$data[] = array(
|
72 |
-
'id'
|
73 |
'title' => $post->post_title,
|
74 |
);
|
75 |
}
|
61 |
$type = isset( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : 'fl-builder-template';
|
62 |
$data = array();
|
63 |
$query = new WP_Query( array(
|
64 |
+
'post_type' => $type,
|
65 |
+
'orderby' => 'title',
|
66 |
+
'order' => 'ASC',
|
67 |
+
'posts_per_page' => '-1',
|
68 |
) );
|
69 |
|
70 |
foreach ( $query->posts as $post ) {
|
71 |
$data[] = array(
|
72 |
+
'id' => $post->ID,
|
73 |
'title' => $post->post_title,
|
74 |
);
|
75 |
}
|
classes/class-fl-builder-filesystem.php
CHANGED
@@ -9,7 +9,7 @@ class FL_Filesystem {
|
|
9 |
|
10 |
public static function instance() {
|
11 |
if ( is_null( self::$_instance ) ) {
|
12 |
-
$filtered
|
13 |
self::$_instance = $filtered instanceof FL_Filesystem ? $filtered : new self();
|
14 |
}
|
15 |
return self::$_instance;
|
@@ -135,14 +135,14 @@ class FL_Filesystem {
|
|
135 |
|
136 |
$context = apply_filters( 'request_filesystem_credentials_context', false );
|
137 |
|
138 |
-
add_filter( 'filesystem_method',
|
139 |
add_filter( 'request_filesystem_credentials', array( $this, 'request_filesystem_credentials' ) );
|
140 |
|
141 |
$creds = request_filesystem_credentials( site_url(), '', true, $context, null );
|
142 |
|
143 |
WP_Filesystem( $creds, $context );
|
144 |
|
145 |
-
remove_filter( 'filesystem_method',
|
146 |
remove_filter( 'request_filesystem_credentials', array( $this, 'FLBuilderUtils::request_filesystem_credentials' ) );
|
147 |
}
|
148 |
|
9 |
|
10 |
public static function instance() {
|
11 |
if ( is_null( self::$_instance ) ) {
|
12 |
+
$filtered = apply_filters( 'fl_filesystem_instance', null );
|
13 |
self::$_instance = $filtered instanceof FL_Filesystem ? $filtered : new self();
|
14 |
}
|
15 |
return self::$_instance;
|
135 |
|
136 |
$context = apply_filters( 'request_filesystem_credentials_context', false );
|
137 |
|
138 |
+
add_filter( 'filesystem_method', array( $this, 'filesystem_method' ) );
|
139 |
add_filter( 'request_filesystem_credentials', array( $this, 'request_filesystem_credentials' ) );
|
140 |
|
141 |
$creds = request_filesystem_credentials( site_url(), '', true, $context, null );
|
142 |
|
143 |
WP_Filesystem( $creds, $context );
|
144 |
|
145 |
+
remove_filter( 'filesystem_method', array( $this, 'filesystem_method' ) );
|
146 |
remove_filter( 'request_filesystem_credentials', array( $this, 'FLBuilderUtils::request_filesystem_credentials' ) );
|
147 |
}
|
148 |
|
classes/class-fl-builder-fonts.php
CHANGED
@@ -61,8 +61,20 @@ final class FLBuilderFonts {
|
|
61 |
static public function display_select_font( $font ) {
|
62 |
$system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
|
63 |
$google_fonts = apply_filters( 'fl_builder_font_families_google', FLBuilderFontFamilies::google() );
|
|
|
64 |
|
65 |
echo '<option value="Default" ' . selected( 'Default', $font, false ) . '>' . __( 'Default', 'fl-builder' ) . '</option>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
echo '<optgroup label="System">';
|
67 |
|
68 |
foreach ( $system_fonts as $name => $variants ) {
|
@@ -312,7 +324,10 @@ final class FLBuilderFonts {
|
|
312 |
*/
|
313 |
static public function add_font( $font ) {
|
314 |
|
315 |
-
|
|
|
|
|
|
|
316 |
|
317 |
$system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
|
318 |
|
@@ -332,7 +347,17 @@ final class FLBuilderFonts {
|
|
332 |
|
333 |
}
|
334 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
335 |
}
|
|
|
336 |
}
|
337 |
|
338 |
/**
|
@@ -608,7 +633,7 @@ final class FLBuilderFontFamilies {
|
|
608 |
if ( ! empty( self::$_google_json ) ) {
|
609 |
$json = self::$_google_json;
|
610 |
} else {
|
611 |
-
$json
|
612 |
self::$_google_json = $json;
|
613 |
}
|
614 |
/**
|
61 |
static public function display_select_font( $font ) {
|
62 |
$system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
|
63 |
$google_fonts = apply_filters( 'fl_builder_font_families_google', FLBuilderFontFamilies::google() );
|
64 |
+
$recent_fonts = get_option( 'fl_builder_recent_fonts', array() );
|
65 |
|
66 |
echo '<option value="Default" ' . selected( 'Default', $font, false ) . '>' . __( 'Default', 'fl-builder' ) . '</option>';
|
67 |
+
|
68 |
+
if ( is_array( $recent_fonts ) && ! empty( $recent_fonts ) ) {
|
69 |
+
echo '<optgroup label="Recently Used" class="recent-fonts">';
|
70 |
+
foreach ( $recent_fonts as $name => $variants ) {
|
71 |
+
if ( 'Default' == $name ) {
|
72 |
+
continue;
|
73 |
+
}
|
74 |
+
echo '<option value="' . $name . '">' . $name . '</option>';
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
echo '<optgroup label="System">';
|
79 |
|
80 |
foreach ( $system_fonts as $name => $variants ) {
|
324 |
*/
|
325 |
static public function add_font( $font ) {
|
326 |
|
327 |
+
$recent_fonts_db = get_option( 'fl_builder_recent_fonts', array() );
|
328 |
+
$recent_fonts = array();
|
329 |
+
|
330 |
+
if ( is_array( $font ) && isset( $font['family'] ) && isset( $font['weight'] ) && 'Default' != $font['family'] ) {
|
331 |
|
332 |
$system_fonts = apply_filters( 'fl_builder_font_families_system', FLBuilderFontFamilies::$system );
|
333 |
|
347 |
|
348 |
}
|
349 |
}
|
350 |
+
if ( ! isset( $recent_fonts_db[ $font['family'] ] ) ) {
|
351 |
+
$recent_fonts[ $font['family'] ] = $font['weight'];
|
352 |
+
}
|
353 |
+
}
|
354 |
+
|
355 |
+
$recent = array_merge( $recent_fonts, $recent_fonts_db );
|
356 |
+
|
357 |
+
if ( isset( $_GET['fl_builder'] ) && ! empty( $recent ) && serialize( $recent ) !== serialize( $recent_fonts_db ) ) {
|
358 |
+
update_option( 'fl_builder_recent_fonts', array_slice( $recent, -11 ) );
|
359 |
}
|
360 |
+
|
361 |
}
|
362 |
|
363 |
/**
|
633 |
if ( ! empty( self::$_google_json ) ) {
|
634 |
$json = self::$_google_json;
|
635 |
} else {
|
636 |
+
$json = (array) json_decode( file_get_contents( trailingslashit( FL_BUILDER_DIR ) . 'json/fonts.json' ), true );
|
637 |
self::$_google_json = $json;
|
638 |
}
|
639 |
/**
|
classes/class-fl-builder-icons.php
CHANGED
@@ -33,8 +33,8 @@ final class FLBuilderIcons {
|
|
33 |
// Check to see if we should pull sets from the main site.
|
34 |
if ( is_multisite() ) {
|
35 |
|
36 |
-
$id
|
37 |
-
$enabled_icons
|
38 |
|
39 |
if ( ( $id != $blog_id ) && empty( $enabled_icons ) ) {
|
40 |
switch_to_blog( $id );
|
@@ -51,7 +51,10 @@ final class FLBuilderIcons {
|
|
51 |
restore_current_blog();
|
52 |
}
|
53 |
|
54 |
-
|
|
|
|
|
|
|
55 |
self::$sets = apply_filters( 'fl_builder_icon_sets', self::$sets );
|
56 |
|
57 |
// Return the sets.
|
@@ -126,33 +129,33 @@ final class FLBuilderIcons {
|
|
126 |
*/
|
127 |
static private function register_core_sets() {
|
128 |
$enabled_icons = FLBuilderModel::get_enabled_icons();
|
129 |
-
$core_sets
|
130 |
-
'font-awesome'
|
131 |
-
'name'
|
132 |
'prefix' => 'fa',
|
133 |
),
|
134 |
-
'font-awesome-5-solid'
|
135 |
-
'name'
|
136 |
'prefix' => 'fas',
|
137 |
),
|
138 |
'font-awesome-5-regular' => array(
|
139 |
-
'name'
|
140 |
'prefix' => 'far',
|
141 |
),
|
142 |
-
'font-awesome-5-light'
|
143 |
-
'name'
|
144 |
'prefix' => 'fal',
|
145 |
),
|
146 |
-
'font-awesome-5-brands'
|
147 |
-
'name'
|
148 |
'prefix' => 'fab',
|
149 |
),
|
150 |
-
'foundation-icons'
|
151 |
-
'name'
|
152 |
'prefix' => '',
|
153 |
),
|
154 |
-
'dashicons'
|
155 |
-
'name'
|
156 |
'prefix' => 'dashicons dashicons-before',
|
157 |
),
|
158 |
) );
|
@@ -165,9 +168,9 @@ final class FLBuilderIcons {
|
|
165 |
foreach ( $core_sets as $set_key => $set_data ) {
|
166 |
if ( is_admin() || in_array( $set_key, $enabled_icons ) ) {
|
167 |
self::$sets[ $set_key ] = array(
|
168 |
-
'name'
|
169 |
'prefix' => $set_data['prefix'],
|
170 |
-
'type'
|
171 |
);
|
172 |
}
|
173 |
}
|
@@ -185,15 +188,15 @@ final class FLBuilderIcons {
|
|
185 |
|
186 |
if ( apply_filters( 'fl_enable_fa5_pro', false ) ) {
|
187 |
switch ( $set_key ) {
|
188 |
-
case 'font-awesome-5-light'
|
189 |
$key = 'font-awesome-5-light-pro';
|
190 |
break;
|
191 |
|
192 |
-
case 'font-awesome-5-regular'
|
193 |
$key = 'font-awesome-5-regular-pro';
|
194 |
break;
|
195 |
|
196 |
-
case 'font-awesome-5-solid'
|
197 |
$key = 'font-awesome-5-solid-pro';
|
198 |
break;
|
199 |
}
|
@@ -201,7 +204,7 @@ final class FLBuilderIcons {
|
|
201 |
|
202 |
$config_path = apply_filters( 'fl_builder_core_icon_set_config', FL_BUILDER_DIR . 'json/' . $key . '.json', $set_data );
|
203 |
|
204 |
-
$icons
|
205 |
self::$sets[ $set_key ]['icons'] = $icons;
|
206 |
}
|
207 |
}
|
@@ -218,7 +221,7 @@ final class FLBuilderIcons {
|
|
218 |
// Get uploaded sets.
|
219 |
$enabled_icons = FLBuilderModel::get_enabled_icons();
|
220 |
$upload_info = FLBuilderModel::get_cache_dir( 'icons' );
|
221 |
-
$folders
|
222 |
|
223 |
// Make sure we have an array.
|
224 |
if ( ! is_array( $folders ) ) {
|
@@ -247,18 +250,18 @@ final class FLBuilderIcons {
|
|
247 |
if ( is_admin() || in_array( $key, $enabled_icons ) ) {
|
248 |
|
249 |
self::$sets[ $key ] = array(
|
250 |
-
'name'
|
251 |
-
'prefix'
|
252 |
-
'type'
|
253 |
-
'path'
|
254 |
-
'url'
|
255 |
'stylesheet' => $url . 'style.css',
|
256 |
-
'icons'
|
257 |
);
|
258 |
|
259 |
foreach ( $data->icons as $icon ) {
|
260 |
|
261 |
-
$prefs
|
262 |
$postfix = isset( $prefs->postfix ) ? $prefs->postfix : '';
|
263 |
|
264 |
if ( isset( $prefs->selector ) && 'class' == $prefs->selector ) {
|
@@ -282,11 +285,11 @@ final class FLBuilderIcons {
|
|
282 |
|
283 |
// Append the date to the name?
|
284 |
if ( empty( $data->name ) ) {
|
285 |
-
$time
|
286 |
-
$date_format
|
287 |
-
$time_format
|
288 |
-
$date
|
289 |
-
$name
|
290 |
}
|
291 |
|
292 |
if ( isset( $data->glyphs ) ) {
|
@@ -294,13 +297,13 @@ final class FLBuilderIcons {
|
|
294 |
if ( is_admin() || in_array( $key, $enabled_icons ) ) {
|
295 |
|
296 |
self::$sets[ $key ] = array(
|
297 |
-
'name'
|
298 |
-
'prefix'
|
299 |
-
'type'
|
300 |
-
'path'
|
301 |
-
'url'
|
302 |
'stylesheet' => $url . 'css/' . $style . '.css',
|
303 |
-
'icons'
|
304 |
);
|
305 |
|
306 |
foreach ( $data->glyphs as $icon ) {
|
@@ -392,6 +395,10 @@ final class FLBuilderIcons {
|
|
392 |
* @return void
|
393 |
*/
|
394 |
static private function enqueue_styles_for_icon( $icon ) {
|
|
|
|
|
|
|
|
|
395 |
do_action( 'fl_builder_enqueue_styles_for_icon', $icon );
|
396 |
|
397 |
// Is this a core icon?
|
33 |
// Check to see if we should pull sets from the main site.
|
34 |
if ( is_multisite() ) {
|
35 |
|
36 |
+
$id = defined( 'BLOG_ID_CURRENT_SITE' ) ? BLOG_ID_CURRENT_SITE : 1;
|
37 |
+
$enabled_icons = get_option( '_fl_builder_enabled_icons' );
|
38 |
|
39 |
if ( ( $id != $blog_id ) && empty( $enabled_icons ) ) {
|
40 |
switch_to_blog( $id );
|
51 |
restore_current_blog();
|
52 |
}
|
53 |
|
54 |
+
/**
|
55 |
+
* Filter the icon sets.
|
56 |
+
* @see fl_builder_icon_sets
|
57 |
+
*/
|
58 |
self::$sets = apply_filters( 'fl_builder_icon_sets', self::$sets );
|
59 |
|
60 |
// Return the sets.
|
129 |
*/
|
130 |
static private function register_core_sets() {
|
131 |
$enabled_icons = FLBuilderModel::get_enabled_icons();
|
132 |
+
$core_sets = apply_filters( 'fl_builder_core_icon_sets', array(
|
133 |
+
'font-awesome' => array(
|
134 |
+
'name' => 'Font Awesome 4',
|
135 |
'prefix' => 'fa',
|
136 |
),
|
137 |
+
'font-awesome-5-solid' => array(
|
138 |
+
'name' => 'Font Awesome 5 Solid',
|
139 |
'prefix' => 'fas',
|
140 |
),
|
141 |
'font-awesome-5-regular' => array(
|
142 |
+
'name' => 'Font Awesome 5 Regular',
|
143 |
'prefix' => 'far',
|
144 |
),
|
145 |
+
'font-awesome-5-light' => array(
|
146 |
+
'name' => 'Font Awesome 5 Light (pro only)',
|
147 |
'prefix' => 'fal',
|
148 |
),
|
149 |
+
'font-awesome-5-brands' => array(
|
150 |
+
'name' => 'Font Awesome 5 Brands',
|
151 |
'prefix' => 'fab',
|
152 |
),
|
153 |
+
'foundation-icons' => array(
|
154 |
+
'name' => 'Foundation Icons',
|
155 |
'prefix' => '',
|
156 |
),
|
157 |
+
'dashicons' => array(
|
158 |
+
'name' => 'WordPress Dashicons',
|
159 |
'prefix' => 'dashicons dashicons-before',
|
160 |
),
|
161 |
) );
|
168 |
foreach ( $core_sets as $set_key => $set_data ) {
|
169 |
if ( is_admin() || in_array( $set_key, $enabled_icons ) ) {
|
170 |
self::$sets[ $set_key ] = array(
|
171 |
+
'name' => $set_data['name'],
|
172 |
'prefix' => $set_data['prefix'],
|
173 |
+
'type' => 'core',
|
174 |
);
|
175 |
}
|
176 |
}
|
188 |
|
189 |
if ( apply_filters( 'fl_enable_fa5_pro', false ) ) {
|
190 |
switch ( $set_key ) {
|
191 |
+
case 'font-awesome-5-light':
|
192 |
$key = 'font-awesome-5-light-pro';
|
193 |
break;
|
194 |
|
195 |
+
case 'font-awesome-5-regular':
|
196 |
$key = 'font-awesome-5-regular-pro';
|
197 |
break;
|
198 |
|
199 |
+
case 'font-awesome-5-solid':
|
200 |
$key = 'font-awesome-5-solid-pro';
|
201 |
break;
|
202 |
}
|
204 |
|
205 |
$config_path = apply_filters( 'fl_builder_core_icon_set_config', FL_BUILDER_DIR . 'json/' . $key . '.json', $set_data );
|
206 |
|
207 |
+
$icons = json_decode( file_get_contents( $config_path ) );
|
208 |
self::$sets[ $set_key ]['icons'] = $icons;
|
209 |
}
|
210 |
}
|
221 |
// Get uploaded sets.
|
222 |
$enabled_icons = FLBuilderModel::get_enabled_icons();
|
223 |
$upload_info = FLBuilderModel::get_cache_dir( 'icons' );
|
224 |
+
$folders = glob( $upload_info['path'] . '*' );
|
225 |
|
226 |
// Make sure we have an array.
|
227 |
if ( ! is_array( $folders ) ) {
|
250 |
if ( is_admin() || in_array( $key, $enabled_icons ) ) {
|
251 |
|
252 |
self::$sets[ $key ] = array(
|
253 |
+
'name' => $data->metadata->name,
|
254 |
+
'prefix' => '',
|
255 |
+
'type' => 'icomoon',
|
256 |
+
'path' => $folder,
|
257 |
+
'url' => $url,
|
258 |
'stylesheet' => $url . 'style.css',
|
259 |
+
'icons' => array(),
|
260 |
);
|
261 |
|
262 |
foreach ( $data->icons as $icon ) {
|
263 |
|
264 |
+
$prefs = $data->preferences->fontPref;
|
265 |
$postfix = isset( $prefs->postfix ) ? $prefs->postfix : '';
|
266 |
|
267 |
if ( isset( $prefs->selector ) && 'class' == $prefs->selector ) {
|
285 |
|
286 |
// Append the date to the name?
|
287 |
if ( empty( $data->name ) ) {
|
288 |
+
$time = str_replace( 'icon-', '', $key );
|
289 |
+
$date_format = get_option( 'date_format' );
|
290 |
+
$time_format = get_option( 'time_format' );
|
291 |
+
$date = date( $date_format . ' ' . $time_format );
|
292 |
+
$name .= ' (' . $date . ')';
|
293 |
}
|
294 |
|
295 |
if ( isset( $data->glyphs ) ) {
|
297 |
if ( is_admin() || in_array( $key, $enabled_icons ) ) {
|
298 |
|
299 |
self::$sets[ $key ] = array(
|
300 |
+
'name' => $name,
|
301 |
+
'prefix' => '',
|
302 |
+
'type' => 'fontello',
|
303 |
+
'path' => $folder,
|
304 |
+
'url' => $url,
|
305 |
'stylesheet' => $url . 'css/' . $style . '.css',
|
306 |
+
'icons' => array(),
|
307 |
);
|
308 |
|
309 |
foreach ( $data->glyphs as $icon ) {
|
395 |
* @return void
|
396 |
*/
|
397 |
static private function enqueue_styles_for_icon( $icon ) {
|
398 |
+
/**
|
399 |
+
* Enqueue the stylesheet for an icon.
|
400 |
+
* @see fl_builder_enqueue_styles_for_icon
|
401 |
+
*/
|
402 |
do_action( 'fl_builder_enqueue_styles_for_icon', $icon );
|
403 |
|
404 |
// Is this a core icon?
|
classes/class-fl-builder-import.php
CHANGED
@@ -23,7 +23,7 @@ final class FLBuilderImport {
|
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
-
require_once FL_BUILDER_DIR . '
|
27 |
|
28 |
// Remove the WordPress importer.
|
29 |
remove_action( 'admin_init', 'wordpress_importer_init' );
|
23 |
return;
|
24 |
}
|
25 |
|
26 |
+
require_once FL_BUILDER_DIR . 'classes/class-fl-builder-importer.php';
|
27 |
|
28 |
// Remove the WordPress importer.
|
29 |
remove_action( 'admin_init', 'wordpress_importer_init' );
|
classes/class-fl-builder-importer.php
CHANGED
@@ -82,7 +82,7 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
|
|
82 |
continue;
|
83 |
}
|
84 |
if ( false !== strpos( $importline, '<item>' ) ) {
|
85 |
-
$post
|
86 |
$in_post = true;
|
87 |
continue;
|
88 |
}
|
@@ -120,13 +120,13 @@ class FLBuilderImportParserRegex extends WXR_Parser_Regex {
|
|
120 |
}
|
121 |
|
122 |
return array(
|
123 |
-
'authors'
|
124 |
-
'posts'
|
125 |
'categories' => $this->categories,
|
126 |
-
'tags'
|
127 |
-
'terms'
|
128 |
-
'base_url'
|
129 |
-
'version'
|
130 |
);
|
131 |
}
|
132 |
|
@@ -209,7 +209,7 @@ final class FLBuilderImporterDataFix {
|
|
209 |
*/
|
210 |
static private function unescape_mysql( $value ) {
|
211 |
return str_replace( array( '\\\\', "\\0", "\\n", "\\r", '\Z', "\'", '\"' ),
|
212 |
-
array( '\\',
|
213 |
$value );
|
214 |
}
|
215 |
|
82 |
continue;
|
83 |
}
|
84 |
if ( false !== strpos( $importline, '<item>' ) ) {
|
85 |
+
$post = '';
|
86 |
$in_post = true;
|
87 |
continue;
|
88 |
}
|
120 |
}
|
121 |
|
122 |
return array(
|
123 |
+
'authors' => $this->authors,
|
124 |
+
'posts' => $this->posts,
|
125 |
'categories' => $this->categories,
|
126 |
+
'tags' => $this->tags,
|
127 |
+
'terms' => $this->terms,
|
128 |
+
'base_url' => $this->base_url,
|
129 |
+
'version' => $wxr_version,
|
130 |
);
|
131 |
}
|
132 |
|
209 |
*/
|
210 |
static private function unescape_mysql( $value ) {
|
211 |
return str_replace( array( '\\\\', "\\0", "\\n", "\\r", '\Z', "\'", '\"' ),
|
212 |
+
array( '\\', "\0", "\n", "\r", "\x1a", "'", '"' ),
|
213 |
$value );
|
214 |
}
|
215 |
|
classes/class-fl-builder-loader.php
CHANGED
@@ -29,8 +29,8 @@ if ( ! class_exists( 'FLBuilderLoader' ) ) {
|
|
29 |
deactivate_plugins( array( $lite_dirname . '/fl-builder.php' ), false, is_network_admin() );
|
30 |
return;
|
31 |
} elseif ( class_exists( 'FLBuilder' ) ) {
|
32 |
-
add_action( 'admin_notices',
|
33 |
-
add_action( 'network_admin_notices',
|
34 |
return;
|
35 |
}
|
36 |
|
@@ -46,7 +46,7 @@ if ( ! class_exists( 'FLBuilderLoader' ) ) {
|
|
46 |
* @return void
|
47 |
*/
|
48 |
static private function define_constants() {
|
49 |
-
define( 'FL_BUILDER_VERSION', '2.2.
|
50 |
define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
|
51 |
define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
|
52 |
define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
|
@@ -140,8 +140,8 @@ if ( ! class_exists( 'FLBuilderLoader' ) ) {
|
|
140 |
$bb_upload_dir = FLBuilderModel::get_upload_dir();
|
141 |
|
142 |
if ( ! fl_builder_filesystem()->is_writable( $wp_upload_dir['basedir'] ) || ! fl_builder_filesystem()->is_writable( $bb_upload_dir['path'] ) ) {
|
143 |
-
add_action( 'admin_notices',
|
144 |
-
add_action( 'network_admin_notices',
|
145 |
}
|
146 |
}
|
147 |
}
|
29 |
deactivate_plugins( array( $lite_dirname . '/fl-builder.php' ), false, is_network_admin() );
|
30 |
return;
|
31 |
} elseif ( class_exists( 'FLBuilder' ) ) {
|
32 |
+
add_action( 'admin_notices', __CLASS__ . '::double_install_admin_notice' );
|
33 |
+
add_action( 'network_admin_notices', __CLASS__ . '::double_install_admin_notice' );
|
34 |
return;
|
35 |
}
|
36 |
|
46 |
* @return void
|
47 |
*/
|
48 |
static private function define_constants() {
|
49 |
+
define( 'FL_BUILDER_VERSION', '2.2.1.4' );
|
50 |
define( 'FL_BUILDER_FILE', trailingslashit( dirname( dirname( __FILE__ ) ) ) . 'fl-builder.php' );
|
51 |
define( 'FL_BUILDER_DIR', plugin_dir_path( FL_BUILDER_FILE ) );
|
52 |
define( 'FL_BUILDER_URL', plugins_url( '/', FL_BUILDER_FILE ) );
|
140 |
$bb_upload_dir = FLBuilderModel::get_upload_dir();
|
141 |
|
142 |
if ( ! fl_builder_filesystem()->is_writable( $wp_upload_dir['basedir'] ) || ! fl_builder_filesystem()->is_writable( $bb_upload_dir['path'] ) ) {
|
143 |
+
add_action( 'admin_notices', __CLASS__ . '::permissions_admin_notice' );
|
144 |
+
add_action( 'network_admin_notices', __CLASS__ . '::permissions_admin_notice' );
|
145 |
}
|
146 |
}
|
147 |
}
|
classes/class-fl-builder-loop.php
CHANGED
@@ -26,11 +26,11 @@ final class FLBuilderLoop {
|
|
26 |
/**
|
27 |
* Cache the custom pagination data.
|
28 |
* Format:
|
29 |
-
*
|
30 |
-
*
|
31 |
-
*
|
32 |
-
*
|
33 |
-
*
|
34 |
*
|
35 |
* @since 1.10.7
|
36 |
* @var array
|
@@ -62,17 +62,17 @@ final class FLBuilderLoop {
|
|
62 |
static public function init() {
|
63 |
// Actions
|
64 |
add_action( 'fl_builder_before_control_suggest', __CLASS__ . '::render_match_select', 10, 4 );
|
65 |
-
add_action( 'init',
|
66 |
-
add_action( 'fl_builder_activated',
|
67 |
-
add_action( 'registered_post_type',
|
68 |
-
add_action( 'registered_taxonomy',
|
69 |
-
add_action( 'wp_loaded',
|
70 |
|
71 |
// Filters
|
72 |
-
add_filter( 'found_posts',
|
73 |
-
add_filter( 'redirect_canonical',
|
74 |
-
add_filter( 'pre_handle_404',
|
75 |
-
add_filter( 'paginate_links',
|
76 |
}
|
77 |
|
78 |
/**
|
@@ -84,8 +84,16 @@ final class FLBuilderLoop {
|
|
84 |
* @return object A WP_Query instance.
|
85 |
*/
|
86 |
static public function query( $settings ) {
|
|
|
|
|
|
|
|
|
87 |
$settings = apply_filters( 'fl_builder_loop_before_query_settings', $settings );
|
88 |
|
|
|
|
|
|
|
|
|
89 |
do_action( 'fl_builder_loop_before_query', $settings );
|
90 |
|
91 |
// Count how many times this method has been called
|
@@ -97,8 +105,16 @@ final class FLBuilderLoop {
|
|
97 |
$query = self::custom_query( $settings );
|
98 |
}
|
99 |
|
|
|
|
|
|
|
|
|
100 |
do_action( 'fl_builder_loop_after_query', $settings );
|
101 |
|
|
|
|
|
|
|
|
|
102 |
return apply_filters( 'fl_builder_loop_query', $query, $settings );
|
103 |
}
|
104 |
|
@@ -117,9 +133,9 @@ final class FLBuilderLoop {
|
|
117 |
|
118 |
$query_args = $wp_query->query_vars;
|
119 |
|
120 |
-
$query_args['paged']
|
121 |
$query_args['fl_original_offset'] = 0;
|
122 |
-
$query_args['fl_builder_loop']
|
123 |
|
124 |
$query = new WP_Query( $query_args );
|
125 |
} else {
|
@@ -141,13 +157,13 @@ final class FLBuilderLoop {
|
|
141 |
*/
|
142 |
static public function custom_query( $settings ) {
|
143 |
global $post;
|
144 |
-
$posts_per_page
|
145 |
-
$post_type
|
146 |
-
$order_by
|
147 |
-
$order
|
148 |
-
$users
|
149 |
-
$fields
|
150 |
-
$exclude_self
|
151 |
if ( isset( $settings->exclude_self ) && 'yes' == $settings->exclude_self ) {
|
152 |
$exclude_self = $post->ID;
|
153 |
}
|
@@ -170,12 +186,12 @@ final class FLBuilderLoop {
|
|
170 |
|
171 |
// Build the query args.
|
172 |
$args = array(
|
173 |
-
'paged'
|
174 |
-
'posts_per_page'
|
175 |
-
'post_type'
|
176 |
-
'orderby'
|
177 |
-
'order'
|
178 |
-
'tax_query'
|
179 |
'relation' => 'AND',
|
180 |
),
|
181 |
'ignore_sticky_posts' => true,
|
@@ -195,7 +211,7 @@ final class FLBuilderLoop {
|
|
195 |
if ( 'author' == $order_by ) {
|
196 |
$args['orderby'] = array(
|
197 |
'author' => $order,
|
198 |
-
'date'
|
199 |
);
|
200 |
}
|
201 |
|
@@ -250,7 +266,7 @@ final class FLBuilderLoop {
|
|
250 |
} elseif ( 'related' === $tax_matching ) {
|
251 |
// Match posts by related terms from the global post.
|
252 |
global $post;
|
253 |
-
$terms
|
254 |
$related = array();
|
255 |
|
256 |
foreach ( $terms as $term ) {
|
@@ -266,10 +282,10 @@ final class FLBuilderLoop {
|
|
266 |
|
267 |
// Don't include posts with terms selected in the suggest field.
|
268 |
$args['tax_query'][] = array(
|
269 |
-
'taxonomy'
|
270 |
-
'field'
|
271 |
-
'terms'
|
272 |
-
'operator'
|
273 |
);
|
274 |
|
275 |
// Set the term IDs to the related terms.
|
@@ -281,10 +297,10 @@ final class FLBuilderLoop {
|
|
281 |
if ( ! empty( $term_ids ) ) {
|
282 |
|
283 |
$args['tax_query'][] = array(
|
284 |
-
'taxonomy'
|
285 |
-
'field'
|
286 |
-
'terms'
|
287 |
-
'operator'
|
288 |
);
|
289 |
}
|
290 |
}
|
@@ -353,7 +369,7 @@ final class FLBuilderLoop {
|
|
353 |
*/
|
354 |
static public function init_rewrite_rules() {
|
355 |
|
356 |
-
$fronts
|
357 |
$paged_regex = self::$paged_regex_base;
|
358 |
|
359 |
$flpaged_rules = array(
|
@@ -383,7 +399,7 @@ final class FLBuilderLoop {
|
|
383 |
'(.?.+?)/' . $paged_regex . '/?([0-9]{1,})/?$' => 'index.php?pagename=$matches[1]&flpaged=$matches[2]',
|
384 |
|
385 |
// Post single
|
386 |
-
'(.+?)/' . $paged_regex . '/?([0-9]{1,})/?$'
|
387 |
);
|
388 |
|
389 |
// Frontpage static
|
@@ -429,11 +445,11 @@ final class FLBuilderLoop {
|
|
429 |
$author_base = $front . $wp_rewrite->author_base . '/';
|
430 |
|
431 |
return array(
|
432 |
-
'category'
|
433 |
-
'tag'
|
434 |
-
'date'
|
435 |
-
'author'
|
436 |
-
'default'
|
437 |
);
|
438 |
}
|
439 |
|
@@ -490,10 +506,10 @@ final class FLBuilderLoop {
|
|
490 |
|
491 |
// Append $custom_paged[ 'current_page' ] to slug if it's single.
|
492 |
if ( $is_single ) {
|
493 |
-
$regex
|
494 |
$redirect = 'index.php?post_type=' . $post_type . '&name=' . $custom_paged['current_page'] . '&flpaged=$matches[1]';
|
495 |
} else {
|
496 |
-
$regex
|
497 |
$redirect = 'index.php?post_type=' . $post_type . '&flpaged=$matches[1]';
|
498 |
}
|
499 |
|
@@ -608,7 +624,7 @@ final class FLBuilderLoop {
|
|
608 |
}
|
609 |
|
610 |
self::$_rewrote_post_type = false;
|
611 |
-
self::$_rewrote_taxonomy
|
612 |
}
|
613 |
|
614 |
/**
|
@@ -634,8 +650,8 @@ final class FLBuilderLoop {
|
|
634 |
|
635 |
// Disable canonical on single post pagination for all post types.
|
636 |
if ( true === $wp_the_query->is_singular
|
637 |
-
|
638 |
-
|
639 |
) {
|
640 |
$redirect_url = false;
|
641 |
}
|
@@ -648,7 +664,7 @@ final class FLBuilderLoop {
|
|
648 |
* Theme Builder support - Check to see if current page has Themer layout.
|
649 |
* Short-circuit default header status handling when paginating on themer layout content.
|
650 |
*
|
651 |
-
* @param bool
|
652 |
* @param object $query WP Query object.
|
653 |
* @since 1.10.7
|
654 |
* @return bool
|
@@ -675,7 +691,7 @@ final class FLBuilderLoop {
|
|
675 |
}
|
676 |
|
677 |
$is_global_hack = false;
|
678 |
-
$layout_type
|
679 |
|
680 |
// Manually set globals since filter `pre_handle_404`
|
681 |
// doesn't reach `$wp_query->register_globals()`.
|
@@ -686,7 +702,7 @@ final class FLBuilderLoop {
|
|
686 |
$wp_actions['wp'] = 1;
|
687 |
|
688 |
if ( $query->is_post_type_archive ) {
|
689 |
-
$post
|
690 |
$post->post_type = $query->get( 'post_type' );
|
691 |
$GLOBALS['post'] = $post;
|
692 |
}
|
@@ -716,11 +732,11 @@ final class FLBuilderLoop {
|
|
716 |
* @return void
|
717 |
*/
|
718 |
static public function pagination( $query ) {
|
719 |
-
$total_pages
|
720 |
$permalink_structure = get_option( 'permalink_structure' );
|
721 |
-
$paged
|
722 |
-
$base
|
723 |
-
$add_args
|
724 |
|
725 |
if ( $total_pages > 1 ) {
|
726 |
|
@@ -728,7 +744,7 @@ final class FLBuilderLoop {
|
|
728 |
$current_page = 1;
|
729 |
}
|
730 |
|
731 |
-
$base
|
732 |
$format = self::paged_format( $permalink_structure, $base );
|
733 |
|
734 |
// Flag if it's a first posts module in an archive page.
|
@@ -742,11 +758,11 @@ final class FLBuilderLoop {
|
|
742 |
}
|
743 |
|
744 |
echo paginate_links(array(
|
745 |
-
'base'
|
746 |
'format' => $format,
|
747 |
'current' => $current_page,
|
748 |
-
'total'
|
749 |
-
'type'
|
750 |
'add_args' => $add_args,
|
751 |
));
|
752 |
}
|
@@ -762,8 +778,8 @@ final class FLBuilderLoop {
|
|
762 |
*/
|
763 |
static public function filter_paginate_links( $link ) {
|
764 |
$permalink_structure = get_option( 'permalink_structure' );
|
765 |
-
$base
|
766 |
-
$link_params
|
767 |
|
768 |
if ( empty( $permalink_structure ) && strrpos( $base, 'paged-' ) ) {
|
769 |
|
@@ -773,10 +789,10 @@ final class FLBuilderLoop {
|
|
773 |
$current_paged_args = array_values( preg_grep( '/^paged-(\d+)/', array_keys( $base_args ) ) );
|
774 |
|
775 |
if ( ! empty( $current_paged_args ) ) {
|
776 |
-
$current_flpaged
|
777 |
$current_paged_param = $current_flpaged . '=' . $base_args[ $current_flpaged ];
|
778 |
|
779 |
-
$link_params = str_replace( $current_paged_param, ''
|
780 |
wp_parse_str( $link_params, $link_args );
|
781 |
|
782 |
$link = strtok( $link, '?' );
|
@@ -848,14 +864,14 @@ final class FLBuilderLoop {
|
|
848 |
}
|
849 |
|
850 |
if ( ! empty( $permalink_structure ) ) {
|
851 |
-
$format
|
852 |
$format .= $page_prefix . '/';
|
853 |
$format .= '%#%';
|
854 |
$format .= substr( $permalink_structure, -1 ) == '/' ? '/' : '';
|
855 |
} elseif ( empty( $permalink_structure ) || is_search() ) {
|
856 |
$parse_url = wp_parse_url( $base, PHP_URL_QUERY );
|
857 |
-
$format
|
858 |
-
$format
|
859 |
}
|
860 |
|
861 |
return $format;
|
@@ -889,10 +905,10 @@ final class FLBuilderLoop {
|
|
889 |
|
890 |
if ( $paged_matches ) {
|
891 |
self::$custom_paged_data = array(
|
892 |
-
'parent_page'
|
893 |
-
'current_page'
|
894 |
-
'current_loop'
|
895 |
-
'paged'
|
896 |
);
|
897 |
}
|
898 |
|
@@ -933,13 +949,13 @@ final class FLBuilderLoop {
|
|
933 |
|
934 |
// In case the site is using default permalink structure and it has multiple paginations.
|
935 |
$permalink_structure = get_option( 'permalink_structure' );
|
936 |
-
$base
|
937 |
|
938 |
if ( is_numeric( $flpaged ) && self::is_paginated_loop() ) {
|
939 |
return $flpaged;
|
940 |
} elseif ( empty( $permalink_structure ) && strrpos( $base, 'paged-' ) && self::$loop_counter > 1 ) {
|
941 |
|
942 |
-
$flpaged
|
943 |
$url_parts = wp_parse_url( $base, PHP_URL_QUERY );
|
944 |
wp_parse_str( $url_parts, $url_params );
|
945 |
|
@@ -993,8 +1009,8 @@ final class FLBuilderLoop {
|
|
993 |
*/
|
994 |
static public function post_types() {
|
995 |
$post_types = get_post_types(array(
|
996 |
-
'public'
|
997 |
-
'show_ui'
|
998 |
), 'objects');
|
999 |
|
1000 |
unset( $post_types['attachment'] );
|
@@ -1013,7 +1029,7 @@ final class FLBuilderLoop {
|
|
1013 |
*/
|
1014 |
static public function taxonomies( $post_type ) {
|
1015 |
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
|
1016 |
-
$data
|
1017 |
|
1018 |
foreach ( $taxonomies as $tax_slug => $tax ) {
|
1019 |
|
26 |
/**
|
27 |
* Cache the custom pagination data.
|
28 |
* Format:
|
29 |
+
* array(
|
30 |
+
* 'current_page' => '',
|
31 |
+
* 'current_loop' => '',
|
32 |
+
* 'paged' => ''
|
33 |
+
* )
|
34 |
*
|
35 |
* @since 1.10.7
|
36 |
* @var array
|
62 |
static public function init() {
|
63 |
// Actions
|
64 |
add_action( 'fl_builder_before_control_suggest', __CLASS__ . '::render_match_select', 10, 4 );
|
65 |
+
add_action( 'init', __CLASS__ . '::init_rewrite_rules', 20 );
|
66 |
+
add_action( 'fl_builder_activated', __CLASS__ . '::init_rewrite_rules', 10 );
|
67 |
+
add_action( 'registered_post_type', __CLASS__ . '::post_type_rewrite_rules', 10, 2 );
|
68 |
+
add_action( 'registered_taxonomy', __CLASS__ . '::taxonomy_rewrite_rules', 10, 3 );
|
69 |
+
add_action( 'wp_loaded', __CLASS__ . '::flush_rewrite_rules', 1 );
|
70 |
|
71 |
// Filters
|
72 |
+
add_filter( 'found_posts', __CLASS__ . '::found_posts', 1, 2 );
|
73 |
+
add_filter( 'redirect_canonical', __CLASS__ . '::override_canonical', 1, 2 );
|
74 |
+
add_filter( 'pre_handle_404', __CLASS__ . '::pre_404_pagination', 1, 2 );
|
75 |
+
add_filter( 'paginate_links', __CLASS__ . '::filter_paginate_links', 1 );
|
76 |
}
|
77 |
|
78 |
/**
|
84 |
* @return object A WP_Query instance.
|
85 |
*/
|
86 |
static public function query( $settings ) {
|
87 |
+
/**
|
88 |
+
* Filter the settings variable before query is performed.
|
89 |
+
* @see fl_builder_loop_before_query_settings
|
90 |
+
*/
|
91 |
$settings = apply_filters( 'fl_builder_loop_before_query_settings', $settings );
|
92 |
|
93 |
+
/**
|
94 |
+
* Before query is performed.
|
95 |
+
* @see fl_builder_loop_before_query
|
96 |
+
*/
|
97 |
do_action( 'fl_builder_loop_before_query', $settings );
|
98 |
|
99 |
// Count how many times this method has been called
|
105 |
$query = self::custom_query( $settings );
|
106 |
}
|
107 |
|
108 |
+
/**
|
109 |
+
* Aftert the query is performed.
|
110 |
+
* @see fl_builder_loop_after_query
|
111 |
+
*/
|
112 |
do_action( 'fl_builder_loop_after_query', $settings );
|
113 |
|
114 |
+
/**
|
115 |
+
* Filter the query results.
|
116 |
+
* @see fl_builder_loop_query
|
117 |
+
*/
|
118 |
return apply_filters( 'fl_builder_loop_query', $query, $settings );
|
119 |
}
|
120 |
|
133 |
|
134 |
$query_args = $wp_query->query_vars;
|
135 |
|
136 |
+
$query_args['paged'] = self::get_paged();
|
137 |
$query_args['fl_original_offset'] = 0;
|
138 |
+
$query_args['fl_builder_loop'] = true;
|
139 |
|
140 |
$query = new WP_Query( $query_args );
|
141 |
} else {
|
157 |
*/
|
158 |
static public function custom_query( $settings ) {
|
159 |
global $post;
|
160 |
+
$posts_per_page = empty( $settings->posts_per_page ) ? 10 : $settings->posts_per_page;
|
161 |
+
$post_type = empty( $settings->post_type ) ? 'post' : $settings->post_type;
|
162 |
+
$order_by = empty( $settings->order_by ) ? 'date' : $settings->order_by;
|
163 |
+
$order = empty( $settings->order ) ? 'DESC' : $settings->order;
|
164 |
+
$users = empty( $settings->users ) ? '' : $settings->users;
|
165 |
+
$fields = empty( $settings->fields ) ? '' : $settings->fields;
|
166 |
+
$exclude_self = '';
|
167 |
if ( isset( $settings->exclude_self ) && 'yes' == $settings->exclude_self ) {
|
168 |
$exclude_self = $post->ID;
|
169 |
}
|
186 |
|
187 |
// Build the query args.
|
188 |
$args = array(
|
189 |
+
'paged' => $paged,
|
190 |
+
'posts_per_page' => $posts_per_page,
|
191 |
+
'post_type' => $post_type,
|
192 |
+
'orderby' => $order_by,
|
193 |
+
'order' => $order,
|
194 |
+
'tax_query' => array(
|
195 |
'relation' => 'AND',
|
196 |
),
|
197 |
'ignore_sticky_posts' => true,
|
211 |
if ( 'author' == $order_by ) {
|
212 |
$args['orderby'] = array(
|
213 |
'author' => $order,
|
214 |
+
'date' => $order,
|
215 |
);
|
216 |
}
|
217 |
|
266 |
} elseif ( 'related' === $tax_matching ) {
|
267 |
// Match posts by related terms from the global post.
|
268 |
global $post;
|
269 |
+
$terms = wp_get_post_terms( $post->ID, $tax_slug );
|
270 |
$related = array();
|
271 |
|
272 |
foreach ( $terms as $term ) {
|
282 |
|
283 |
// Don't include posts with terms selected in the suggest field.
|
284 |
$args['tax_query'][] = array(
|
285 |
+
'taxonomy' => $tax_slug,
|
286 |
+
'field' => 'id',
|
287 |
+
'terms' => $term_ids,
|
288 |
+
'operator' => 'NOT IN',
|
289 |
);
|
290 |
|
291 |
// Set the term IDs to the related terms.
|
297 |
if ( ! empty( $term_ids ) ) {
|
298 |
|
299 |
$args['tax_query'][] = array(
|
300 |
+
'taxonomy' => $tax_slug,
|
301 |
+
'field' => 'id',
|
302 |
+
'terms' => $term_ids,
|
303 |
+
'operator' => $operator,
|
304 |
);
|
305 |
}
|
306 |
}
|
369 |
*/
|
370 |
static public function init_rewrite_rules() {
|
371 |
|
372 |
+
$fronts = self::get_rewrite_fronts();
|
373 |
$paged_regex = self::$paged_regex_base;
|
374 |
|
375 |
$flpaged_rules = array(
|
399 |
'(.?.+?)/' . $paged_regex . '/?([0-9]{1,})/?$' => 'index.php?pagename=$matches[1]&flpaged=$matches[2]',
|
400 |
|
401 |
// Post single
|
402 |
+
'(.+?)/' . $paged_regex . '/?([0-9]{1,})/?$' => 'index.php?name=$matches[1]&flpaged=$matches[2]',
|
403 |
);
|
404 |
|
405 |
// Frontpage static
|
445 |
$author_base = $front . $wp_rewrite->author_base . '/';
|
446 |
|
447 |
return array(
|
448 |
+
'category' => $category_base,
|
449 |
+
'tag' => $tag_base,
|
450 |
+
'date' => $date_base,
|
451 |
+
'author' => $author_base,
|
452 |
+
'default' => $front,
|
453 |
);
|
454 |
}
|
455 |
|
506 |
|
507 |
// Append $custom_paged[ 'current_page' ] to slug if it's single.
|
508 |
if ( $is_single ) {
|
509 |
+
$regex = $slug . '/' . $custom_paged['current_page'] . '/' . self::$paged_regex_base . '/?([0-9]{1,})/?$';
|
510 |
$redirect = 'index.php?post_type=' . $post_type . '&name=' . $custom_paged['current_page'] . '&flpaged=$matches[1]';
|
511 |
} else {
|
512 |
+
$regex = $slug . '/' . self::$paged_regex_base . '/?([0-9]{1,})/?$';
|
513 |
$redirect = 'index.php?post_type=' . $post_type . '&flpaged=$matches[1]';
|
514 |
}
|
515 |
|
624 |
}
|
625 |
|
626 |
self::$_rewrote_post_type = false;
|
627 |
+
self::$_rewrote_taxonomy = false;
|
628 |
}
|
629 |
|
630 |
/**
|
650 |
|
651 |
// Disable canonical on single post pagination for all post types.
|
652 |
if ( true === $wp_the_query->is_singular
|
653 |
+
&& - 1 == $wp_the_query->current_post
|
654 |
+
&& true === $wp_the_query->is_paged
|
655 |
) {
|
656 |
$redirect_url = false;
|
657 |
}
|
664 |
* Theme Builder support - Check to see if current page has Themer layout.
|
665 |
* Short-circuit default header status handling when paginating on themer layout content.
|
666 |
*
|
667 |
+
* @param bool $prevent_404 Whether to short-circuit default header status handling. Default false.
|
668 |
* @param object $query WP Query object.
|
669 |
* @since 1.10.7
|
670 |
* @return bool
|
691 |
}
|
692 |
|
693 |
$is_global_hack = false;
|
694 |
+
$layout_type = '';
|
695 |
|
696 |
// Manually set globals since filter `pre_handle_404`
|
697 |
// doesn't reach `$wp_query->register_globals()`.
|
702 |
$wp_actions['wp'] = 1;
|
703 |
|
704 |
if ( $query->is_post_type_archive ) {
|
705 |
+
$post = new stdClass();
|
706 |
$post->post_type = $query->get( 'post_type' );
|
707 |
$GLOBALS['post'] = $post;
|
708 |
}
|
732 |
* @return void
|
733 |
*/
|
734 |
static public function pagination( $query ) {
|
735 |
+
$total_pages = $query->max_num_pages;
|
736 |
$permalink_structure = get_option( 'permalink_structure' );
|
737 |
+
$paged = self::get_paged();
|
738 |
+
$base = html_entity_decode( get_pagenum_link() );
|
739 |
+
$add_args = false;
|
740 |
|
741 |
if ( $total_pages > 1 ) {
|
742 |
|
744 |
$current_page = 1;
|
745 |
}
|
746 |
|
747 |
+
$base = self::build_base_url( $permalink_structure, $base );
|
748 |
$format = self::paged_format( $permalink_structure, $base );
|
749 |
|
750 |
// Flag if it's a first posts module in an archive page.
|
758 |
}
|
759 |
|
760 |
echo paginate_links(array(
|
761 |
+
'base' => $base . '%_%',
|
762 |
'format' => $format,
|
763 |
'current' => $current_page,
|
764 |
+
'total' => $total_pages,
|
765 |
+
'type' => 'list',
|
766 |
'add_args' => $add_args,
|
767 |
));
|
768 |
}
|
778 |
*/
|
779 |
static public function filter_paginate_links( $link ) {
|
780 |
$permalink_structure = get_option( 'permalink_structure' );
|
781 |
+
$base = html_entity_decode( get_pagenum_link() );
|
782 |
+
$link_params = wp_parse_url( $link, PHP_URL_QUERY );
|
783 |
|
784 |
if ( empty( $permalink_structure ) && strrpos( $base, 'paged-' ) ) {
|
785 |
|
789 |
$current_paged_args = array_values( preg_grep( '/^paged-(\d+)/', array_keys( $base_args ) ) );
|
790 |
|
791 |
if ( ! empty( $current_paged_args ) ) {
|
792 |
+
$current_flpaged = $current_paged_args[0];
|
793 |
$current_paged_param = $current_flpaged . '=' . $base_args[ $current_flpaged ];
|
794 |
|
795 |
+
$link_params = str_replace( $current_paged_param, '', $link_params );
|
796 |
wp_parse_str( $link_params, $link_args );
|
797 |
|
798 |
$link = strtok( $link, '?' );
|
864 |
}
|
865 |
|
866 |
if ( ! empty( $permalink_structure ) ) {
|
867 |
+
$format = substr( $base, -1 ) != '/' ? '/' : '';
|
868 |
$format .= $page_prefix . '/';
|
869 |
$format .= '%#%';
|
870 |
$format .= substr( $permalink_structure, -1 ) == '/' ? '/' : '';
|
871 |
} elseif ( empty( $permalink_structure ) || is_search() ) {
|
872 |
$parse_url = wp_parse_url( $base, PHP_URL_QUERY );
|
873 |
+
$format = empty( $parse_url ) ? '?' : '&';
|
874 |
+
$format .= $page_prefix . '=%#%';
|
875 |
}
|
876 |
|
877 |
return $format;
|
905 |
|
906 |
if ( $paged_matches ) {
|
907 |
self::$custom_paged_data = array(
|
908 |
+
'parent_page' => $matches[1],
|
909 |
+
'current_page' => $matches[2],
|
910 |
+
'current_loop' => $matches[3],
|
911 |
+
'paged' => $matches[4],
|
912 |
);
|
913 |
}
|
914 |
|
949 |
|
950 |
// In case the site is using default permalink structure and it has multiple paginations.
|
951 |
$permalink_structure = get_option( 'permalink_structure' );
|
952 |
+
$base = html_entity_decode( get_pagenum_link() );
|
953 |
|
954 |
if ( is_numeric( $flpaged ) && self::is_paginated_loop() ) {
|
955 |
return $flpaged;
|
956 |
} elseif ( empty( $permalink_structure ) && strrpos( $base, 'paged-' ) && self::$loop_counter > 1 ) {
|
957 |
|
958 |
+
$flpaged = 0;
|
959 |
$url_parts = wp_parse_url( $base, PHP_URL_QUERY );
|
960 |
wp_parse_str( $url_parts, $url_params );
|
961 |
|
1009 |
*/
|
1010 |
static public function post_types() {
|
1011 |
$post_types = get_post_types(array(
|
1012 |
+
'public' => true,
|
1013 |
+
'show_ui' => true,
|
1014 |
), 'objects');
|
1015 |
|
1016 |
unset( $post_types['attachment'] );
|
1029 |
*/
|
1030 |
static public function taxonomies( $post_type ) {
|
1031 |
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
|
1032 |
+
$data = array();
|
1033 |
|
1034 |
foreach ( $taxonomies as $tax_slug => $tax ) {
|
1035 |
|
classes/class-fl-builder-model.php
CHANGED
@@ -16,15 +16,15 @@ final class FLBuilderModel {
|
|
16 |
* @var array $row_layouts
|
17 |
*/
|
18 |
static public $row_layouts = array(
|
19 |
-
'1-col'
|
20 |
-
'2-cols'
|
21 |
-
'3-cols'
|
22 |
-
'4-cols'
|
23 |
-
'5-cols'
|
24 |
-
'6-cols'
|
25 |
-
'left-sidebar'
|
26 |
-
'right-sidebar'
|
27 |
-
'left-right-sidebar'
|
28 |
);
|
29 |
|
30 |
/**
|
@@ -175,23 +175,23 @@ final class FLBuilderModel {
|
|
175 |
*/
|
176 |
static public function init() {
|
177 |
/* Admin AJAX */
|
178 |
-
add_action( 'wp_ajax_fl_builder_disable',
|
179 |
-
add_action( 'wp_ajax_fl_builder_duplicate_wpml_layout',
|
180 |
|
181 |
/* Actions */
|
182 |
-
add_action( 'init',
|
183 |
-
add_action( 'init',
|
184 |
-
add_action( 'before_delete_post',
|
185 |
-
add_action( 'save_post',
|
186 |
-
add_action( 'save_post',
|
187 |
-
add_action( 'wp_restore_post_revision',
|
188 |
-
add_action( 'fl_builder_after_save_layout',
|
189 |
-
add_action( 'fl_builder_after_save_user_template',
|
190 |
|
191 |
/* Filters */
|
192 |
-
add_filter( 'heartbeat_received',
|
193 |
-
add_filter( 'fl_builder_register_settings_form',
|
194 |
-
add_filter( 'wp_revisions_to_keep',
|
195 |
|
196 |
/* Core Templates */
|
197 |
self::register_core_templates();
|
@@ -281,7 +281,7 @@ final class FLBuilderModel {
|
|
281 |
$_POST['fl_builder_data']['node_settings'] = FLBuilderUtils::modsec_fix_decode( $_POST['fl_builder_data']['node_settings'] );
|
282 |
}
|
283 |
|
284 |
-
$data
|
285 |
|
286 |
foreach ( $data as $key => $val ) {
|
287 |
self::$post_data[ $key ] = $val;
|
@@ -306,9 +306,9 @@ final class FLBuilderModel {
|
|
306 |
* @return void
|
307 |
*/
|
308 |
static public function update_post_data( $key, $value ) {
|
309 |
-
$post_data
|
310 |
$post_data[ $key ] = $value;
|
311 |
-
self::$post_data
|
312 |
}
|
313 |
|
314 |
/**
|
@@ -461,9 +461,9 @@ final class FLBuilderModel {
|
|
461 |
|
462 |
if ( is_singular() && isset( $wp_the_query->post ) ) {
|
463 |
|
464 |
-
$post
|
465 |
$post_types = self::get_post_types();
|
466 |
-
$user_can
|
467 |
$user_access = FLBuilderUserAccess::current_user_can( 'builder_access' );
|
468 |
|
469 |
if ( in_array( $post->post_type, $post_types ) && $user_can && $user_access ) {
|
@@ -515,7 +515,7 @@ final class FLBuilderModel {
|
|
515 |
return true;
|
516 |
} else {
|
517 |
$post_types = self::get_post_types();
|
518 |
-
$post
|
519 |
|
520 |
if ( $post && in_array( $post->post_type, $post_types ) ) {
|
521 |
return get_post_meta( $post->ID, '_fl_builder_enabled', true );
|
@@ -546,7 +546,7 @@ final class FLBuilderModel {
|
|
546 |
} elseif ( is_customize_preview() ) {
|
547 |
self::$active = false;
|
548 |
} elseif ( self::is_post_editable() && ! is_admin() && ! post_password_required() ) {
|
549 |
-
$post_data
|
550 |
self::$active = isset( $_GET['fl_builder'] ) || isset( $post_data['fl_builder'] );
|
551 |
}
|
552 |
|
@@ -573,8 +573,8 @@ final class FLBuilderModel {
|
|
573 |
static public function is_new_user() {
|
574 |
if ( self::is_builder_active() ) {
|
575 |
|
576 |
-
$current_user
|
577 |
-
$launched
|
578 |
|
579 |
if ( empty( $launched ) ) {
|
580 |
update_user_meta( $current_user->ID, '_fl_builder_launched', 1 );
|
@@ -629,18 +629,18 @@ final class FLBuilderModel {
|
|
629 |
|
630 |
if ( self::is_post_editable() && is_object( $wp_the_query->post ) ) {
|
631 |
|
632 |
-
$post
|
633 |
-
$published
|
634 |
-
$draft
|
635 |
-
$content
|
636 |
|
637 |
// Migrate existing post content to the builder?
|
638 |
if ( empty( $published ) && empty( $draft ) && ! empty( $content ) ) {
|
639 |
|
640 |
-
$row
|
641 |
-
$cols
|
642 |
-
$col
|
643 |
-
$settings
|
644 |
$settings->text = $content;
|
645 |
|
646 |
self::add_module( 'rich-text', $settings, $col->node );
|
@@ -656,7 +656,10 @@ final class FLBuilderModel {
|
|
656 |
require_once ABSPATH . 'wp-admin/includes/post.php';
|
657 |
wp_set_post_lock( $post->ID );
|
658 |
|
659 |
-
|
|
|
|
|
|
|
660 |
do_action( 'fl_builder_editing_enabled' );
|
661 |
}
|
662 |
}
|
@@ -684,8 +687,8 @@ final class FLBuilderModel {
|
|
684 |
|
685 |
// Build the paths.
|
686 |
$dir_info = array(
|
687 |
-
'path'
|
688 |
-
'url'
|
689 |
);
|
690 |
|
691 |
// Create the upload dir if it doesn't exist.
|
@@ -716,7 +719,7 @@ final class FLBuilderModel {
|
|
716 |
*/
|
717 |
static public function get_cache_dir( $name = 'cache' ) {
|
718 |
$upload_info = self::get_upload_dir();
|
719 |
-
$allowed
|
720 |
|
721 |
// Make sure the dir name is allowed.
|
722 |
if ( ! in_array( $name, $allowed ) ) {
|
@@ -725,8 +728,8 @@ final class FLBuilderModel {
|
|
725 |
|
726 |
// Build the paths.
|
727 |
$dir_info = array(
|
728 |
-
'path'
|
729 |
-
'url'
|
730 |
);
|
731 |
|
732 |
// Create the cache dir if it doesn't exist.
|
@@ -757,7 +760,7 @@ final class FLBuilderModel {
|
|
757 |
*/
|
758 |
static public function get_asset_version() {
|
759 |
$post_id = self::get_post_id();
|
760 |
-
$active
|
761 |
$preview = self::is_builder_draft_preview();
|
762 |
|
763 |
if ( $active || $preview ) {
|
@@ -790,13 +793,13 @@ final class FLBuilderModel {
|
|
790 |
}
|
791 |
|
792 |
$info = array(
|
793 |
-
'css'
|
794 |
'css_url' => $cache_dir['url'] . $post_id . $suffix . '.css',
|
795 |
-
'css_partial'
|
796 |
'css_partial_url' => $cache_dir['url'] . $post_id . $suffix . '-partial.css',
|
797 |
-
'js'
|
798 |
'js_url' => $cache_dir['url'] . $post_id . $suffix . '.js',
|
799 |
-
'js_partial'
|
800 |
'js_partial_url' => $cache_dir['url'] . $post_id . $suffix . '-partial.js',
|
801 |
);
|
802 |
|
@@ -905,9 +908,9 @@ final class FLBuilderModel {
|
|
905 |
* @return void
|
906 |
*/
|
907 |
static public function delete_asset_cache_for_all_posts() {
|
908 |
-
$cache_dir
|
909 |
-
$css
|
910 |
-
$js
|
911 |
|
912 |
if ( is_array( $css ) ) {
|
913 |
array_map( array( fl_builder_filesystem(), 'unlink' ), $css );
|
@@ -955,7 +958,7 @@ final class FLBuilderModel {
|
|
955 |
// Replace the old node ids.
|
956 |
foreach ( $data as $node_id => $node ) {
|
957 |
|
958 |
-
$nodes[ $map[ $node_id ] ]
|
959 |
$nodes[ $map[ $node_id ] ]->node = $map[ $node_id ];
|
960 |
|
961 |
if ( ! empty( $node->parent ) && isset( $map[ $node->parent ] ) ) {
|
@@ -1089,11 +1092,11 @@ final class FLBuilderModel {
|
|
1089 |
|
1090 |
// Helper array of parent types and their categories for each node type
|
1091 |
$parent_types = array(
|
1092 |
-
'module'
|
1093 |
'type' => 'column',
|
1094 |
'category' => 'columns',
|
1095 |
),
|
1096 |
-
'column'
|
1097 |
'type' => 'column-group',
|
1098 |
'category' => 'groups',
|
1099 |
),
|
@@ -1237,7 +1240,7 @@ final class FLBuilderModel {
|
|
1237 |
*/
|
1238 |
static public function get_categorized_nodes() {
|
1239 |
$nodes = array(
|
1240 |
-
'rows'
|
1241 |
'groups' => array(),
|
1242 |
'columns' => array(),
|
1243 |
'modules' => array(),
|
@@ -1249,7 +1252,7 @@ final class FLBuilderModel {
|
|
1249 |
$root_col = self::get_node_template_root( 'column' );
|
1250 |
|
1251 |
$nodes['columns'][ $root_col->node ] = $root_col;
|
1252 |
-
$col_children
|
1253 |
|
1254 |
foreach ( $col_children as $col_child ) {
|
1255 |
|
@@ -1263,12 +1266,12 @@ final class FLBuilderModel {
|
|
1263 |
} elseif ( 'column-group' == $col_child->type ) {
|
1264 |
|
1265 |
$nodes['groups'][ $col_child->node ] = $col_child;
|
1266 |
-
$group_cols
|
1267 |
|
1268 |
foreach ( $group_cols as $group_col ) {
|
1269 |
|
1270 |
$nodes['columns'][ $group_col->node ] = $group_col;
|
1271 |
-
$modules
|
1272 |
|
1273 |
foreach ( $modules as $module ) {
|
1274 |
$nodes['modules'][ $module->node ] = $module;
|
@@ -1282,17 +1285,17 @@ final class FLBuilderModel {
|
|
1282 |
foreach ( $rows as $row ) {
|
1283 |
|
1284 |
$nodes['rows'][ $row->node ] = $row;
|
1285 |
-
$groups
|
1286 |
|
1287 |
foreach ( $groups as $group ) {
|
1288 |
|
1289 |
$nodes['groups'][ $group->node ] = $group;
|
1290 |
-
$cols
|
1291 |
|
1292 |
foreach ( $cols as $col ) {
|
1293 |
|
1294 |
$nodes['columns'][ $col->node ] = $col;
|
1295 |
-
$col_children
|
1296 |
|
1297 |
foreach ( $col_children as $col_child ) {
|
1298 |
|
@@ -1306,12 +1309,12 @@ final class FLBuilderModel {
|
|
1306 |
} elseif ( 'column-group' == $col_child->type ) {
|
1307 |
|
1308 |
$nodes['groups'][ $col_child->node ] = $col_child;
|
1309 |
-
$group_cols
|
1310 |
|
1311 |
foreach ( $group_cols as $group_col ) {
|
1312 |
|
1313 |
$nodes['columns'][ $group_col->node ] = $group_col;
|
1314 |
-
$modules
|
1315 |
|
1316 |
foreach ( $modules as $module ) {
|
1317 |
$nodes['modules'][ $module->node ] = $module;
|
@@ -1337,13 +1340,13 @@ final class FLBuilderModel {
|
|
1337 |
* @return object
|
1338 |
*/
|
1339 |
static public function get_node_settings( $node, $filter = true ) {
|
1340 |
-
$node
|
1341 |
$post_data = self::get_post_data();
|
1342 |
|
1343 |
// Get the node settings for a node template's root node?
|
1344 |
if ( self::is_node_template_root( $node ) && ! self::is_post_node_template() ) {
|
1345 |
$template_post_id = self::get_node_template_post_id( $node->template_id );
|
1346 |
-
$template_data
|
1347 |
|
1348 |
// Fallback to draft data if we don't have published data.
|
1349 |
if ( ! isset( $template_data[ $node->template_node_id ] ) ) {
|
@@ -1352,7 +1355,7 @@ final class FLBuilderModel {
|
|
1352 |
|
1353 |
// Set the node settings to the template node settings.
|
1354 |
if ( isset( $template_data[ $node->template_node_id ] ) ) {
|
1355 |
-
$template_node
|
1356 |
$template_settings = clone $template_node->settings;
|
1357 |
|
1358 |
if ( 'column' == $node->type ) {
|
@@ -1586,10 +1589,10 @@ final class FLBuilderModel {
|
|
1586 |
*/
|
1587 |
static public function call_module_delete( $node ) {
|
1588 |
if ( 'module' == $node->type && isset( self::$modules[ $node->settings->type ] ) ) {
|
1589 |
-
$class
|
1590 |
-
$instance
|
1591 |
-
$instance->node
|
1592 |
-
$instance->parent
|
1593 |
$instance->settings = $node->settings;
|
1594 |
$instance->delete();
|
1595 |
$instance->remove();
|
@@ -1606,11 +1609,11 @@ final class FLBuilderModel {
|
|
1606 |
* @return void
|
1607 |
*/
|
1608 |
static public function reorder_node( $node_id = null, $position = 0 ) {
|
1609 |
-
$data
|
1610 |
-
$node
|
1611 |
-
$type
|
1612 |
-
$nodes
|
1613 |
-
$new_pos
|
1614 |
|
1615 |
// Make sure node positions start at zero.
|
1616 |
foreach ( $nodes as $node ) {
|
@@ -1619,9 +1622,9 @@ final class FLBuilderModel {
|
|
1619 |
}
|
1620 |
|
1621 |
// Get the node and remove it from the array.
|
1622 |
-
$node
|
1623 |
-
$removed
|
1624 |
-
$new_pos
|
1625 |
|
1626 |
// Reposition it in the array.
|
1627 |
array_splice( $nodes, $position, 0, $removed );
|
@@ -1646,11 +1649,11 @@ final class FLBuilderModel {
|
|
1646 |
* @return void
|
1647 |
*/
|
1648 |
static public function move_node( $node_id = null, $new_parent_id = null, $position = 0 ) {
|
1649 |
-
$data
|
1650 |
-
$new_parent
|
1651 |
-
$node
|
1652 |
-
$siblings
|
1653 |
-
$sibling_pos
|
1654 |
|
1655 |
// Set the node's new parent.
|
1656 |
$data[ $node_id ]->parent = $new_parent->node;
|
@@ -1681,17 +1684,17 @@ final class FLBuilderModel {
|
|
1681 |
* @return object The new row object.
|
1682 |
*/
|
1683 |
static public function add_row( $cols = '1-col', $position = false, $module = null ) {
|
1684 |
-
$data
|
1685 |
-
$settings
|
1686 |
-
$row_node_id
|
1687 |
|
1688 |
// Add the row.
|
1689 |
-
$data[ $row_node_id ]
|
1690 |
-
$data[ $row_node_id ]->node
|
1691 |
-
$data[ $row_node_id ]->type
|
1692 |
-
$data[ $row_node_id ]->parent
|
1693 |
-
$data[ $row_node_id ]->position
|
1694 |
-
$data[ $row_node_id ]->settings
|
1695 |
|
1696 |
// Update the layout data.
|
1697 |
self::update_layout_data( $data );
|
@@ -1707,7 +1710,7 @@ final class FLBuilderModel {
|
|
1707 |
// Move an existing module to the row.
|
1708 |
if ( $module ) {
|
1709 |
$cols = self::get_nodes( 'column', $group->node );
|
1710 |
-
$col
|
1711 |
self::move_node( $module, $col->node, 0 );
|
1712 |
}
|
1713 |
|
@@ -1725,17 +1728,17 @@ final class FLBuilderModel {
|
|
1725 |
* @return void
|
1726 |
*/
|
1727 |
static public function copy_row( $node_id = null, $settings = null, $settings_id = null ) {
|
1728 |
-
$layout_data
|
1729 |
-
$row
|
1730 |
-
$new_row_id
|
1731 |
-
$col_groups
|
1732 |
-
$new_nodes
|
1733 |
-
$template_cols
|
1734 |
|
1735 |
// Add the new row.
|
1736 |
-
$layout_data[ $new_row_id ]
|
1737 |
-
$layout_data[ $new_row_id ]->settings
|
1738 |
-
$layout_data[ $new_row_id ]->node
|
1739 |
|
1740 |
// Unset row template data.
|
1741 |
if ( isset( $layout_data[ $new_row_id ]->template_id ) ) {
|
@@ -1747,14 +1750,14 @@ final class FLBuilderModel {
|
|
1747 |
// Get the new child nodes.
|
1748 |
foreach ( $col_groups as $col_group ) {
|
1749 |
|
1750 |
-
$new_nodes[ $col_group->node ]
|
1751 |
-
$cols
|
1752 |
|
1753 |
foreach ( $cols as $col ) {
|
1754 |
|
1755 |
-
$new_nodes[ $col->node ]
|
1756 |
-
$new_nodes[ $col->node ]->settings
|
1757 |
-
$nodes
|
1758 |
|
1759 |
foreach ( $nodes as $node ) {
|
1760 |
|
@@ -1768,12 +1771,12 @@ final class FLBuilderModel {
|
|
1768 |
|
1769 |
foreach ( $nested_cols as $nested_col ) {
|
1770 |
|
1771 |
-
$new_nodes[ $nested_col->node ]
|
1772 |
$new_nodes[ $nested_col->node ]->settings = clone $nested_col->settings;
|
1773 |
-
$modules
|
1774 |
|
1775 |
foreach ( $modules as $module ) {
|
1776 |
-
$new_nodes[ $module->node ]
|
1777 |
$new_nodes[ $module->node ]->settings = self::clone_module_settings( $module->settings );
|
1778 |
}
|
1779 |
}
|
@@ -1866,9 +1869,9 @@ final class FLBuilderModel {
|
|
1866 |
$mp4 = FLBuilderPhoto::get_attachment_data( $new_settings->bg_video );
|
1867 |
|
1868 |
if ( $mp4 ) {
|
1869 |
-
$parts
|
1870 |
-
$mp4->extension
|
1871 |
-
$new_settings->bg_video_data
|
1872 |
$new_settings->bg_video_data->fallback = $fallback;
|
1873 |
}
|
1874 |
|
@@ -1876,9 +1879,9 @@ final class FLBuilderModel {
|
|
1876 |
$webm = FLBuilderPhoto::get_attachment_data( $new_settings->bg_video_webm );
|
1877 |
|
1878 |
if ( $webm ) {
|
1879 |
-
$parts
|
1880 |
-
$webm->extension
|
1881 |
-
$new_settings->bg_video_webm_data
|
1882 |
$new_settings->bg_video_webm_data->fallback = $fallback;
|
1883 |
}
|
1884 |
}
|
@@ -1893,11 +1896,11 @@ final class FLBuilderModel {
|
|
1893 |
}
|
1894 |
|
1895 |
// Hijack the slideshow module to get WordPress photo data.
|
1896 |
-
$ss
|
1897 |
-
$ss->settings
|
1898 |
-
$ss->settings->photos
|
1899 |
-
$ss->settings->photo_data
|
1900 |
-
$new_settings->ss_photo_data
|
1901 |
}
|
1902 |
|
1903 |
return $new_settings;
|
@@ -1917,7 +1920,7 @@ final class FLBuilderModel {
|
|
1917 |
if ( 'video' == $row->settings->bg_type ) {
|
1918 |
|
1919 |
if ( isset( $row->settings->bg_video_data ) ) {
|
1920 |
-
$data
|
1921 |
$data['mp4'] = $row->settings->bg_video_data;
|
1922 |
}
|
1923 |
if ( isset( $row->settings->bg_video_webm_data ) ) {
|
@@ -1954,12 +1957,12 @@ final class FLBuilderModel {
|
|
1954 |
}
|
1955 |
|
1956 |
// Hijack the slideshow module to get the source.
|
1957 |
-
$ss
|
1958 |
-
$ss->settings
|
1959 |
-
$ss->settings->source
|
1960 |
-
$ss->settings->photos
|
1961 |
-
$ss->settings->feed_url
|
1962 |
-
$ss->settings->photo_data
|
1963 |
|
1964 |
// Return the slideshow source.
|
1965 |
return $ss->get_source();
|
@@ -1974,10 +1977,10 @@ final class FLBuilderModel {
|
|
1974 |
* @return void
|
1975 |
*/
|
1976 |
static public function resize_row_content( $node_id, $width ) {
|
1977 |
-
$data
|
1978 |
-
$row
|
1979 |
$row->settings->max_content_width = $width;
|
1980 |
-
$data[ $node_id ]
|
1981 |
self::update_layout_data( $data );
|
1982 |
}
|
1983 |
|
@@ -1992,22 +1995,22 @@ final class FLBuilderModel {
|
|
1992 |
* @return object The new column group object.
|
1993 |
*/
|
1994 |
static public function add_col_group( $node_id = null, $cols = '1-col', $position = false, $module = null ) {
|
1995 |
-
$data
|
1996 |
-
$group_node_id
|
1997 |
-
$parent
|
1998 |
-
$old_group
|
1999 |
|
2000 |
// Add the column group.
|
2001 |
-
$data[ $group_node_id ]
|
2002 |
-
$data[ $group_node_id ]->node
|
2003 |
-
$data[ $group_node_id ]->type
|
2004 |
-
$data[ $group_node_id ]->parent
|
2005 |
-
$data[ $group_node_id ]->position
|
2006 |
-
$data[ $group_node_id ]->settings
|
2007 |
|
2008 |
// Add node template data.
|
2009 |
if ( self::is_node_global( $parent ) ) {
|
2010 |
-
$data[ $group_node_id ]->template_id
|
2011 |
$data[ $group_node_id ]->template_node_id = $group_node_id;
|
2012 |
}
|
2013 |
|
@@ -2016,17 +2019,17 @@ final class FLBuilderModel {
|
|
2016 |
|
2017 |
for ( $i = 0; $i < count( self::$row_layouts[ $cols ] ); $i++ ) {
|
2018 |
|
2019 |
-
$col_node_id
|
2020 |
-
$data[ $col_node_id ]
|
2021 |
-
$data[ $col_node_id ]->node
|
2022 |
-
$data[ $col_node_id ]->type
|
2023 |
-
$data[ $col_node_id ]->parent
|
2024 |
-
$data[ $col_node_id ]->position
|
2025 |
-
$data[ $col_node_id ]->settings
|
2026 |
$data[ $col_node_id ]->settings->size = self::$row_layouts[ $cols ][ $i ];
|
2027 |
|
2028 |
if ( self::is_node_global( $parent ) ) {
|
2029 |
-
$data[ $col_node_id ]->template_id
|
2030 |
$data[ $col_node_id ]->template_node_id = $col_node_id;
|
2031 |
}
|
2032 |
}
|
@@ -2042,7 +2045,7 @@ final class FLBuilderModel {
|
|
2042 |
$data[ $cols ]->settings->size = 100;
|
2043 |
|
2044 |
if ( self::is_node_global( $parent ) ) {
|
2045 |
-
$data[ $cols ]->template_id
|
2046 |
$data[ $cols ]->template_node_id = $data[ $cols ]->node;
|
2047 |
}
|
2048 |
|
@@ -2076,7 +2079,7 @@ final class FLBuilderModel {
|
|
2076 |
// Move an existing module to the group.
|
2077 |
if ( $module ) {
|
2078 |
$cols = self::get_nodes( 'column', $group_node_id );
|
2079 |
-
$col
|
2080 |
self::move_node( $module, $col->node, 0 );
|
2081 |
}
|
2082 |
|
@@ -2104,16 +2107,16 @@ final class FLBuilderModel {
|
|
2104 |
$new_settings->size = self::resize_col( $col->node, $new_settings->size );
|
2105 |
|
2106 |
// Update other sibling vars as needed.
|
2107 |
-
$equal_height
|
2108 |
-
$content_alignment
|
2109 |
-
$responsive_order
|
2110 |
|
2111 |
// Adjust sibling equal height?
|
2112 |
if ( $col->settings->equal_height != $new_settings->equal_height ) {
|
2113 |
$equal_height = $new_settings->equal_height;
|
2114 |
}
|
2115 |
|
2116 |
-
|
2117 |
if ( $col->settings->content_alignment != $new_settings->content_alignment ) {
|
2118 |
$content_alignment = $new_settings->content_alignment;
|
2119 |
}
|
@@ -2241,16 +2244,16 @@ final class FLBuilderModel {
|
|
2241 |
* @return int The new width
|
2242 |
*/
|
2243 |
static public function resize_col( $node_id = null, $new_width = 100 ) {
|
2244 |
-
$data
|
2245 |
-
$col
|
2246 |
-
$group
|
2247 |
-
$cols
|
2248 |
-
$pos
|
2249 |
-
$siblings
|
2250 |
$siblings_width = 0;
|
2251 |
-
$num_cols
|
2252 |
-
$min_width
|
2253 |
-
$max_width
|
2254 |
|
2255 |
// Don't resize if only one column or width isn't a number.
|
2256 |
if ( 1 == $num_cols || ! is_numeric( $new_width ) ) {
|
@@ -2279,8 +2282,8 @@ final class FLBuilderModel {
|
|
2279 |
continue;
|
2280 |
}
|
2281 |
|
2282 |
-
$siblings[]
|
2283 |
-
$max_width
|
2284 |
$siblings_width += $c->settings->size;
|
2285 |
}
|
2286 |
|
@@ -2345,10 +2348,10 @@ final class FLBuilderModel {
|
|
2345 |
return;
|
2346 |
}
|
2347 |
|
2348 |
-
$data
|
2349 |
-
$post_data
|
2350 |
-
$cols
|
2351 |
-
$width
|
2352 |
|
2353 |
foreach ( $cols as $col_id => $col ) {
|
2354 |
$data[ $col_id ]->settings->size = $width;
|
@@ -2406,13 +2409,13 @@ final class FLBuilderModel {
|
|
2406 |
* @return object
|
2407 |
*/
|
2408 |
static public function add_cols( $col_id, $insert = 'before', $type = '1-col', $nested = false, $module = null ) {
|
2409 |
-
$data
|
2410 |
-
$col
|
2411 |
-
$parent
|
2412 |
-
$cols
|
2413 |
$global = self::is_node_global( $parent );
|
2414 |
$num_new_cols = count( self::$row_layouts[ $type ] );
|
2415 |
-
$num_cols
|
2416 |
$max_cols = $nested ? 4 : 12;
|
2417 |
$reposition = false;
|
2418 |
$position = 0;
|
@@ -2444,18 +2447,18 @@ final class FLBuilderModel {
|
|
2444 |
// Add the new columns.
|
2445 |
for ( $i = 0; $i < $num_new_cols; $i++ ) {
|
2446 |
|
2447 |
-
$new_col_id
|
2448 |
-
$data[ $new_col_id ]
|
2449 |
-
$data[ $new_col_id ]->node
|
2450 |
-
$data[ $new_col_id ]->type
|
2451 |
-
$data[ $new_col_id ]->parent
|
2452 |
-
$data[ $new_col_id ]->position
|
2453 |
-
$data[ $new_col_id ]->settings
|
2454 |
-
$data[ $new_col_id ]->settings->size
|
2455 |
|
2456 |
// Add node template data.
|
2457 |
if ( $global ) {
|
2458 |
-
$data[ $new_col_id ]->template_id
|
2459 |
$data[ $new_col_id ]->template_node_id = $new_col_id;
|
2460 |
}
|
2461 |
|
@@ -2506,19 +2509,19 @@ final class FLBuilderModel {
|
|
2506 |
* @return string|null The new parent ID or null if none exists.
|
2507 |
*/
|
2508 |
static public function add_col_parent( $parent_id = null, $position = null ) {
|
2509 |
-
$data
|
2510 |
-
$parent
|
2511 |
|
2512 |
if ( ! $parent ) {
|
2513 |
// Add a new row if we don't have a parent, but don't add column.
|
2514 |
-
$row
|
2515 |
$col_groups = self::get_nodes( 'column-group', $row->node );
|
2516 |
-
$col_group
|
2517 |
-
$parent_id
|
2518 |
} elseif ( 'row' == $parent->type ) {
|
2519 |
// Add a new column group if the parent is a row, but don't add column.
|
2520 |
-
$col_group
|
2521 |
-
$parent_id
|
2522 |
}
|
2523 |
|
2524 |
return $parent_id;
|
@@ -2534,7 +2537,7 @@ final class FLBuilderModel {
|
|
2534 |
*/
|
2535 |
static public function get_col_parent( $type, $column_id ) {
|
2536 |
$column = is_object( $column_id ) ? $column_id : self::get_node( $column_id );
|
2537 |
-
$nodes
|
2538 |
|
2539 |
foreach ( $nodes['groups'] as $group ) {
|
2540 |
|
@@ -2567,16 +2570,16 @@ final class FLBuilderModel {
|
|
2567 |
*/
|
2568 |
static public function copy_col( $node_id = null, $settings = null, $settings_id = null ) {
|
2569 |
$layout_data = self::get_layout_data();
|
2570 |
-
$col
|
2571 |
-
$new_col_id
|
2572 |
-
$nodes
|
2573 |
-
$parent
|
2574 |
-
$new_nodes
|
2575 |
|
2576 |
// Add the new column.
|
2577 |
-
$layout_data[ $new_col_id ]
|
2578 |
-
$layout_data[ $new_col_id ]->settings
|
2579 |
-
$layout_data[ $new_col_id ]->node
|
2580 |
|
2581 |
// Unset column template data.
|
2582 |
if ( isset( $layout_data[ $new_col_id ]->template_id ) ) {
|
@@ -2588,7 +2591,7 @@ final class FLBuilderModel {
|
|
2588 |
|
2589 |
// Check if parent is a global node.
|
2590 |
if ( self::is_node_global( $parent ) ) {
|
2591 |
-
$layout_data[ $new_col_id ]->template_id
|
2592 |
$layout_data[ $new_col_id ]->template_node_id = $new_col_id;
|
2593 |
} else {
|
2594 |
unset( $layout_data[ $new_col_id ]->template_id );
|
@@ -2611,12 +2614,12 @@ final class FLBuilderModel {
|
|
2611 |
|
2612 |
foreach ( $nested_cols as $nested_col ) {
|
2613 |
|
2614 |
-
$new_nodes[ $nested_col->node ]
|
2615 |
$new_nodes[ $nested_col->node ]->settings = clone $nested_col->settings;
|
2616 |
-
$modules
|
2617 |
|
2618 |
foreach ( $modules as $module ) {
|
2619 |
-
$new_nodes[ $module->node ]
|
2620 |
$new_nodes[ $module->node ]->settings = self::clone_module_settings( $module->settings );
|
2621 |
}
|
2622 |
}
|
@@ -2643,7 +2646,7 @@ final class FLBuilderModel {
|
|
2643 |
if ( isset( $new_nodes[ $child_node_id ]->template_id ) ) {
|
2644 |
// Check if the column is global.
|
2645 |
if ( isset( $layout_data[ $new_col_id ]->template_node_id ) ) {
|
2646 |
-
$new_nodes[ $child_node_id ]->template_id
|
2647 |
$new_nodes[ $child_node_id ]->template_node_id = $child_node_id;
|
2648 |
} else {
|
2649 |
unset( $new_nodes[ $child_node_id ]->template_id );
|
@@ -2688,7 +2691,11 @@ final class FLBuilderModel {
|
|
2688 |
*/
|
2689 |
static public function load_modules() {
|
2690 |
$paths = glob( FL_BUILDER_DIR . 'modules/*' );
|
2691 |
-
|
|
|
|
|
|
|
|
|
2692 |
$module_path = '';
|
2693 |
|
2694 |
// Make sure we have an array.
|
@@ -2708,10 +2715,10 @@ final class FLBuilderModel {
|
|
2708 |
$slug = basename( $path );
|
2709 |
|
2710 |
// Paths to check.
|
2711 |
-
$module_path
|
2712 |
-
$child_path
|
2713 |
-
$theme_path
|
2714 |
-
$builder_path
|
2715 |
|
2716 |
// Check for the module class in a child theme.
|
2717 |
if ( is_child_theme() && file_exists( $child_path ) ) {
|
@@ -2722,7 +2729,10 @@ final class FLBuilderModel {
|
|
2722 |
require_once $builder_path;
|
2723 |
}
|
2724 |
}
|
2725 |
-
|
|
|
|
|
|
|
2726 |
do_action( 'fl_builder_register_extensions' );
|
2727 |
}
|
2728 |
|
@@ -2761,7 +2771,7 @@ final class FLBuilderModel {
|
|
2761 |
* @see fl_builder_register_settings_form
|
2762 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
2763 |
*/
|
2764 |
-
self::$modules[ $instance->slug ]->form
|
2765 |
self::$modules[ $instance->slug ]->form['advanced'] = self::$settings_forms['module_advanced'];
|
2766 |
}
|
2767 |
}
|
@@ -2780,17 +2790,21 @@ final class FLBuilderModel {
|
|
2780 |
_doing_it_wrong( __CLASS__ . '::register_module_alias', sprintf( _x( 'The module alias %s already exists! Please namespace your module aliases to ensure compatibility with Beaver Builder.', '%s stands for the module alias key', 'fl-builder' ), $alias ), '1.10' );
|
2781 |
return;
|
2782 |
}
|
|
|
|
|
|
|
2783 |
|
2784 |
-
$
|
2785 |
-
$instance
|
2786 |
-
$instance->
|
2787 |
-
$instance->
|
2788 |
-
$instance->
|
2789 |
-
$instance->
|
2790 |
-
$instance->
|
2791 |
-
$instance->
|
2792 |
-
$instance->
|
2793 |
-
$instance->
|
|
|
2794 |
|
2795 |
self::$module_aliases[ $alias ] = $instance;
|
2796 |
}
|
@@ -2860,7 +2874,7 @@ final class FLBuilderModel {
|
|
2860 |
$setting = self::get_default_enabled_modules();
|
2861 |
} elseif ( in_array( 'all', $setting ) ) {
|
2862 |
// Redefine $setting in case new modules have been installed since the last save.
|
2863 |
-
$setting
|
2864 |
$setting[] = 'all';
|
2865 |
}
|
2866 |
|
@@ -2903,6 +2917,20 @@ final class FLBuilderModel {
|
|
2903 |
}
|
2904 |
}
|
2905 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2906 |
// Add module template groups.
|
2907 |
if ( isset( $templates['groups'] ) ) {
|
2908 |
foreach ( $templates['groups'] as $slug => $data ) {
|
@@ -2936,14 +2964,14 @@ final class FLBuilderModel {
|
|
2936 |
}
|
2937 |
|
2938 |
// Build the default category arrays.
|
2939 |
-
$categories[ __( 'Basic', 'fl-builder' ) ]
|
2940 |
-
$categories[ __( 'Media', 'fl-builder' ) ]
|
2941 |
-
$categories[ __( 'Actions', 'fl-builder' ) ]
|
2942 |
-
$categories[ __( 'Layout', 'fl-builder' ) ]
|
2943 |
-
$categories[ __( 'Info', 'fl-builder' ) ]
|
2944 |
-
$categories[ __( 'Posts', 'fl-builder' ) ]
|
2945 |
$categories[ __( 'Advanced', 'fl-builder' ) ] = array();
|
2946 |
-
$categories[ __( 'Other', 'fl-builder' ) ]
|
2947 |
|
2948 |
return $categories;
|
2949 |
}
|
@@ -2956,11 +2984,11 @@ final class FLBuilderModel {
|
|
2956 |
* @return array
|
2957 |
*/
|
2958 |
static public function get_categorized_modules( $show_disabled = false ) {
|
2959 |
-
$enabled_modules
|
2960 |
-
$widgets
|
2961 |
-
$categories
|
2962 |
-
$other_key
|
2963 |
-
$widgets_key
|
2964 |
|
2965 |
// Build the categories array.
|
2966 |
foreach ( self::$modules as $module ) {
|
@@ -3023,9 +3051,9 @@ final class FLBuilderModel {
|
|
3023 |
*/
|
3024 |
static public function get_uncategorized_modules( $show_disabled = false ) {
|
3025 |
$enabled_modules = self::get_enabled_modules();
|
3026 |
-
$modules
|
3027 |
-
$aliases
|
3028 |
-
$widgets
|
3029 |
|
3030 |
foreach ( self::$modules as $module ) {
|
3031 |
|
@@ -3037,11 +3065,11 @@ final class FLBuilderModel {
|
|
3037 |
continue;
|
3038 |
}
|
3039 |
|
3040 |
-
$module
|
3041 |
-
$module->kind
|
3042 |
$module->isWidget = false; // @codingStandardsIgnoreLine
|
3043 |
-
$module->isAlias
|
3044 |
-
$module->group
|
3045 |
|
3046 |
if ( ! isset( $module->icon ) || '' == $module->icon ) {
|
3047 |
$module->icon = FLBuilderModule::get_default_icon();
|
@@ -3072,10 +3100,10 @@ final class FLBuilderModel {
|
|
3072 |
$categories[ $config->category ] = array();
|
3073 |
}
|
3074 |
|
3075 |
-
$config->kind
|
3076 |
$config->isWidget = false; // @codingStandardsIgnoreLine
|
3077 |
$config->isAlias = true; // @codingStandardsIgnoreLine
|
3078 |
-
$config->group
|
3079 |
|
3080 |
$modules[] = $config;
|
3081 |
}
|
@@ -3084,13 +3112,13 @@ final class FLBuilderModel {
|
|
3084 |
if ( in_array( 'widget', $enabled_modules ) ) {
|
3085 |
foreach ( $widgets as $widget ) {
|
3086 |
|
3087 |
-
$data
|
3088 |
-
$widget
|
3089 |
-
$data->id
|
3090 |
-
$data->name
|
3091 |
-
$data->class
|
3092 |
-
$data->category
|
3093 |
-
$data->kind
|
3094 |
$data->isWidget = true; // @codingStandardsIgnoreLine
|
3095 |
$data->isAlias = false; // @codingStandardsIgnoreLine
|
3096 |
$data->description = isset( $widget->widget_options['description'] ) ? $widget->widget_options['description'] : '';
|
@@ -3119,19 +3147,19 @@ final class FLBuilderModel {
|
|
3119 |
|
3120 |
if ( self::is_module_registered( $module->settings->type ) ) {
|
3121 |
|
3122 |
-
$class
|
3123 |
-
$instance
|
3124 |
-
$instance->node
|
3125 |
-
$instance->parent
|
3126 |
$instance->position = $module->position;
|
3127 |
$instance->settings = $module->settings;
|
3128 |
-
$instance->type
|
3129 |
-
$instance->form
|
3130 |
-
$instance->icon
|
3131 |
|
3132 |
if ( isset( $module->template_id ) ) {
|
3133 |
-
$instance->template_id
|
3134 |
-
$instance->template_node_id
|
3135 |
}
|
3136 |
if ( isset( $module->template_root_node ) ) {
|
3137 |
$instance->template_root_node = true;
|
@@ -3152,27 +3180,27 @@ final class FLBuilderModel {
|
|
3152 |
* @return array
|
3153 |
*/
|
3154 |
static public function get_modules( $col_id = null ) {
|
3155 |
-
$col
|
3156 |
-
$modules
|
3157 |
-
$instances
|
3158 |
-
$i
|
3159 |
|
3160 |
foreach ( $modules as $module ) {
|
3161 |
|
3162 |
if ( self::is_module_registered( $module->settings->type ) ) {
|
3163 |
|
3164 |
-
$class
|
3165 |
-
$instances[ $i ]
|
3166 |
-
$instances[ $i ]->node
|
3167 |
-
$instances[ $i ]->parent
|
3168 |
-
$instances[ $i ]->position
|
3169 |
-
$instances[ $i ]->settings
|
3170 |
-
$instances[ $i ]->type
|
3171 |
-
$instances[ $i ]->icon
|
3172 |
-
$instances[ $i ]->form
|
3173 |
|
3174 |
if ( isset( $module->template_id ) ) {
|
3175 |
-
$instances[ $i ]->template_id
|
3176 |
$instances[ $i ]->template_node_id = $module->template_node_id;
|
3177 |
}
|
3178 |
if ( isset( $module->template_root_node ) ) {
|
@@ -3207,30 +3235,30 @@ final class FLBuilderModel {
|
|
3207 |
* @return object The new module object.
|
3208 |
*/
|
3209 |
static public function add_module( $type = null, $settings = array(), $parent_id = null, $position = false ) {
|
3210 |
-
$data
|
3211 |
-
$parent
|
3212 |
-
$module_node_id
|
3213 |
-
$settings->type
|
3214 |
|
3215 |
// Run module update method.
|
3216 |
-
$class
|
3217 |
-
$instance
|
3218 |
-
$instance->node
|
3219 |
-
$instance->settings
|
3220 |
-
$settings
|
3221 |
|
3222 |
// Save the module.
|
3223 |
-
$data[ $module_node_id ]
|
3224 |
-
$data[ $module_node_id ]->node
|
3225 |
-
$data[ $module_node_id ]->type
|
3226 |
-
$data[ $module_node_id ]->parent
|
3227 |
-
$data[ $module_node_id ]->position
|
3228 |
-
$data[ $module_node_id ]->settings
|
3229 |
|
3230 |
// Add node template data.
|
3231 |
if ( self::is_node_global( $parent ) ) {
|
3232 |
-
$data[ $module_node_id ]->template_id
|
3233 |
-
$data[ $module_node_id ]->template_node_id
|
3234 |
}
|
3235 |
|
3236 |
// Update the layout data.
|
@@ -3259,22 +3287,22 @@ final class FLBuilderModel {
|
|
3259 |
|
3260 |
if ( ! $parent ) {
|
3261 |
// Add a new row if we don't have a parent.
|
3262 |
-
$row
|
3263 |
$col_groups = self::get_nodes( 'column-group', $row->node );
|
3264 |
-
$col_group
|
3265 |
-
$cols
|
3266 |
-
$parent
|
3267 |
-
$parent_id
|
3268 |
} elseif ( 'row' == $parent->type ) {
|
3269 |
// Add a new column group if the parent is a row.
|
3270 |
-
$col_group
|
3271 |
-
$cols
|
3272 |
-
$parent
|
3273 |
-
$parent_id
|
3274 |
} elseif ( 'column-group' == $parent->type ) {
|
3275 |
// Add a new column if the parent is a column group.
|
3276 |
-
$parent
|
3277 |
-
$parent_id
|
3278 |
}
|
3279 |
|
3280 |
return $parent_id;
|
@@ -3290,7 +3318,7 @@ final class FLBuilderModel {
|
|
3290 |
*/
|
3291 |
static public function get_module_parent( $type, $module_id ) {
|
3292 |
$module = is_object( $module_id ) ? $module_id : self::get_module( $module_id );
|
3293 |
-
$nodes
|
3294 |
|
3295 |
foreach ( $nodes['columns'] as $column ) {
|
3296 |
|
@@ -3334,14 +3362,14 @@ final class FLBuilderModel {
|
|
3334 |
* @return array $defaults Default settings for the module.
|
3335 |
*/
|
3336 |
static public function add_default_module( $parent_id = null, $type = null, $position = null, $defaults = null ) {
|
3337 |
-
$parent
|
3338 |
-
$settings
|
3339 |
$module_node_id = self::generate_node_id();
|
3340 |
|
3341 |
// Add a new parent if one is needed.
|
3342 |
if ( ! $parent || 'row' == $parent->type || 'column-group' == $parent->type ) {
|
3343 |
$parent_id = self::add_module_parent( $parent_id, $position );
|
3344 |
-
$parent
|
3345 |
$position = null;
|
3346 |
}
|
3347 |
|
@@ -3351,25 +3379,25 @@ final class FLBuilderModel {
|
|
3351 |
}
|
3352 |
|
3353 |
// Run module update method.
|
3354 |
-
$class
|
3355 |
-
$instance
|
3356 |
-
$instance->node
|
3357 |
-
$instance->settings
|
3358 |
-
$settings
|
3359 |
|
3360 |
// Save the module.
|
3361 |
-
$data
|
3362 |
-
$data[ $module_node_id ]
|
3363 |
-
$data[ $module_node_id ]->node
|
3364 |
-
$data[ $module_node_id ]->type
|
3365 |
-
$data[ $module_node_id ]->parent
|
3366 |
-
$data[ $module_node_id ]->position
|
3367 |
-
$data[ $module_node_id ]->settings
|
3368 |
|
3369 |
// Add node template data.
|
3370 |
if ( self::is_node_global( $parent ) ) {
|
3371 |
-
$data[ $module_node_id ]->template_id
|
3372 |
-
$data[ $module_node_id ]->template_node_id
|
3373 |
}
|
3374 |
|
3375 |
// Update the layout data.
|
@@ -3393,7 +3421,7 @@ final class FLBuilderModel {
|
|
3393 |
* @return object The new module object.
|
3394 |
*/
|
3395 |
static public function copy_module( $node_id = null, $settings = null ) {
|
3396 |
-
$module
|
3397 |
|
3398 |
if ( $settings ) {
|
3399 |
$module->settings = (object) array_merge( (array) $module->settings, (array) $settings );
|
@@ -3412,10 +3440,10 @@ final class FLBuilderModel {
|
|
3412 |
*/
|
3413 |
static public function process_module_settings( $module, $new_settings ) {
|
3414 |
// Get a new node instance to work with.
|
3415 |
-
$class
|
3416 |
-
$instance
|
3417 |
-
$instance->node
|
3418 |
-
$instance->parent
|
3419 |
$instance->settings = $module->settings;
|
3420 |
|
3421 |
// Run node delete to clear any cache.
|
@@ -3423,7 +3451,7 @@ final class FLBuilderModel {
|
|
3423 |
|
3424 |
// Run node update.
|
3425 |
$instance->settings = $new_settings;
|
3426 |
-
$new_settings
|
3427 |
|
3428 |
return $new_settings;
|
3429 |
}
|
@@ -3460,8 +3488,8 @@ final class FLBuilderModel {
|
|
3460 |
$defaults = new StdClass();
|
3461 |
|
3462 |
if ( isset( self::$modules[ $type ]->form ) ) {
|
3463 |
-
$defaults
|
3464 |
-
$defaults
|
3465 |
$defaults->type = $type;
|
3466 |
}
|
3467 |
} else {
|
@@ -3499,7 +3527,10 @@ final class FLBuilderModel {
|
|
3499 |
|
3500 |
$widgets = array();
|
3501 |
|
3502 |
-
|
|
|
|
|
|
|
3503 |
$exclude = apply_filters( 'fl_get_wp_widgets_exclude', array(
|
3504 |
'WP_Widget_Media_Audio',
|
3505 |
'WP_Widget_Media_Image',
|
@@ -3553,48 +3584,48 @@ final class FLBuilderModel {
|
|
3553 |
static public function get_column_groups() {
|
3554 |
$cols = array(
|
3555 |
array(
|
3556 |
-
'name'
|
3557 |
-
'id'
|
3558 |
'count' => 1,
|
3559 |
),
|
3560 |
array(
|
3561 |
-
'name'
|
3562 |
-
'id'
|
3563 |
'count' => 2,
|
3564 |
),
|
3565 |
array(
|
3566 |
-
'name'
|
3567 |
-
'id'
|
3568 |
'count' => 3,
|
3569 |
),
|
3570 |
array(
|
3571 |
-
'name'
|
3572 |
-
'id'
|
3573 |
'count' => 4,
|
3574 |
),
|
3575 |
array(
|
3576 |
-
'name'
|
3577 |
-
'id'
|
3578 |
'count' => 5,
|
3579 |
),
|
3580 |
array(
|
3581 |
-
'name'
|
3582 |
-
'id'
|
3583 |
'count' => 6,
|
3584 |
),
|
3585 |
array(
|
3586 |
-
'name'
|
3587 |
-
'id'
|
3588 |
'count' => 2,
|
3589 |
),
|
3590 |
array(
|
3591 |
-
'name'
|
3592 |
-
'id'
|
3593 |
'count' => 2,
|
3594 |
),
|
3595 |
array(
|
3596 |
-
'name'
|
3597 |
-
'id'
|
3598 |
'count' => 3,
|
3599 |
),
|
3600 |
);
|
@@ -3712,10 +3743,10 @@ final class FLBuilderModel {
|
|
3712 |
// Check the registered forms first.
|
3713 |
if ( isset( self::$settings_forms[ $type ] ) ) {
|
3714 |
$form_type = $type;
|
3715 |
-
$tabs
|
3716 |
} elseif ( isset( self::$modules[ $type ] ) ) {
|
3717 |
$form_type = $type . '-module';
|
3718 |
-
$tabs
|
3719 |
} else {
|
3720 |
return $defaults;
|
3721 |
}
|
@@ -3729,7 +3760,7 @@ final class FLBuilderModel {
|
|
3729 |
// Add the root name if needed later for synthetic fields like
|
3730 |
// the dimension fields being synthesized below.
|
3731 |
$fields[ $name ]['root_name'] = $name;
|
3732 |
-
$field['root_name']
|
3733 |
|
3734 |
// Handle dimension fields. We have to do it this way for backwards compat
|
3735 |
// with old margin, padding, and border fields as the settings expect margin_top
|
@@ -3775,7 +3806,7 @@ final class FLBuilderModel {
|
|
3775 |
|
3776 |
$response_suffix = ( 'default' == $device ? '' : '_' . $device );
|
3777 |
$responsive_name = $name . $response_suffix;
|
3778 |
-
$unit_name
|
3779 |
|
3780 |
// Add the default value.
|
3781 |
if ( is_array( $responsive ) && isset( $responsive['default'] ) && isset( $responsive['default'][ $device ] ) ) {
|
@@ -3878,15 +3909,15 @@ final class FLBuilderModel {
|
|
3878 |
* @return void
|
3879 |
*/
|
3880 |
static public function save_settings( $node_id = null, $settings = null ) {
|
3881 |
-
$node
|
3882 |
-
$new_settings
|
3883 |
-
$template_post_id
|
3884 |
|
3885 |
// Process the settings.
|
3886 |
$new_settings = self::process_node_settings( $node, $new_settings );
|
3887 |
|
3888 |
// Save the settings to the node.
|
3889 |
-
$data
|
3890 |
$data[ $node_id ]->settings = $new_settings;
|
3891 |
|
3892 |
// Update the layout data.
|
@@ -4033,26 +4064,26 @@ final class FLBuilderModel {
|
|
4033 |
static public function duplicate_post() {
|
4034 |
global $wpdb;
|
4035 |
|
4036 |
-
$post_id
|
4037 |
-
$post
|
4038 |
$current_user = wp_get_current_user();
|
4039 |
$template_id = false;
|
4040 |
|
4041 |
// Duplicate the post.
|
4042 |
$data = array(
|
4043 |
'comment_status' => $post->comment_status,
|
4044 |
-
'ping_status'
|
4045 |
-
'post_author'
|
4046 |
-
'post_content'
|
4047 |
-
'post_excerpt'
|
4048 |
-
'post_name'
|
4049 |
-
'post_parent'
|
4050 |
-
'post_password'
|
4051 |
-
'post_status'
|
4052 |
-
'post_title'
|
4053 |
-
'post_type'
|
4054 |
-
'to_ping'
|
4055 |
-
'menu_order'
|
4056 |
);
|
4057 |
|
4058 |
// Get the new post id.
|
@@ -4103,11 +4134,11 @@ final class FLBuilderModel {
|
|
4103 |
|
4104 |
// Update template ID and template node ID
|
4105 |
$template_id = get_post_meta( $new_post_id, '_fl_builder_template_id', true );
|
4106 |
-
$global
|
4107 |
|
4108 |
if ( $template_id && $global ) {
|
4109 |
foreach ( $data as $node_id => $node ) {
|
4110 |
-
$data[ $node_id ]->template_id
|
4111 |
$data[ $node_id ]->template_node_id = $node_id;
|
4112 |
}
|
4113 |
}
|
@@ -4148,15 +4179,15 @@ final class FLBuilderModel {
|
|
4148 |
* @param int $post_id
|
4149 |
* @return void
|
4150 |
*/
|
4151 |
-
static public function save_revision( $post_id ) {
|
4152 |
|
4153 |
$parent_id = wp_is_post_revision( $post_id );
|
4154 |
|
4155 |
if ( $parent_id ) {
|
4156 |
|
4157 |
-
$parent
|
4158 |
-
$data
|
4159 |
-
$settings
|
4160 |
|
4161 |
if ( ! empty( $data ) ) {
|
4162 |
self::update_layout_data( $data, 'published', $post_id );
|
@@ -4186,7 +4217,7 @@ final class FLBuilderModel {
|
|
4186 |
* @since 2.1.5
|
4187 |
*/
|
4188 |
static public function save_layout_revision( $post_id ) {
|
4189 |
-
add_filter( 'wp_save_post_revision_post_has_changed',
|
4190 |
wp_save_post_revision( $post_id );
|
4191 |
remove_filter( 'wp_save_post_revision_post_has_changed', array( __CLASS__, 'save_layout_revision_changed_filter' ), 10, 3 );
|
4192 |
}
|
@@ -4200,7 +4231,7 @@ final class FLBuilderModel {
|
|
4200 |
|
4201 |
// get builder data for compare
|
4202 |
$old = serialize( get_post_meta( $last_revision->ID, '_fl_builder_data', true ) );
|
4203 |
-
$new = serialize( get_post_meta( $post->ID,
|
4204 |
|
4205 |
return $old != $new;
|
4206 |
}
|
@@ -4214,12 +4245,12 @@ final class FLBuilderModel {
|
|
4214 |
* @return void
|
4215 |
*/
|
4216 |
static public function restore_revision( $post_id, $revision_id ) {
|
4217 |
-
$post
|
4218 |
$revision = get_post( $revision_id );
|
4219 |
|
4220 |
if ( $revision ) {
|
4221 |
|
4222 |
-
$data
|
4223 |
$settings = self::get_layout_settings( 'published', $revision->ID );
|
4224 |
|
4225 |
if ( ! empty( $data ) ) {
|
@@ -4248,26 +4279,26 @@ final class FLBuilderModel {
|
|
4248 |
* @return array
|
4249 |
*/
|
4250 |
static public function get_layout_data( $status = null, $post_id = null ) {
|
4251 |
-
$post_id
|
4252 |
-
$status
|
4253 |
|
4254 |
// Get layout metadata.
|
4255 |
if ( 'published' == $status || 'revision' == get_post_type( $post_id ) ) {
|
4256 |
if ( isset( self::$published_layout_data[ $post_id ] ) ) {
|
4257 |
$data = self::$published_layout_data[ $post_id ];
|
4258 |
} else {
|
4259 |
-
$data
|
4260 |
-
$data
|
4261 |
-
$data
|
4262 |
self::$published_layout_data[ $post_id ] = apply_filters( 'fl_builder_get_layout_metadata', $data, $status, $post_id );
|
4263 |
}
|
4264 |
} elseif ( 'draft' == $status ) {
|
4265 |
if ( isset( self::$draft_layout_data[ $post_id ] ) ) {
|
4266 |
$data = self::$draft_layout_data[ $post_id ];
|
4267 |
} else {
|
4268 |
-
$data
|
4269 |
-
$data
|
4270 |
-
$data
|
4271 |
self::$draft_layout_data[ $post_id ] = apply_filters( 'fl_builder_get_layout_metadata', $data, $status, $post_id );
|
4272 |
}
|
4273 |
}
|
@@ -4284,7 +4315,10 @@ final class FLBuilderModel {
|
|
4284 |
}
|
4285 |
}
|
4286 |
|
4287 |
-
|
|
|
|
|
|
|
4288 |
return apply_filters( 'fl_builder_layout_data', $data, $status, $post_id );
|
4289 |
}
|
4290 |
|
@@ -4299,11 +4333,11 @@ final class FLBuilderModel {
|
|
4299 |
* @return void
|
4300 |
*/
|
4301 |
static public function update_layout_data( $data, $status = null, $post_id = null ) {
|
4302 |
-
$post_id
|
4303 |
-
$status
|
4304 |
-
$key
|
4305 |
-
$raw_data
|
4306 |
-
$data
|
4307 |
|
4308 |
// Update the data.
|
4309 |
if ( 0 === count( $raw_data ) ) {
|
@@ -4392,9 +4426,9 @@ final class FLBuilderModel {
|
|
4392 |
* @return bool
|
4393 |
*/
|
4394 |
static public function layout_has_drafted_changes() {
|
4395 |
-
$post_id
|
4396 |
$published = serialize( self::get_layout_data( 'published', $post_id ) );
|
4397 |
-
$draft
|
4398 |
|
4399 |
if ( $published != $draft ) {
|
4400 |
return true;
|
@@ -4412,11 +4446,11 @@ final class FLBuilderModel {
|
|
4412 |
* @return object
|
4413 |
*/
|
4414 |
static public function get_layout_settings( $status = null, $post_id = null ) {
|
4415 |
-
$status
|
4416 |
-
$post_id
|
4417 |
-
$key
|
4418 |
-
$settings
|
4419 |
-
$defaults
|
4420 |
|
4421 |
if ( ! $settings ) {
|
4422 |
$settings = new StdClass();
|
@@ -4437,12 +4471,12 @@ final class FLBuilderModel {
|
|
4437 |
* @return object
|
4438 |
*/
|
4439 |
static public function update_layout_settings( $settings = array(), $status = null, $post_id = null ) {
|
4440 |
-
$status
|
4441 |
-
$post_id
|
4442 |
-
$key
|
4443 |
-
$raw_settings
|
4444 |
-
$old_settings
|
4445 |
-
$new_settings
|
4446 |
|
4447 |
if ( 0 === count( $raw_settings ) ) {
|
4448 |
add_metadata( 'post', $post_id, $key, self::slash_settings( $new_settings ) );
|
@@ -4475,9 +4509,9 @@ final class FLBuilderModel {
|
|
4475 |
* @return void
|
4476 |
*/
|
4477 |
static public function delete_layout_settings( $status = null, $post_id = null ) {
|
4478 |
-
$status
|
4479 |
-
$post_id
|
4480 |
-
$key
|
4481 |
|
4482 |
update_metadata( 'post', $post_id, $key, array() );
|
4483 |
}
|
@@ -4520,9 +4554,9 @@ final class FLBuilderModel {
|
|
4520 |
* @return void
|
4521 |
*/
|
4522 |
static public function clear_draft_layout() {
|
4523 |
-
$post_id
|
4524 |
-
$data
|
4525 |
-
$settings
|
4526 |
|
4527 |
// Delete the old draft layout.
|
4528 |
self::delete_layout_data( 'draft' );
|
@@ -4546,9 +4580,9 @@ final class FLBuilderModel {
|
|
4546 |
*/
|
4547 |
static public function save_layout( $publish = true ) {
|
4548 |
$editor_content = FLBuilder::render_editor_content();
|
4549 |
-
$post_id
|
4550 |
-
$data
|
4551 |
-
$settings
|
4552 |
|
4553 |
/**
|
4554 |
* This action allows you to hook into before the data is saved for a layout.
|
@@ -4578,8 +4612,8 @@ final class FLBuilderModel {
|
|
4578 |
// Publish the post?
|
4579 |
if ( $publish ) {
|
4580 |
|
4581 |
-
$is_draft
|
4582 |
-
$is_pending
|
4583 |
|
4584 |
if ( current_user_can( 'publish_posts' ) ) {
|
4585 |
$post_status = $is_draft || $is_pending ? 'publish' : $post_status;
|
@@ -4590,9 +4624,9 @@ final class FLBuilderModel {
|
|
4590 |
|
4591 |
// Update the post with stripped down content.
|
4592 |
wp_update_post(array(
|
4593 |
-
'ID'
|
4594 |
-
'post_status'
|
4595 |
-
'post_content'
|
4596 |
));
|
4597 |
|
4598 |
// Rerender the assets for this layout.
|
@@ -4617,13 +4651,17 @@ final class FLBuilderModel {
|
|
4617 |
* @return void
|
4618 |
*/
|
4619 |
static public function save_draft() {
|
4620 |
-
$post_id
|
4621 |
$post_status = get_post_status( $post_id );
|
4622 |
|
4623 |
if ( strstr( $post_status, 'draft' ) ) {
|
4624 |
self::save_layout( false );
|
4625 |
}
|
4626 |
|
|
|
|
|
|
|
|
|
4627 |
do_action( 'fl_builder_after_save_draft', $post_id, $post_status );
|
4628 |
}
|
4629 |
|
@@ -4637,15 +4675,15 @@ final class FLBuilderModel {
|
|
4637 |
* @return array
|
4638 |
*/
|
4639 |
static public function duplicate_wpml_layout( $original_post_id = null, $new_post_id = null ) {
|
4640 |
-
$post_data
|
4641 |
-
$original_post_id
|
4642 |
-
$new_post_id
|
4643 |
-
$enabled
|
4644 |
-
$published
|
4645 |
-
$draft
|
4646 |
|
4647 |
$response = array(
|
4648 |
-
'enabled'
|
4649 |
'has_layout' => false,
|
4650 |
);
|
4651 |
|
@@ -4715,10 +4753,10 @@ final class FLBuilderModel {
|
|
4715 |
static public function save_user_template( $settings = array() ) {
|
4716 |
// Save the user template post.
|
4717 |
$post_id = wp_insert_post(array(
|
4718 |
-
'post_title'
|
4719 |
-
'post_type'
|
4720 |
-
'post_status'
|
4721 |
-
'ping_status'
|
4722 |
'comment_status' => 'closed',
|
4723 |
));
|
4724 |
|
@@ -4726,15 +4764,15 @@ final class FLBuilderModel {
|
|
4726 |
wp_set_post_terms( $post_id, 'layout', 'fl-builder-template-type' );
|
4727 |
|
4728 |
// Add category
|
4729 |
-
$cat
|
4730 |
$cat_added = '';
|
4731 |
if ( __( 'Uncategorized', 'fl-builder' ) !== $cat && 'uncategorized' !== $cat ) {
|
4732 |
$cat_added = wp_set_object_terms( $post_id, $cat, 'fl-builder-template-category' );
|
4733 |
}
|
4734 |
|
4735 |
// Get the layout data and settings to copy.
|
4736 |
-
$data
|
4737 |
-
$layout_settings
|
4738 |
|
4739 |
// Generate new node ids.
|
4740 |
$data = self::generate_new_node_ids( $data );
|
@@ -4746,24 +4784,27 @@ final class FLBuilderModel {
|
|
4746 |
// Enable the builder for this template.
|
4747 |
update_post_meta( $post_id, '_fl_builder_enabled', true );
|
4748 |
|
4749 |
-
|
|
|
|
|
|
|
4750 |
do_action( 'fl_builder_after_save_user_template', $post_id );
|
4751 |
|
4752 |
$response = array(
|
4753 |
-
'name'
|
4754 |
-
'id'
|
4755 |
-
'postId'
|
4756 |
-
'image'
|
4757 |
-
'kind'
|
4758 |
-
'content'
|
4759 |
-
'type'
|
4760 |
'isGlobal' => false,
|
4761 |
-
'link'
|
4762 |
'category' => array(),
|
4763 |
);
|
4764 |
|
4765 |
if ( is_array( $cat_added ) && ! empty( $cat_added ) ) {
|
4766 |
-
$term
|
4767 |
$response['category'][ $term->slug ] = $term->name;
|
4768 |
} else {
|
4769 |
$response['category']['uncategorized'] = __( 'Uncategorized', 'fl-builder' );
|
@@ -4783,8 +4824,8 @@ final class FLBuilderModel {
|
|
4783 |
static public function get_user_templates( $type = 'layout' ) {
|
4784 |
$categorized = array(
|
4785 |
'uncategorized' => array(
|
4786 |
-
'name'
|
4787 |
-
'templates'
|
4788 |
),
|
4789 |
);
|
4790 |
|
@@ -4794,7 +4835,7 @@ final class FLBuilderModel {
|
|
4794 |
'order' => 'ASC',
|
4795 |
'posts_per_page' => '-1',
|
4796 |
'suppress_filters' => false,
|
4797 |
-
'tax_query'
|
4798 |
array(
|
4799 |
'taxonomy' => 'fl-builder-template-type',
|
4800 |
'field' => 'slug',
|
@@ -4810,22 +4851,22 @@ final class FLBuilderModel {
|
|
4810 |
|
4811 |
if ( has_post_thumbnail( $post->ID ) ) {
|
4812 |
$image_data = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'medium_large' );
|
4813 |
-
$image
|
4814 |
} else {
|
4815 |
$image = FL_BUILDER_URL . 'img/templates/blank.jpg';
|
4816 |
}
|
4817 |
|
4818 |
$templates[] = array(
|
4819 |
-
'id'
|
4820 |
-
'postId'
|
4821 |
-
'name'
|
4822 |
-
'image'
|
4823 |
-
'kind'
|
4824 |
-
'type'
|
4825 |
-
'content'
|
4826 |
-
'isGlobal'
|
4827 |
-
'link'
|
4828 |
-
'category'
|
4829 |
);
|
4830 |
}
|
4831 |
|
@@ -4835,7 +4876,7 @@ final class FLBuilderModel {
|
|
4835 |
$cats = wp_get_post_terms( $template['postId'], 'fl-builder-template-category' );
|
4836 |
|
4837 |
if ( 0 === count( $cats ) || is_wp_error( $cats ) ) {
|
4838 |
-
$template['category']
|
4839 |
'uncategorized' => __( 'Uncategorized', 'fl-builder' ),
|
4840 |
);
|
4841 |
$categorized['uncategorized']['templates'][] = $template;
|
@@ -4848,8 +4889,8 @@ final class FLBuilderModel {
|
|
4848 |
foreach ( $cats as $cat ) {
|
4849 |
if ( ! isset( $categorized[ $cat->slug ] ) ) {
|
4850 |
$categorized[ $cat->slug ] = array(
|
4851 |
-
'name'
|
4852 |
-
'templates'
|
4853 |
);
|
4854 |
}
|
4855 |
$categorized[ $cat->slug ]['templates'][] = $template;
|
@@ -4868,8 +4909,8 @@ final class FLBuilderModel {
|
|
4868 |
asort( $categorized );
|
4869 |
|
4870 |
return array(
|
4871 |
-
'templates'
|
4872 |
-
'categorized'
|
4873 |
);
|
4874 |
}
|
4875 |
|
@@ -4936,9 +4977,9 @@ final class FLBuilderModel {
|
|
4936 |
|
4937 |
// Get the template data if $template is not an object.
|
4938 |
if ( ! is_object( $template ) ) {
|
4939 |
-
$template_id
|
4940 |
-
$template
|
4941 |
-
$template->nodes
|
4942 |
$template->settings = self::get_layout_settings( 'published', $template_id );
|
4943 |
}
|
4944 |
|
@@ -4946,7 +4987,7 @@ final class FLBuilderModel {
|
|
4946 |
$template->nodes = self::generate_new_node_ids( $template->nodes );
|
4947 |
|
4948 |
// Get the existing layout data and settings.
|
4949 |
-
$layout_data
|
4950 |
$layout_settings = self::get_layout_settings();
|
4951 |
|
4952 |
// Reposition rows if we are appending.
|
@@ -4963,7 +5004,7 @@ final class FLBuilderModel {
|
|
4963 |
}
|
4964 |
|
4965 |
// Merge the layout data and settings.
|
4966 |
-
$data
|
4967 |
$settings = self::merge_layout_settings( $layout_settings, $template->settings );
|
4968 |
|
4969 |
// Update the layout data and settings.
|
@@ -4979,8 +5020,8 @@ final class FLBuilderModel {
|
|
4979 |
// Return the layout.
|
4980 |
return array(
|
4981 |
'layout_css' => isset( $settings ) ? $settings->css : null,
|
4982 |
-
'layout'
|
4983 |
-
'config'
|
4984 |
);
|
4985 |
}
|
4986 |
|
@@ -5078,7 +5119,7 @@ final class FLBuilderModel {
|
|
5078 |
|
5079 |
$is_visible = true;
|
5080 |
|
5081 |
-
if ( isset( $node->settings->visibility_display ) && ('' != $node->settings->visibility_display) ) {
|
5082 |
|
5083 |
// For logged out users
|
5084 |
if ( 'logged_out' == $node->settings->visibility_display && ! is_user_logged_in() ) {
|
@@ -5134,15 +5175,15 @@ final class FLBuilderModel {
|
|
5134 |
*/
|
5135 |
static public function get_node_templates( $type = '' ) {
|
5136 |
$posts = get_posts( array(
|
5137 |
-
'post_type'
|
5138 |
-
'orderby'
|
5139 |
-
'order'
|
5140 |
-
'posts_per_page'
|
5141 |
-
'tax_query'
|
5142 |
array(
|
5143 |
'taxonomy' => 'fl-builder-template-type',
|
5144 |
-
'field'
|
5145 |
-
'terms'
|
5146 |
),
|
5147 |
),
|
5148 |
) );
|
@@ -5152,10 +5193,10 @@ final class FLBuilderModel {
|
|
5152 |
foreach ( $posts as $post ) {
|
5153 |
|
5154 |
$templates[] = array(
|
5155 |
-
'id'
|
5156 |
-
'global'
|
5157 |
-
'link'
|
5158 |
-
'name'
|
5159 |
);
|
5160 |
}
|
5161 |
|
@@ -5203,19 +5244,19 @@ final class FLBuilderModel {
|
|
5203 |
} else {
|
5204 |
|
5205 |
$posts = get_posts( array(
|
5206 |
-
'post_type'
|
5207 |
-
'post_status'
|
5208 |
-
'posts_per_page'
|
5209 |
-
'post_status'
|
5210 |
-
'meta_key'
|
5211 |
-
'meta_value'
|
5212 |
) );
|
5213 |
|
5214 |
if ( 0 === count( $posts ) ) {
|
5215 |
return false;
|
5216 |
}
|
5217 |
|
5218 |
-
$post_id
|
5219 |
self::$node_template_post_ids[ $template_id ] = $post_id;
|
5220 |
return $post_id;
|
5221 |
}
|
@@ -5259,9 +5300,9 @@ final class FLBuilderModel {
|
|
5259 |
'key' => '_fl_builder_draft',
|
5260 |
'value' => $template_id,
|
5261 |
'compare' => 'LIKE',
|
5262 |
-
)
|
5263 |
),
|
5264 |
-
'post_type'
|
5265 |
'post_status' => 'any',
|
5266 |
'post__not_in' => array( $post_id ),
|
5267 |
) );
|
@@ -5281,18 +5322,18 @@ final class FLBuilderModel {
|
|
5281 |
* @return void
|
5282 |
*/
|
5283 |
static public function save_node_template( $template_node_id, $settings ) {
|
5284 |
-
$root_node
|
5285 |
-
$nodes
|
5286 |
-
$template_id
|
5287 |
-
$original_parent
|
5288 |
-
$original_position
|
5289 |
|
5290 |
// Save the node template post.
|
5291 |
$post_id = wp_insert_post( array(
|
5292 |
-
'post_title'
|
5293 |
-
'post_type'
|
5294 |
-
'post_status'
|
5295 |
-
'ping_status'
|
5296 |
'comment_status' => 'closed',
|
5297 |
) );
|
5298 |
|
@@ -5304,7 +5345,7 @@ final class FLBuilderModel {
|
|
5304 |
|
5305 |
// Remove root parent for column template.
|
5306 |
if ( 'column' == $root_node->type ) {
|
5307 |
-
$root_node->parent
|
5308 |
$root_node->settings->size = 100;
|
5309 |
}
|
5310 |
|
@@ -5322,7 +5363,7 @@ final class FLBuilderModel {
|
|
5322 |
|
5323 |
foreach ( $nodes as $node_id => $node ) {
|
5324 |
|
5325 |
-
$nodes[ $node_id ]->template_id
|
5326 |
$nodes[ $node_id ]->template_node_id = $node_id;
|
5327 |
|
5328 |
if ( $node_id == $root_node->node ) {
|
@@ -5374,14 +5415,14 @@ final class FLBuilderModel {
|
|
5374 |
|
5375 |
// Return an array of template settings.
|
5376 |
return array(
|
5377 |
-
'id'
|
5378 |
-
'global'
|
5379 |
-
'link'
|
5380 |
-
'name'
|
5381 |
-
'type'
|
5382 |
-
'layout'
|
5383 |
-
'config'
|
5384 |
-
'postID'
|
5385 |
);
|
5386 |
}
|
5387 |
|
@@ -5455,7 +5496,7 @@ final class FLBuilderModel {
|
|
5455 |
static public function unlink_global_node_template_from_all_posts( $template_post_id ) {
|
5456 |
if ( self::is_post_global_node_template( $template_post_id ) ) {
|
5457 |
|
5458 |
-
$posts
|
5459 |
$template_id = get_post_meta( $template_post_id, '_fl_builder_template_id', true );
|
5460 |
|
5461 |
foreach ( $posts as $post ) {
|
@@ -5480,9 +5521,9 @@ final class FLBuilderModel {
|
|
5480 |
* @return void
|
5481 |
*/
|
5482 |
static public function unlink_global_node_template_from_post( $status, $post_id, $template_post_id, $template_id ) {
|
5483 |
-
$template_data
|
5484 |
-
$layout_data
|
5485 |
-
$update
|
5486 |
|
5487 |
// Loop through the layout data.
|
5488 |
foreach ( $layout_data as $node_id => $node ) {
|
@@ -5542,7 +5583,7 @@ final class FLBuilderModel {
|
|
5542 |
static public function delete_global_node_template_from_all_posts( $template_post_id ) {
|
5543 |
if ( self::is_post_global_node_template( $template_post_id ) ) {
|
5544 |
|
5545 |
-
$posts
|
5546 |
$template_id = get_post_meta( $template_post_id, '_fl_builder_template_id', true );
|
5547 |
|
5548 |
foreach ( $posts as $post ) {
|
@@ -5621,7 +5662,10 @@ final class FLBuilderModel {
|
|
5621 |
$template_post_id = self::get_node_template_post_id( $template_id );
|
5622 |
$is_col_template = false;
|
5623 |
|
5624 |
-
|
|
|
|
|
|
|
5625 |
$override = apply_filters( 'fl_builder_override_apply_node_template', false, array(
|
5626 |
'template_id' => $template_id,
|
5627 |
'parent_id' => $parent_id,
|
@@ -5637,15 +5681,15 @@ final class FLBuilderModel {
|
|
5637 |
|
5638 |
// Get the template data from $template if we have it.
|
5639 |
if ( is_object( $template ) ) {
|
5640 |
-
$template_data
|
5641 |
-
$template_settings
|
5642 |
-
$type
|
5643 |
-
$global
|
5644 |
} else {
|
5645 |
-
$template_data
|
5646 |
-
$template_settings
|
5647 |
-
$type
|
5648 |
-
$global
|
5649 |
}
|
5650 |
|
5651 |
// Generate new node ids.
|
@@ -5664,7 +5708,7 @@ final class FLBuilderModel {
|
|
5664 |
$parent_id = self::add_module_parent( $parent_id, $position );
|
5665 |
$position = null;
|
5666 |
} elseif ( 'column' == $root_node->type ) {
|
5667 |
-
$parent_id
|
5668 |
$is_col_template = self::is_node_global( $root_node );
|
5669 |
}
|
5670 |
|
@@ -5673,7 +5717,7 @@ final class FLBuilderModel {
|
|
5673 |
|
5674 |
// Set the node's template data if the parent is a global node.
|
5675 |
if ( self::is_node_global( $parent ) && ! $is_col_template ) {
|
5676 |
-
$template_data[ $root_node->node ]->template_id
|
5677 |
$template_data[ $root_node->node ]->template_node_id = $root_node->node;
|
5678 |
unset( $template_data[ $root_node->node ]->template_root_node );
|
5679 |
$global = true;
|
@@ -5684,7 +5728,7 @@ final class FLBuilderModel {
|
|
5684 |
$template_data[ $root_node->node ]->parent = ! $parent_id ? null : $parent_id;
|
5685 |
|
5686 |
// Get the layout data and settings.
|
5687 |
-
$layout_data
|
5688 |
$layout_settings = self::get_layout_settings( 'draft' );
|
5689 |
|
5690 |
// Only merge the root node for global templates.
|
@@ -5802,7 +5846,10 @@ final class FLBuilderModel {
|
|
5802 |
* @return void
|
5803 |
*/
|
5804 |
static public function apply_template( $index = 0, $append = false, $type = 'layout' ) {
|
5805 |
-
|
|
|
|
|
|
|
5806 |
$override = apply_filters( 'fl_builder_override_apply_template', false, array(
|
5807 |
'index' => $index,
|
5808 |
'append' => $append,
|
@@ -5828,7 +5875,7 @@ final class FLBuilderModel {
|
|
5828 |
* @return array
|
5829 |
*/
|
5830 |
static public function apply_core_template( $index = 0, $append = false, $type = 'layout' ) {
|
5831 |
-
$template
|
5832 |
$row_position = self::next_node_position( 'row' );
|
5833 |
|
5834 |
// Delete existing nodes and settings?
|
@@ -5847,7 +5894,7 @@ final class FLBuilderModel {
|
|
5847 |
$template->nodes = FLBuilderSettingsCompat::filter_layout_data( $template->nodes );
|
5848 |
|
5849 |
// Get the existing layout data and settings.
|
5850 |
-
$layout_data
|
5851 |
$layout_settings = self::get_layout_settings();
|
5852 |
|
5853 |
// Reposition rows?
|
@@ -5989,10 +6036,10 @@ final class FLBuilderModel {
|
|
5989 |
* @return array
|
5990 |
*/
|
5991 |
static public function get_template_selector_data( $type = 'layout' ) {
|
5992 |
-
$type
|
5993 |
-
$categorized
|
5994 |
-
$templates
|
5995 |
-
$groups
|
5996 |
|
5997 |
// This is needed for backwards compat with the old core templates category.
|
5998 |
$core_categories = array(
|
@@ -6026,10 +6073,10 @@ final class FLBuilderModel {
|
|
6026 |
'image' => $image,
|
6027 |
'author' => '',
|
6028 |
'category' => isset( $template->category ) ? $template->category : $template->categories,
|
6029 |
-
'tags'
|
6030 |
-
'group'
|
6031 |
'type' => 'core',
|
6032 |
-
'kind'
|
6033 |
'content' => ! in_array( $type, array( 'row', 'column', 'module' ) ) ? 'layout' : $type,
|
6034 |
), $template );
|
6035 |
}
|
@@ -6075,7 +6122,7 @@ final class FLBuilderModel {
|
|
6075 |
$group_key = sanitize_key( $group_name );
|
6076 |
if ( ! isset( $groups[ $group_key ] ) ) {
|
6077 |
$groups[ $group_key ] = array(
|
6078 |
-
'name'
|
6079 |
'categories' => array(),
|
6080 |
);
|
6081 |
}
|
@@ -6096,8 +6143,8 @@ final class FLBuilderModel {
|
|
6096 |
// Add the category if we don't have it yet.
|
6097 |
if ( ! isset( $categorized[ $cat_key ] ) ) {
|
6098 |
$categorized[ $cat_key ] = array(
|
6099 |
-
'name'
|
6100 |
-
'templates'
|
6101 |
);
|
6102 |
}
|
6103 |
|
@@ -6107,11 +6154,14 @@ final class FLBuilderModel {
|
|
6107 |
$templates[ $i ] = $template;
|
6108 |
}
|
6109 |
|
6110 |
-
|
|
|
|
|
|
|
6111 |
return apply_filters( 'fl_builder_template_selector_data', array(
|
6112 |
-
'templates'
|
6113 |
-
'categorized'
|
6114 |
-
'groups'
|
6115 |
), $type );
|
6116 |
}
|
6117 |
|
@@ -6263,7 +6313,7 @@ final class FLBuilderModel {
|
|
6263 |
/**
|
6264 |
* Check if the current user has the specific capabilities
|
6265 |
*
|
6266 |
-
* @param string $cap
|
6267 |
* @return bool
|
6268 |
*/
|
6269 |
static public function current_user_has_capability( $cap ) {
|
@@ -6291,20 +6341,20 @@ final class FLBuilderModel {
|
|
6291 |
*/
|
6292 |
static public function get_help_button_defaults() {
|
6293 |
$defaults = array(
|
6294 |
-
'enabled'
|
6295 |
-
'tour'
|
6296 |
-
'video'
|
6297 |
-
'video_embed'
|
6298 |
-
'knowledge_base'
|
6299 |
-
'knowledge_base_url'
|
6300 |
-
'utm_medium'
|
6301 |
-
'utm_source'
|
6302 |
'utm_campaign' => 'kb-help-button',
|
6303 |
) ),
|
6304 |
-
'forums'
|
6305 |
-
'forums_url'
|
6306 |
-
'utm_medium'
|
6307 |
-
'utm_source'
|
6308 |
'utm_campaign' => 'forums-help-button',
|
6309 |
) ),
|
6310 |
);
|
@@ -6335,8 +6385,8 @@ final class FLBuilderModel {
|
|
6335 |
static public function get_row_resize_settings() {
|
6336 |
$defaults = array(
|
6337 |
'userCanResizeRows' => true,
|
6338 |
-
'minAllowedWidth'
|
6339 |
-
'maxAllowedWidth'
|
6340 |
);
|
6341 |
|
6342 |
$settings = apply_filters( 'fl_row_resize_settings', $defaults );
|
@@ -6535,7 +6585,7 @@ final class FLBuilderModel {
|
|
6535 |
delete_metadata( 'user', 0, '_fl_builder_launched', 1, true );
|
6536 |
|
6537 |
// Delete uploaded files and folders.
|
6538 |
-
$upload_dir
|
6539 |
fl_builder_filesystem()->rmdir( $upload_dir['path'], true );
|
6540 |
|
6541 |
// Deactivate and delete the plugin.
|
16 |
* @var array $row_layouts
|
17 |
*/
|
18 |
static public $row_layouts = array(
|
19 |
+
'1-col' => array( 100 ),
|
20 |
+
'2-cols' => array( 50, 50 ),
|
21 |
+
'3-cols' => array( 33.33, 33.33, 33.33 ),
|
22 |
+
'4-cols' => array( 25, 25, 25, 25 ),
|
23 |
+
'5-cols' => array( 20, 20, 20, 20, 20 ),
|
24 |
+
'6-cols' => array( 16.65, 16.65, 16.65, 16.65, 16.65, 16.65 ),
|
25 |
+
'left-sidebar' => array( 33.33, 66.66 ),
|
26 |
+
'right-sidebar' => array( 66.66, 33.33 ),
|
27 |
+
'left-right-sidebar' => array( 25, 50, 25 ),
|
28 |
);
|
29 |
|
30 |
/**
|
175 |
*/
|
176 |
static public function init() {
|
177 |
/* Admin AJAX */
|
178 |
+
add_action( 'wp_ajax_fl_builder_disable', __CLASS__ . '::disable' );
|
179 |
+
add_action( 'wp_ajax_fl_builder_duplicate_wpml_layout', __CLASS__ . '::duplicate_wpml_layout' );
|
180 |
|
181 |
/* Actions */
|
182 |
+
add_action( 'init', __CLASS__ . '::load_settings', 1 );
|
183 |
+
add_action( 'init', __CLASS__ . '::load_modules', 2 );
|
184 |
+
add_action( 'before_delete_post', __CLASS__ . '::delete_post' );
|
185 |
+
add_action( 'save_post', __CLASS__ . '::save_revision', 10, 3 );
|
186 |
+
add_action( 'save_post', __CLASS__ . '::set_node_template_default_type', 10, 3 );
|
187 |
+
add_action( 'wp_restore_post_revision', __CLASS__ . '::restore_revision', 10, 2 );
|
188 |
+
add_action( 'fl_builder_after_save_layout', __CLASS__ . '::save_layout_revision' );
|
189 |
+
add_action( 'fl_builder_after_save_user_template', __CLASS__ . '::save_layout_revision' );
|
190 |
|
191 |
/* Filters */
|
192 |
+
add_filter( 'heartbeat_received', __CLASS__ . '::lock_post', 10, 2 );
|
193 |
+
add_filter( 'fl_builder_register_settings_form', __CLASS__ . '::filter_row_settings_for_resize', 10, 2 );
|
194 |
+
add_filter( 'wp_revisions_to_keep', __CLASS__ . '::limit_revisions', 10, 2 );
|
195 |
|
196 |
/* Core Templates */
|
197 |
self::register_core_templates();
|
281 |
$_POST['fl_builder_data']['node_settings'] = FLBuilderUtils::modsec_fix_decode( $_POST['fl_builder_data']['node_settings'] );
|
282 |
}
|
283 |
|
284 |
+
$data = FLBuilderUtils::json_decode_deep( wp_unslash( $_POST['fl_builder_data'] ) );
|
285 |
|
286 |
foreach ( $data as $key => $val ) {
|
287 |
self::$post_data[ $key ] = $val;
|
306 |
* @return void
|
307 |
*/
|
308 |
static public function update_post_data( $key, $value ) {
|
309 |
+
$post_data = self::get_post_data();
|
310 |
$post_data[ $key ] = $value;
|
311 |
+
self::$post_data = $post_data;
|
312 |
}
|
313 |
|
314 |
/**
|
461 |
|
462 |
if ( is_singular() && isset( $wp_the_query->post ) ) {
|
463 |
|
464 |
+
$post = $wp_the_query->post;
|
465 |
$post_types = self::get_post_types();
|
466 |
+
$user_can = current_user_can( 'edit_post', $post->ID );
|
467 |
$user_access = FLBuilderUserAccess::current_user_can( 'builder_access' );
|
468 |
|
469 |
if ( in_array( $post->post_type, $post_types ) && $user_can && $user_access ) {
|
515 |
return true;
|
516 |
} else {
|
517 |
$post_types = self::get_post_types();
|
518 |
+
$post = get_post( $post_id );
|
519 |
|
520 |
if ( $post && in_array( $post->post_type, $post_types ) ) {
|
521 |
return get_post_meta( $post->ID, '_fl_builder_enabled', true );
|
546 |
} elseif ( is_customize_preview() ) {
|
547 |
self::$active = false;
|
548 |
} elseif ( self::is_post_editable() && ! is_admin() && ! post_password_required() ) {
|
549 |
+
$post_data = self::get_post_data();
|
550 |
self::$active = isset( $_GET['fl_builder'] ) || isset( $post_data['fl_builder'] );
|
551 |
}
|
552 |
|
573 |
static public function is_new_user() {
|
574 |
if ( self::is_builder_active() ) {
|
575 |
|
576 |
+
$current_user = wp_get_current_user();
|
577 |
+
$launched = get_user_meta( $current_user->ID, '_fl_builder_launched', true );
|
578 |
|
579 |
if ( empty( $launched ) ) {
|
580 |
update_user_meta( $current_user->ID, '_fl_builder_launched', 1 );
|
629 |
|
630 |
if ( self::is_post_editable() && is_object( $wp_the_query->post ) ) {
|
631 |
|
632 |
+
$post = $wp_the_query->post;
|
633 |
+
$published = self::get_layout_data( 'published' );
|
634 |
+
$draft = self::get_layout_data( 'draft' );
|
635 |
+
$content = apply_filters( 'fl_builder_migrated_post_content', $post->post_content );
|
636 |
|
637 |
// Migrate existing post content to the builder?
|
638 |
if ( empty( $published ) && empty( $draft ) && ! empty( $content ) ) {
|
639 |
|
640 |
+
$row = self::add_row();
|
641 |
+
$cols = self::get_nodes( 'column' );
|
642 |
+
$col = array_shift( $cols );
|
643 |
+
$settings = self::get_module_defaults( 'rich-text' );
|
644 |
$settings->text = $content;
|
645 |
|
646 |
self::add_module( 'rich-text', $settings, $col->node );
|
656 |
require_once ABSPATH . 'wp-admin/includes/post.php';
|
657 |
wp_set_post_lock( $post->ID );
|
658 |
|
659 |
+
/**
|
660 |
+
* Allow devs to hook into when editing is enabled.
|
661 |
+
* @see fl_builder_editing_enabled
|
662 |
+
*/
|
663 |
do_action( 'fl_builder_editing_enabled' );
|
664 |
}
|
665 |
}
|
687 |
|
688 |
// Build the paths.
|
689 |
$dir_info = array(
|
690 |
+
'path' => $wp_info['basedir'] . '/' . $dir_name . '/',
|
691 |
+
'url' => $wp_info['baseurl'] . '/' . $dir_name . '/',
|
692 |
);
|
693 |
|
694 |
// Create the upload dir if it doesn't exist.
|
719 |
*/
|
720 |
static public function get_cache_dir( $name = 'cache' ) {
|
721 |
$upload_info = self::get_upload_dir();
|
722 |
+
$allowed = array( 'cache', 'icons' );
|
723 |
|
724 |
// Make sure the dir name is allowed.
|
725 |
if ( ! in_array( $name, $allowed ) ) {
|
728 |
|
729 |
// Build the paths.
|
730 |
$dir_info = array(
|
731 |
+
'path' => $upload_info['path'] . $name . '/',
|
732 |
+
'url' => $upload_info['url'] . $name . '/',
|
733 |
);
|
734 |
|
735 |
// Create the cache dir if it doesn't exist.
|
760 |
*/
|
761 |
static public function get_asset_version() {
|
762 |
$post_id = self::get_post_id();
|
763 |
+
$active = self::is_builder_active();
|
764 |
$preview = self::is_builder_draft_preview();
|
765 |
|
766 |
if ( $active || $preview ) {
|
793 |
}
|
794 |
|
795 |
$info = array(
|
796 |
+
'css' => $cache_dir['path'] . $post_id . $suffix . '.css',
|
797 |
'css_url' => $cache_dir['url'] . $post_id . $suffix . '.css',
|
798 |
+
'css_partial' => $cache_dir['path'] . $post_id . $suffix . '-partial.css',
|
799 |
'css_partial_url' => $cache_dir['url'] . $post_id . $suffix . '-partial.css',
|
800 |
+
'js' => $cache_dir['path'] . $post_id . $suffix . '.js',
|
801 |
'js_url' => $cache_dir['url'] . $post_id . $suffix . '.js',
|
802 |
+
'js_partial' => $cache_dir['path'] . $post_id . $suffix . '-partial.js',
|
803 |
'js_partial_url' => $cache_dir['url'] . $post_id . $suffix . '-partial.js',
|
804 |
);
|
805 |
|
908 |
* @return void
|
909 |
*/
|
910 |
static public function delete_asset_cache_for_all_posts() {
|
911 |
+
$cache_dir = self::get_cache_dir();
|
912 |
+
$css = glob( $cache_dir['path'] . '*.css' );
|
913 |
+
$js = glob( $cache_dir['path'] . '*.js' );
|
914 |
|
915 |
if ( is_array( $css ) ) {
|
916 |
array_map( array( fl_builder_filesystem(), 'unlink' ), $css );
|
958 |
// Replace the old node ids.
|
959 |
foreach ( $data as $node_id => $node ) {
|
960 |
|
961 |
+
$nodes[ $map[ $node_id ] ] = $node;
|
962 |
$nodes[ $map[ $node_id ] ]->node = $map[ $node_id ];
|
963 |
|
964 |
if ( ! empty( $node->parent ) && isset( $map[ $node->parent ] ) ) {
|
1092 |
|
1093 |
// Helper array of parent types and their categories for each node type
|
1094 |
$parent_types = array(
|
1095 |
+
'module' => array(
|
1096 |
'type' => 'column',
|
1097 |
'category' => 'columns',
|
1098 |
),
|
1099 |
+
'column' => array(
|
1100 |
'type' => 'column-group',
|
1101 |
'category' => 'groups',
|
1102 |
),
|
1240 |
*/
|
1241 |
static public function get_categorized_nodes() {
|
1242 |
$nodes = array(
|
1243 |
+
'rows' => array(),
|
1244 |
'groups' => array(),
|
1245 |
'columns' => array(),
|
1246 |
'modules' => array(),
|
1252 |
$root_col = self::get_node_template_root( 'column' );
|
1253 |
|
1254 |
$nodes['columns'][ $root_col->node ] = $root_col;
|
1255 |
+
$col_children = self::get_nodes( null, $root_col );
|
1256 |
|
1257 |
foreach ( $col_children as $col_child ) {
|
1258 |
|
1266 |
} elseif ( 'column-group' == $col_child->type ) {
|
1267 |
|
1268 |
$nodes['groups'][ $col_child->node ] = $col_child;
|
1269 |
+
$group_cols = self::get_nodes( 'column', $col_child );
|
1270 |
|
1271 |
foreach ( $group_cols as $group_col ) {
|
1272 |
|
1273 |
$nodes['columns'][ $group_col->node ] = $group_col;
|
1274 |
+
$modules = self::get_modules( $group_col );
|
1275 |
|
1276 |
foreach ( $modules as $module ) {
|
1277 |
$nodes['modules'][ $module->node ] = $module;
|
1285 |
foreach ( $rows as $row ) {
|
1286 |
|
1287 |
$nodes['rows'][ $row->node ] = $row;
|
1288 |
+
$groups = self::get_nodes( 'column-group', $row );
|
1289 |
|
1290 |
foreach ( $groups as $group ) {
|
1291 |
|
1292 |
$nodes['groups'][ $group->node ] = $group;
|
1293 |
+
$cols = self::get_nodes( 'column', $group );
|
1294 |
|
1295 |
foreach ( $cols as $col ) {
|
1296 |
|
1297 |
$nodes['columns'][ $col->node ] = $col;
|
1298 |
+
$col_children = self::get_nodes( null, $col );
|
1299 |
|
1300 |
foreach ( $col_children as $col_child ) {
|
1301 |
|
1309 |
} elseif ( 'column-group' == $col_child->type ) {
|
1310 |
|
1311 |
$nodes['groups'][ $col_child->node ] = $col_child;
|
1312 |
+
$group_cols = self::get_nodes( 'column', $col_child );
|
1313 |
|
1314 |
foreach ( $group_cols as $group_col ) {
|
1315 |
|
1316 |
$nodes['columns'][ $group_col->node ] = $group_col;
|
1317 |
+
$modules = self::get_modules( $group_col );
|
1318 |
|
1319 |
foreach ( $modules as $module ) {
|
1320 |
$nodes['modules'][ $module->node ] = $module;
|
1340 |
* @return object
|
1341 |
*/
|
1342 |
static public function get_node_settings( $node, $filter = true ) {
|
1343 |
+
$node = is_object( $node ) ? $node : self::get_node( $node );
|
1344 |
$post_data = self::get_post_data();
|
1345 |
|
1346 |
// Get the node settings for a node template's root node?
|
1347 |
if ( self::is_node_template_root( $node ) && ! self::is_post_node_template() ) {
|
1348 |
$template_post_id = self::get_node_template_post_id( $node->template_id );
|
1349 |
+
$template_data = self::get_layout_data( 'published', $template_post_id );
|
1350 |
|
1351 |
// Fallback to draft data if we don't have published data.
|
1352 |
if ( ! isset( $template_data[ $node->template_node_id ] ) ) {
|
1355 |
|
1356 |
// Set the node settings to the template node settings.
|
1357 |
if ( isset( $template_data[ $node->template_node_id ] ) ) {
|
1358 |
+
$template_node = $template_data[ $node->template_node_id ];
|
1359 |
$template_settings = clone $template_node->settings;
|
1360 |
|
1361 |
if ( 'column' == $node->type ) {
|
1589 |
*/
|
1590 |
static public function call_module_delete( $node ) {
|
1591 |
if ( 'module' == $node->type && isset( self::$modules[ $node->settings->type ] ) ) {
|
1592 |
+
$class = get_class( self::$modules[ $node->settings->type ] );
|
1593 |
+
$instance = new $class();
|
1594 |
+
$instance->node = $node->node;
|
1595 |
+
$instance->parent = $node->parent;
|
1596 |
$instance->settings = $node->settings;
|
1597 |
$instance->delete();
|
1598 |
$instance->remove();
|
1609 |
* @return void
|
1610 |
*/
|
1611 |
static public function reorder_node( $node_id = null, $position = 0 ) {
|
1612 |
+
$data = self::get_layout_data();
|
1613 |
+
$node = $data[ $node_id ];
|
1614 |
+
$type = ! $node->parent ? $node->type : null;
|
1615 |
+
$nodes = self::get_nodes( $type, $node->parent );
|
1616 |
+
$new_pos = 0;
|
1617 |
|
1618 |
// Make sure node positions start at zero.
|
1619 |
foreach ( $nodes as $node ) {
|
1622 |
}
|
1623 |
|
1624 |
// Get the node and remove it from the array.
|
1625 |
+
$node = $data[ $node_id ];
|
1626 |
+
$removed = array_splice( $nodes, $node->position, 1 );
|
1627 |
+
$new_pos = 0;
|
1628 |
|
1629 |
// Reposition it in the array.
|
1630 |
array_splice( $nodes, $position, 0, $removed );
|
1649 |
* @return void
|
1650 |
*/
|
1651 |
static public function move_node( $node_id = null, $new_parent_id = null, $position = 0 ) {
|
1652 |
+
$data = self::get_layout_data();
|
1653 |
+
$new_parent = self::get_node( $new_parent_id );
|
1654 |
+
$node = self::get_node( $node_id );
|
1655 |
+
$siblings = self::get_nodes( null, $node->parent );
|
1656 |
+
$sibling_pos = 0;
|
1657 |
|
1658 |
// Set the node's new parent.
|
1659 |
$data[ $node_id ]->parent = $new_parent->node;
|
1684 |
* @return object The new row object.
|
1685 |
*/
|
1686 |
static public function add_row( $cols = '1-col', $position = false, $module = null ) {
|
1687 |
+
$data = self::get_layout_data();
|
1688 |
+
$settings = self::get_row_defaults();
|
1689 |
+
$row_node_id = self::generate_node_id();
|
1690 |
|
1691 |
// Add the row.
|
1692 |
+
$data[ $row_node_id ] = new StdClass();
|
1693 |
+
$data[ $row_node_id ]->node = $row_node_id;
|
1694 |
+
$data[ $row_node_id ]->type = 'row';
|
1695 |
+
$data[ $row_node_id ]->parent = null;
|
1696 |
+
$data[ $row_node_id ]->position = self::next_node_position( 'row' );
|
1697 |
+
$data[ $row_node_id ]->settings = $settings;
|
1698 |
|
1699 |
// Update the layout data.
|
1700 |
self::update_layout_data( $data );
|
1710 |
// Move an existing module to the row.
|
1711 |
if ( $module ) {
|
1712 |
$cols = self::get_nodes( 'column', $group->node );
|
1713 |
+
$col = array_shift( $cols );
|
1714 |
self::move_node( $module, $col->node, 0 );
|
1715 |
}
|
1716 |
|
1728 |
* @return void
|
1729 |
*/
|
1730 |
static public function copy_row( $node_id = null, $settings = null, $settings_id = null ) {
|
1731 |
+
$layout_data = self::get_layout_data();
|
1732 |
+
$row = self::get_node( $node_id );
|
1733 |
+
$new_row_id = self::generate_node_id();
|
1734 |
+
$col_groups = self::get_nodes( 'column-group', $row );
|
1735 |
+
$new_nodes = array();
|
1736 |
+
$template_cols = array();
|
1737 |
|
1738 |
// Add the new row.
|
1739 |
+
$layout_data[ $new_row_id ] = clone $row;
|
1740 |
+
$layout_data[ $new_row_id ]->settings = clone $row->settings;
|
1741 |
+
$layout_data[ $new_row_id ]->node = $new_row_id;
|
1742 |
|
1743 |
// Unset row template data.
|
1744 |
if ( isset( $layout_data[ $new_row_id ]->template_id ) ) {
|
1750 |
// Get the new child nodes.
|
1751 |
foreach ( $col_groups as $col_group ) {
|
1752 |
|
1753 |
+
$new_nodes[ $col_group->node ] = clone $col_group;
|
1754 |
+
$cols = self::get_nodes( 'column', $col_group );
|
1755 |
|
1756 |
foreach ( $cols as $col ) {
|
1757 |
|
1758 |
+
$new_nodes[ $col->node ] = clone $col;
|
1759 |
+
$new_nodes[ $col->node ]->settings = clone $col->settings;
|
1760 |
+
$nodes = self::get_nodes( null, $col );
|
1761 |
|
1762 |
foreach ( $nodes as $node ) {
|
1763 |
|
1771 |
|
1772 |
foreach ( $nested_cols as $nested_col ) {
|
1773 |
|
1774 |
+
$new_nodes[ $nested_col->node ] = clone $nested_col;
|
1775 |
$new_nodes[ $nested_col->node ]->settings = clone $nested_col->settings;
|
1776 |
+
$modules = self::get_nodes( 'module', $nested_col );
|
1777 |
|
1778 |
foreach ( $modules as $module ) {
|
1779 |
+
$new_nodes[ $module->node ] = clone $module;
|
1780 |
$new_nodes[ $module->node ]->settings = self::clone_module_settings( $module->settings );
|
1781 |
}
|
1782 |
}
|
1869 |
$mp4 = FLBuilderPhoto::get_attachment_data( $new_settings->bg_video );
|
1870 |
|
1871 |
if ( $mp4 ) {
|
1872 |
+
$parts = explode( '.', $mp4->filename );
|
1873 |
+
$mp4->extension = array_pop( $parts );
|
1874 |
+
$new_settings->bg_video_data = $mp4;
|
1875 |
$new_settings->bg_video_data->fallback = $fallback;
|
1876 |
}
|
1877 |
|
1879 |
$webm = FLBuilderPhoto::get_attachment_data( $new_settings->bg_video_webm );
|
1880 |
|
1881 |
if ( $webm ) {
|
1882 |
+
$parts = explode( '.', $webm->filename );
|
1883 |
+
$webm->extension = array_pop( $parts );
|
1884 |
+
$new_settings->bg_video_webm_data = $webm;
|
1885 |
$new_settings->bg_video_webm_data->fallback = $fallback;
|
1886 |
}
|
1887 |
}
|
1896 |
}
|
1897 |
|
1898 |
// Hijack the slideshow module to get WordPress photo data.
|
1899 |
+
$ss = new FLSlideshowModule();
|
1900 |
+
$ss->settings = new StdClass();
|
1901 |
+
$ss->settings->photos = $new_settings->ss_photos;
|
1902 |
+
$ss->settings->photo_data = $row->settings->ss_photo_data;
|
1903 |
+
$new_settings->ss_photo_data = $ss->get_wordpress_photos();
|
1904 |
}
|
1905 |
|
1906 |
return $new_settings;
|
1920 |
if ( 'video' == $row->settings->bg_type ) {
|
1921 |
|
1922 |
if ( isset( $row->settings->bg_video_data ) ) {
|
1923 |
+
$data = array();
|
1924 |
$data['mp4'] = $row->settings->bg_video_data;
|
1925 |
}
|
1926 |
if ( isset( $row->settings->bg_video_webm_data ) ) {
|
1957 |
}
|
1958 |
|
1959 |
// Hijack the slideshow module to get the source.
|
1960 |
+
$ss = new FLSlideshowModule();
|
1961 |
+
$ss->settings = new StdClass();
|
1962 |
+
$ss->settings->source = $row->settings->ss_source;
|
1963 |
+
$ss->settings->photos = $row->settings->ss_photos;
|
1964 |
+
$ss->settings->feed_url = $row->settings->ss_feed_url;
|
1965 |
+
$ss->settings->photo_data = $row->settings->ss_photo_data;
|
1966 |
|
1967 |
// Return the slideshow source.
|
1968 |
return $ss->get_source();
|
1977 |
* @return void
|
1978 |
*/
|
1979 |
static public function resize_row_content( $node_id, $width ) {
|
1980 |
+
$data = self::get_layout_data();
|
1981 |
+
$row = self::get_node( $node_id );
|
1982 |
$row->settings->max_content_width = $width;
|
1983 |
+
$data[ $node_id ] = $row;
|
1984 |
self::update_layout_data( $data );
|
1985 |
}
|
1986 |
|
1995 |
* @return object The new column group object.
|
1996 |
*/
|
1997 |
static public function add_col_group( $node_id = null, $cols = '1-col', $position = false, $module = null ) {
|
1998 |
+
$data = self::get_layout_data();
|
1999 |
+
$group_node_id = self::generate_node_id();
|
2000 |
+
$parent = self::get_node( $node_id );
|
2001 |
+
$old_group = null;
|
2002 |
|
2003 |
// Add the column group.
|
2004 |
+
$data[ $group_node_id ] = new StdClass();
|
2005 |
+
$data[ $group_node_id ]->node = $group_node_id;
|
2006 |
+
$data[ $group_node_id ]->type = 'column-group';
|
2007 |
+
$data[ $group_node_id ]->parent = $node_id;
|
2008 |
+
$data[ $group_node_id ]->position = self::next_node_position( null, $node_id );
|
2009 |
+
$data[ $group_node_id ]->settings = '';
|
2010 |
|
2011 |
// Add node template data.
|
2012 |
if ( self::is_node_global( $parent ) ) {
|
2013 |
+
$data[ $group_node_id ]->template_id = $parent->template_id;
|
2014 |
$data[ $group_node_id ]->template_node_id = $group_node_id;
|
2015 |
}
|
2016 |
|
2019 |
|
2020 |
for ( $i = 0; $i < count( self::$row_layouts[ $cols ] ); $i++ ) {
|
2021 |
|
2022 |
+
$col_node_id = self::generate_node_id();
|
2023 |
+
$data[ $col_node_id ] = new StdClass();
|
2024 |
+
$data[ $col_node_id ]->node = $col_node_id;
|
2025 |
+
$data[ $col_node_id ]->type = 'column';
|
2026 |
+
$data[ $col_node_id ]->parent = $group_node_id;
|
2027 |
+
$data[ $col_node_id ]->position = $i;
|
2028 |
+
$data[ $col_node_id ]->settings = new StdClass();
|
2029 |
$data[ $col_node_id ]->settings->size = self::$row_layouts[ $cols ][ $i ];
|
2030 |
|
2031 |
if ( self::is_node_global( $parent ) ) {
|
2032 |
+
$data[ $col_node_id ]->template_id = $parent->template_id;
|
2033 |
$data[ $col_node_id ]->template_node_id = $col_node_id;
|
2034 |
}
|
2035 |
}
|
2045 |
$data[ $cols ]->settings->size = 100;
|
2046 |
|
2047 |
if ( self::is_node_global( $parent ) ) {
|
2048 |
+
$data[ $cols ]->template_id = $parent->template_id;
|
2049 |
$data[ $cols ]->template_node_id = $data[ $cols ]->node;
|
2050 |
}
|
2051 |
|
2079 |
// Move an existing module to the group.
|
2080 |
if ( $module ) {
|
2081 |
$cols = self::get_nodes( 'column', $group_node_id );
|
2082 |
+
$col = array_shift( $cols );
|
2083 |
self::move_node( $module, $col->node, 0 );
|
2084 |
}
|
2085 |
|
2107 |
$new_settings->size = self::resize_col( $col->node, $new_settings->size );
|
2108 |
|
2109 |
// Update other sibling vars as needed.
|
2110 |
+
$equal_height = false;
|
2111 |
+
$content_alignment = false;
|
2112 |
+
$responsive_order = false;
|
2113 |
|
2114 |
// Adjust sibling equal height?
|
2115 |
if ( $col->settings->equal_height != $new_settings->equal_height ) {
|
2116 |
$equal_height = $new_settings->equal_height;
|
2117 |
}
|
2118 |
|
2119 |
+
// Adjust sibling content alignment?
|
2120 |
if ( $col->settings->content_alignment != $new_settings->content_alignment ) {
|
2121 |
$content_alignment = $new_settings->content_alignment;
|
2122 |
}
|
2244 |
* @return int The new width
|
2245 |
*/
|
2246 |
static public function resize_col( $node_id = null, $new_width = 100 ) {
|
2247 |
+
$data = self::get_layout_data();
|
2248 |
+
$col = $data[ $node_id ];
|
2249 |
+
$group = $data[ $col->parent ];
|
2250 |
+
$cols = array_values( self::get_nodes( 'column', $group->node ) );
|
2251 |
+
$pos = $col->position;
|
2252 |
+
$siblings = array();
|
2253 |
$siblings_width = 0;
|
2254 |
+
$num_cols = count( $cols );
|
2255 |
+
$min_width = 8;
|
2256 |
+
$max_width = 100 - $min_width;
|
2257 |
|
2258 |
// Don't resize if only one column or width isn't a number.
|
2259 |
if ( 1 == $num_cols || ! is_numeric( $new_width ) ) {
|
2282 |
continue;
|
2283 |
}
|
2284 |
|
2285 |
+
$siblings[] = $c;
|
2286 |
+
$max_width -= $c->settings->size;
|
2287 |
$siblings_width += $c->settings->size;
|
2288 |
}
|
2289 |
|
2348 |
return;
|
2349 |
}
|
2350 |
|
2351 |
+
$data = self::get_layout_data();
|
2352 |
+
$post_data = self::get_post_data();
|
2353 |
+
$cols = self::get_nodes( 'column', $group_id );
|
2354 |
+
$width = round( 100 / count( $cols ), 3 );
|
2355 |
|
2356 |
foreach ( $cols as $col_id => $col ) {
|
2357 |
$data[ $col_id ]->settings->size = $width;
|
2409 |
* @return object
|
2410 |
*/
|
2411 |
static public function add_cols( $col_id, $insert = 'before', $type = '1-col', $nested = false, $module = null ) {
|
2412 |
+
$data = self::get_layout_data();
|
2413 |
+
$col = self::get_node( $col_id );
|
2414 |
+
$parent = self::get_node( $col->parent );
|
2415 |
+
$cols = self::get_nodes( 'column', $col->parent );
|
2416 |
$global = self::is_node_global( $parent );
|
2417 |
$num_new_cols = count( self::$row_layouts[ $type ] );
|
2418 |
+
$num_cols = count( $cols );
|
2419 |
$max_cols = $nested ? 4 : 12;
|
2420 |
$reposition = false;
|
2421 |
$position = 0;
|
2447 |
// Add the new columns.
|
2448 |
for ( $i = 0; $i < $num_new_cols; $i++ ) {
|
2449 |
|
2450 |
+
$new_col_id = self::generate_node_id();
|
2451 |
+
$data[ $new_col_id ] = new StdClass();
|
2452 |
+
$data[ $new_col_id ]->node = $new_col_id;
|
2453 |
+
$data[ $new_col_id ]->type = 'column';
|
2454 |
+
$data[ $new_col_id ]->parent = $parent->node;
|
2455 |
+
$data[ $new_col_id ]->position = $new_col_position;
|
2456 |
+
$data[ $new_col_id ]->settings = new StdClass();
|
2457 |
+
$data[ $new_col_id ]->settings->size = $new_width;
|
2458 |
|
2459 |
// Add node template data.
|
2460 |
if ( $global ) {
|
2461 |
+
$data[ $new_col_id ]->template_id = $parent->template_id;
|
2462 |
$data[ $new_col_id ]->template_node_id = $new_col_id;
|
2463 |
}
|
2464 |
|
2509 |
* @return string|null The new parent ID or null if none exists.
|
2510 |
*/
|
2511 |
static public function add_col_parent( $parent_id = null, $position = null ) {
|
2512 |
+
$data = self::get_layout_data();
|
2513 |
+
$parent = ! $parent_id ? null : self::get_node( $parent_id );
|
2514 |
|
2515 |
if ( ! $parent ) {
|
2516 |
// Add a new row if we don't have a parent, but don't add column.
|
2517 |
+
$row = self::add_row( null, $position );
|
2518 |
$col_groups = self::get_nodes( 'column-group', $row->node );
|
2519 |
+
$col_group = array_shift( $col_groups );
|
2520 |
+
$parent_id = $col_group->node;
|
2521 |
} elseif ( 'row' == $parent->type ) {
|
2522 |
// Add a new column group if the parent is a row, but don't add column.
|
2523 |
+
$col_group = self::add_col_group( $parent->node, null, $position );
|
2524 |
+
$parent_id = $col_group->node;
|
2525 |
}
|
2526 |
|
2527 |
return $parent_id;
|
2537 |
*/
|
2538 |
static public function get_col_parent( $type, $column_id ) {
|
2539 |
$column = is_object( $column_id ) ? $column_id : self::get_node( $column_id );
|
2540 |
+
$nodes = self::get_categorized_nodes();
|
2541 |
|
2542 |
foreach ( $nodes['groups'] as $group ) {
|
2543 |
|
2570 |
*/
|
2571 |
static public function copy_col( $node_id = null, $settings = null, $settings_id = null ) {
|
2572 |
$layout_data = self::get_layout_data();
|
2573 |
+
$col = self::get_node( $node_id );
|
2574 |
+
$new_col_id = self::generate_node_id();
|
2575 |
+
$nodes = self::get_nodes( null, $col );
|
2576 |
+
$parent = self::get_node_parent( $node_id );
|
2577 |
+
$new_nodes = array();
|
2578 |
|
2579 |
// Add the new column.
|
2580 |
+
$layout_data[ $new_col_id ] = clone $col;
|
2581 |
+
$layout_data[ $new_col_id ]->settings = clone $col->settings;
|
2582 |
+
$layout_data[ $new_col_id ]->node = $new_col_id;
|
2583 |
|
2584 |
// Unset column template data.
|
2585 |
if ( isset( $layout_data[ $new_col_id ]->template_id ) ) {
|
2591 |
|
2592 |
// Check if parent is a global node.
|
2593 |
if ( self::is_node_global( $parent ) ) {
|
2594 |
+
$layout_data[ $new_col_id ]->template_id = $parent->template_id;
|
2595 |
$layout_data[ $new_col_id ]->template_node_id = $new_col_id;
|
2596 |
} else {
|
2597 |
unset( $layout_data[ $new_col_id ]->template_id );
|
2614 |
|
2615 |
foreach ( $nested_cols as $nested_col ) {
|
2616 |
|
2617 |
+
$new_nodes[ $nested_col->node ] = clone $nested_col;
|
2618 |
$new_nodes[ $nested_col->node ]->settings = clone $nested_col->settings;
|
2619 |
+
$modules = self::get_nodes( 'module', $nested_col );
|
2620 |
|
2621 |
foreach ( $modules as $module ) {
|
2622 |
+
$new_nodes[ $module->node ] = clone $module;
|
2623 |
$new_nodes[ $module->node ]->settings = self::clone_module_settings( $module->settings );
|
2624 |
}
|
2625 |
}
|
2646 |
if ( isset( $new_nodes[ $child_node_id ]->template_id ) ) {
|
2647 |
// Check if the column is global.
|
2648 |
if ( isset( $layout_data[ $new_col_id ]->template_node_id ) ) {
|
2649 |
+
$new_nodes[ $child_node_id ]->template_id = $parent->template_id;
|
2650 |
$new_nodes[ $child_node_id ]->template_node_id = $child_node_id;
|
2651 |
} else {
|
2652 |
unset( $new_nodes[ $child_node_id ]->template_id );
|
2691 |
*/
|
2692 |
static public function load_modules() {
|
2693 |
$paths = glob( FL_BUILDER_DIR . 'modules/*' );
|
2694 |
+
/**
|
2695 |
+
* Filter the modules paths.
|
2696 |
+
* @see fl_builder_load_modules_paths
|
2697 |
+
*/
|
2698 |
+
$paths = apply_filters( 'fl_builder_load_modules_paths', $paths );
|
2699 |
$module_path = '';
|
2700 |
|
2701 |
// Make sure we have an array.
|
2715 |
$slug = basename( $path );
|
2716 |
|
2717 |
// Paths to check.
|
2718 |
+
$module_path = $slug . '/' . $slug . '.php';
|
2719 |
+
$child_path = get_stylesheet_directory() . '/fl-builder/modules/' . $module_path;
|
2720 |
+
$theme_path = get_template_directory() . '/fl-builder/modules/' . $module_path;
|
2721 |
+
$builder_path = FL_BUILDER_DIR . 'modules/' . $module_path;
|
2722 |
|
2723 |
// Check for the module class in a child theme.
|
2724 |
if ( is_child_theme() && file_exists( $child_path ) ) {
|
2729 |
require_once $builder_path;
|
2730 |
}
|
2731 |
}
|
2732 |
+
/**
|
2733 |
+
* After modules are included.
|
2734 |
+
* @see fl_builder_register_extensions
|
2735 |
+
*/
|
2736 |
do_action( 'fl_builder_register_extensions' );
|
2737 |
}
|
2738 |
|
2771 |
* @see fl_builder_register_settings_form
|
2772 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
2773 |
*/
|
2774 |
+
self::$modules[ $instance->slug ]->form = apply_filters( 'fl_builder_register_settings_form', $form, $instance->slug );
|
2775 |
self::$modules[ $instance->slug ]->form['advanced'] = self::$settings_forms['module_advanced'];
|
2776 |
}
|
2777 |
}
|
2790 |
_doing_it_wrong( __CLASS__ . '::register_module_alias', sprintf( _x( 'The module alias %s already exists! Please namespace your module aliases to ensure compatibility with Beaver Builder.', '%s stands for the module alias key', 'fl-builder' ), $alias ), '1.10' );
|
2791 |
return;
|
2792 |
}
|
2793 |
+
if ( ! $config['module'] || ! isset( self::$modules[ $config['module'] ] ) ) {
|
2794 |
+
return;
|
2795 |
+
}
|
2796 |
|
2797 |
+
$module = self::$modules[ $config['module'] ];
|
2798 |
+
$instance = new stdClass;
|
2799 |
+
$instance->alias = $alias;
|
2800 |
+
$instance->slug = isset( $config['module'] ) ? $config['module'] : null;
|
2801 |
+
$instance->name = isset( $config['name'] ) ? $config['name'] : $instance->slug;
|
2802 |
+
$instance->description = isset( $config['description'] ) ? $config['description'] : '';
|
2803 |
+
$instance->category = isset( $config['category'] ) ? $config['category'] : null;
|
2804 |
+
$instance->group = isset( $config['group'] ) ? $config['group'] : null;
|
2805 |
+
$instance->settings = isset( $config['settings'] ) ? $config['settings'] : array();
|
2806 |
+
$instance->enabled = isset( $config['enabled'] ) ? $config['enabled'] : true;
|
2807 |
+
$instance->icon = isset( $config['icon'] ) ? $module->get_icon( $config['icon'] ) : FLBuilderModule::get_default_icon();
|
2808 |
|
2809 |
self::$module_aliases[ $alias ] = $instance;
|
2810 |
}
|
2874 |
$setting = self::get_default_enabled_modules();
|
2875 |
} elseif ( in_array( 'all', $setting ) ) {
|
2876 |
// Redefine $setting in case new modules have been installed since the last save.
|
2877 |
+
$setting = array_keys( self::$modules );
|
2878 |
$setting[] = 'all';
|
2879 |
}
|
2880 |
|
2917 |
}
|
2918 |
}
|
2919 |
|
2920 |
+
// Add module alias groups.
|
2921 |
+
foreach ( self::$module_aliases as $alias => $config ) {
|
2922 |
+
|
2923 |
+
if ( ! $config->group || ! $config->enabled ) {
|
2924 |
+
continue;
|
2925 |
+
}
|
2926 |
+
|
2927 |
+
$slug = sanitize_key( $config->group );
|
2928 |
+
|
2929 |
+
if ( ! isset( $groups[ $slug ] ) ) {
|
2930 |
+
$groups[ $slug ] = $config->group;
|
2931 |
+
}
|
2932 |
+
}
|
2933 |
+
|
2934 |
// Add module template groups.
|
2935 |
if ( isset( $templates['groups'] ) ) {
|
2936 |
foreach ( $templates['groups'] as $slug => $data ) {
|
2964 |
}
|
2965 |
|
2966 |
// Build the default category arrays.
|
2967 |
+
$categories[ __( 'Basic', 'fl-builder' ) ] = array();
|
2968 |
+
$categories[ __( 'Media', 'fl-builder' ) ] = array();
|
2969 |
+
$categories[ __( 'Actions', 'fl-builder' ) ] = array();
|
2970 |
+
$categories[ __( 'Layout', 'fl-builder' ) ] = array();
|
2971 |
+
$categories[ __( 'Info', 'fl-builder' ) ] = array();
|
2972 |
+
$categories[ __( 'Posts', 'fl-builder' ) ] = array();
|
2973 |
$categories[ __( 'Advanced', 'fl-builder' ) ] = array();
|
2974 |
+
$categories[ __( 'Other', 'fl-builder' ) ] = array();
|
2975 |
|
2976 |
return $categories;
|
2977 |
}
|
2984 |
* @return array
|
2985 |
*/
|
2986 |
static public function get_categorized_modules( $show_disabled = false ) {
|
2987 |
+
$enabled_modules = self::get_enabled_modules();
|
2988 |
+
$widgets = null;
|
2989 |
+
$categories = self::get_module_categories();
|
2990 |
+
$other_key = __( 'Other', 'fl-builder' );
|
2991 |
+
$widgets_key = __( 'WordPress Widgets', 'fl-builder' );
|
2992 |
|
2993 |
// Build the categories array.
|
2994 |
foreach ( self::$modules as $module ) {
|
3051 |
*/
|
3052 |
static public function get_uncategorized_modules( $show_disabled = false ) {
|
3053 |
$enabled_modules = self::get_enabled_modules();
|
3054 |
+
$modules = array();
|
3055 |
+
$aliases = self::$module_aliases;
|
3056 |
+
$widgets = FLBuilderModel::get_wp_widgets();
|
3057 |
|
3058 |
foreach ( self::$modules as $module ) {
|
3059 |
|
3065 |
continue;
|
3066 |
}
|
3067 |
|
3068 |
+
$module = clone $module;
|
3069 |
+
$module->kind = 'module';
|
3070 |
$module->isWidget = false; // @codingStandardsIgnoreLine
|
3071 |
+
$module->isAlias = false; // @codingStandardsIgnoreLine
|
3072 |
+
$module->group = $module->group ? array( sanitize_key( $module->group ) ) : array( 'standard' );
|
3073 |
|
3074 |
if ( ! isset( $module->icon ) || '' == $module->icon ) {
|
3075 |
$module->icon = FLBuilderModule::get_default_icon();
|
3100 |
$categories[ $config->category ] = array();
|
3101 |
}
|
3102 |
|
3103 |
+
$config->kind = 'module';
|
3104 |
$config->isWidget = false; // @codingStandardsIgnoreLine
|
3105 |
$config->isAlias = true; // @codingStandardsIgnoreLine
|
3106 |
+
$config->group = $config->group ? array( sanitize_key( $config->group ) ) : array( 'standard' );
|
3107 |
|
3108 |
$modules[] = $config;
|
3109 |
}
|
3112 |
if ( in_array( 'widget', $enabled_modules ) ) {
|
3113 |
foreach ( $widgets as $widget ) {
|
3114 |
|
3115 |
+
$data = new stdClass;
|
3116 |
+
$widget = (object) $widget;
|
3117 |
+
$data->id = $widget->id;
|
3118 |
+
$data->name = $widget->name;
|
3119 |
+
$data->class = $widget->class;
|
3120 |
+
$data->category = $widget->category;
|
3121 |
+
$data->kind = 'module';
|
3122 |
$data->isWidget = true; // @codingStandardsIgnoreLine
|
3123 |
$data->isAlias = false; // @codingStandardsIgnoreLine
|
3124 |
$data->description = isset( $widget->widget_options['description'] ) ? $widget->widget_options['description'] : '';
|
3147 |
|
3148 |
if ( self::is_module_registered( $module->settings->type ) ) {
|
3149 |
|
3150 |
+
$class = get_class( self::$modules[ $module->settings->type ] );
|
3151 |
+
$instance = new $class();
|
3152 |
+
$instance->node = $module->node;
|
3153 |
+
$instance->parent = $module->parent;
|
3154 |
$instance->position = $module->position;
|
3155 |
$instance->settings = $module->settings;
|
3156 |
+
$instance->type = 'module';
|
3157 |
+
$instance->form = self::$modules[ $module->settings->type ]->form;
|
3158 |
+
$instance->icon = isset( $module->icon ) ? $module->icon : FLBuilderModule::get_default_icon();
|
3159 |
|
3160 |
if ( isset( $module->template_id ) ) {
|
3161 |
+
$instance->template_id = $module->template_id;
|
3162 |
+
$instance->template_node_id = $module->template_node_id;
|
3163 |
}
|
3164 |
if ( isset( $module->template_root_node ) ) {
|
3165 |
$instance->template_root_node = true;
|
3180 |
* @return array
|
3181 |
*/
|
3182 |
static public function get_modules( $col_id = null ) {
|
3183 |
+
$col = is_object( $col_id ) ? $col_id : self::get_node( $col_id );
|
3184 |
+
$modules = self::get_nodes( 'module', $col );
|
3185 |
+
$instances = array();
|
3186 |
+
$i = 0;
|
3187 |
|
3188 |
foreach ( $modules as $module ) {
|
3189 |
|
3190 |
if ( self::is_module_registered( $module->settings->type ) ) {
|
3191 |
|
3192 |
+
$class = get_class( self::$modules[ $module->settings->type ] );
|
3193 |
+
$instances[ $i ] = new $class();
|
3194 |
+
$instances[ $i ]->node = $module->node;
|
3195 |
+
$instances[ $i ]->parent = $module->parent;
|
3196 |
+
$instances[ $i ]->position = $module->position;
|
3197 |
+
$instances[ $i ]->settings = $module->settings;
|
3198 |
+
$instances[ $i ]->type = 'module';
|
3199 |
+
$instances[ $i ]->icon = isset( $module->icon ) ? $module->icon : FLBuilderModule::get_default_icon();
|
3200 |
+
$instances[ $i ]->form = self::$modules[ $module->settings->type ]->form;
|
3201 |
|
3202 |
if ( isset( $module->template_id ) ) {
|
3203 |
+
$instances[ $i ]->template_id = $module->template_id;
|
3204 |
$instances[ $i ]->template_node_id = $module->template_node_id;
|
3205 |
}
|
3206 |
if ( isset( $module->template_root_node ) ) {
|
3235 |
* @return object The new module object.
|
3236 |
*/
|
3237 |
static public function add_module( $type = null, $settings = array(), $parent_id = null, $position = false ) {
|
3238 |
+
$data = self::get_layout_data();
|
3239 |
+
$parent = self::get_node( $parent_id );
|
3240 |
+
$module_node_id = self::generate_node_id();
|
3241 |
+
$settings->type = $type;
|
3242 |
|
3243 |
// Run module update method.
|
3244 |
+
$class = get_class( self::$modules[ $type ] );
|
3245 |
+
$instance = new $class();
|
3246 |
+
$instance->node = $module_node_id;
|
3247 |
+
$instance->settings = $settings;
|
3248 |
+
$settings = $instance->update( $settings );
|
3249 |
|
3250 |
// Save the module.
|
3251 |
+
$data[ $module_node_id ] = new StdClass();
|
3252 |
+
$data[ $module_node_id ]->node = $module_node_id;
|
3253 |
+
$data[ $module_node_id ]->type = 'module';
|
3254 |
+
$data[ $module_node_id ]->parent = $parent_id;
|
3255 |
+
$data[ $module_node_id ]->position = self::next_node_position( 'module', $parent_id );
|
3256 |
+
$data[ $module_node_id ]->settings = $settings;
|
3257 |
|
3258 |
// Add node template data.
|
3259 |
if ( self::is_node_global( $parent ) ) {
|
3260 |
+
$data[ $module_node_id ]->template_id = $parent->template_id;
|
3261 |
+
$data[ $module_node_id ]->template_node_id = $module_node_id;
|
3262 |
}
|
3263 |
|
3264 |
// Update the layout data.
|
3287 |
|
3288 |
if ( ! $parent ) {
|
3289 |
// Add a new row if we don't have a parent.
|
3290 |
+
$row = self::add_row( '1-col', $position );
|
3291 |
$col_groups = self::get_nodes( 'column-group', $row->node );
|
3292 |
+
$col_group = array_shift( $col_groups );
|
3293 |
+
$cols = self::get_nodes( 'column', $col_group->node );
|
3294 |
+
$parent = array_shift( $cols );
|
3295 |
+
$parent_id = $parent->node;
|
3296 |
} elseif ( 'row' == $parent->type ) {
|
3297 |
// Add a new column group if the parent is a row.
|
3298 |
+
$col_group = self::add_col_group( $parent->node, '1-col', $position );
|
3299 |
+
$cols = self::get_nodes( 'column', $col_group->node );
|
3300 |
+
$parent = array_shift( $cols );
|
3301 |
+
$parent_id = $parent->node;
|
3302 |
} elseif ( 'column-group' == $parent->type ) {
|
3303 |
// Add a new column if the parent is a column group.
|
3304 |
+
$parent = self::add_col( $parent->node, $position );
|
3305 |
+
$parent_id = $parent->node;
|
3306 |
}
|
3307 |
|
3308 |
return $parent_id;
|
3318 |
*/
|
3319 |
static public function get_module_parent( $type, $module_id ) {
|
3320 |
$module = is_object( $module_id ) ? $module_id : self::get_module( $module_id );
|
3321 |
+
$nodes = self::get_categorized_nodes();
|
3322 |
|
3323 |
foreach ( $nodes['columns'] as $column ) {
|
3324 |
|
3362 |
* @return array $defaults Default settings for the module.
|
3363 |
*/
|
3364 |
static public function add_default_module( $parent_id = null, $type = null, $position = null, $defaults = null ) {
|
3365 |
+
$parent = ( 0 == $parent_id ) ? null : self::get_node( $parent_id );
|
3366 |
+
$settings = self::get_module_defaults( $type );
|
3367 |
$module_node_id = self::generate_node_id();
|
3368 |
|
3369 |
// Add a new parent if one is needed.
|
3370 |
if ( ! $parent || 'row' == $parent->type || 'column-group' == $parent->type ) {
|
3371 |
$parent_id = self::add_module_parent( $parent_id, $position );
|
3372 |
+
$parent = self::get_node( $parent_id );
|
3373 |
$position = null;
|
3374 |
}
|
3375 |
|
3379 |
}
|
3380 |
|
3381 |
// Run module update method.
|
3382 |
+
$class = get_class( self::$modules[ $type ] );
|
3383 |
+
$instance = new $class();
|
3384 |
+
$instance->node = $module_node_id;
|
3385 |
+
$instance->settings = $settings;
|
3386 |
+
$settings = $instance->update( $settings );
|
3387 |
|
3388 |
// Save the module.
|
3389 |
+
$data = self::get_layout_data();
|
3390 |
+
$data[ $module_node_id ] = new StdClass();
|
3391 |
+
$data[ $module_node_id ]->node = $module_node_id;
|
3392 |
+
$data[ $module_node_id ]->type = 'module';
|
3393 |
+
$data[ $module_node_id ]->parent = $parent_id;
|
3394 |
+
$data[ $module_node_id ]->position = self::next_node_position( 'module', $parent_id );
|
3395 |
+
$data[ $module_node_id ]->settings = $settings;
|
3396 |
|
3397 |
// Add node template data.
|
3398 |
if ( self::is_node_global( $parent ) ) {
|
3399 |
+
$data[ $module_node_id ]->template_id = $parent->template_id;
|
3400 |
+
$data[ $module_node_id ]->template_node_id = $module_node_id;
|
3401 |
}
|
3402 |
|
3403 |
// Update the layout data.
|
3421 |
* @return object The new module object.
|
3422 |
*/
|
3423 |
static public function copy_module( $node_id = null, $settings = null ) {
|
3424 |
+
$module = self::get_module( $node_id );
|
3425 |
|
3426 |
if ( $settings ) {
|
3427 |
$module->settings = (object) array_merge( (array) $module->settings, (array) $settings );
|
3440 |
*/
|
3441 |
static public function process_module_settings( $module, $new_settings ) {
|
3442 |
// Get a new node instance to work with.
|
3443 |
+
$class = get_class( self::$modules[ $module->settings->type ] );
|
3444 |
+
$instance = new $class();
|
3445 |
+
$instance->node = $module->node;
|
3446 |
+
$instance->parent = $module->parent;
|
3447 |
$instance->settings = $module->settings;
|
3448 |
|
3449 |
// Run node delete to clear any cache.
|
3451 |
|
3452 |
// Run node update.
|
3453 |
$instance->settings = $new_settings;
|
3454 |
+
$new_settings = $instance->update( $new_settings );
|
3455 |
|
3456 |
return $new_settings;
|
3457 |
}
|
3488 |
$defaults = new StdClass();
|
3489 |
|
3490 |
if ( isset( self::$modules[ $type ]->form ) ) {
|
3491 |
+
$defaults = self::get_settings_form_defaults( $type );
|
3492 |
+
$defaults = self::merge_nested_module_defaults( $type, $defaults );
|
3493 |
$defaults->type = $type;
|
3494 |
}
|
3495 |
} else {
|
3527 |
|
3528 |
$widgets = array();
|
3529 |
|
3530 |
+
/**
|
3531 |
+
* Array of known widgets that won't work in the builder.
|
3532 |
+
* @see fl_get_wp_widgets_exclude
|
3533 |
+
*/
|
3534 |
$exclude = apply_filters( 'fl_get_wp_widgets_exclude', array(
|
3535 |
'WP_Widget_Media_Audio',
|
3536 |
'WP_Widget_Media_Image',
|
3584 |
static public function get_column_groups() {
|
3585 |
$cols = array(
|
3586 |
array(
|
3587 |
+
'name' => __( '1 Column', 'fl-builder' ),
|
3588 |
+
'id' => '1-col',
|
3589 |
'count' => 1,
|
3590 |
),
|
3591 |
array(
|
3592 |
+
'name' => __( '2 Columns', 'fl-builder' ),
|
3593 |
+
'id' => '2-cols',
|
3594 |
'count' => 2,
|
3595 |
),
|
3596 |
array(
|
3597 |
+
'name' => __( '3 Columns', 'fl-builder' ),
|
3598 |
+
'id' => '3-cols',
|
3599 |
'count' => 3,
|
3600 |
),
|
3601 |
array(
|
3602 |
+
'name' => __( '4 Columns', 'fl-builder' ),
|
3603 |
+
'id' => '4-cols',
|
3604 |
'count' => 4,
|
3605 |
),
|
3606 |
array(
|
3607 |
+
'name' => __( '5 Columns', 'fl-builder' ),
|
3608 |
+
'id' => '5-cols',
|
3609 |
'count' => 5,
|
3610 |
),
|
3611 |
array(
|
3612 |
+
'name' => __( '6 Columns', 'fl-builder' ),
|
3613 |
+
'id' => '6-cols',
|
3614 |
'count' => 6,
|
3615 |
),
|
3616 |
array(
|
3617 |
+
'name' => __( 'Left Sidebar', 'fl-builder' ),
|
3618 |
+
'id' => 'left-sidebar',
|
3619 |
'count' => 2,
|
3620 |
),
|
3621 |
array(
|
3622 |
+
'name' => __( 'Right Sidebar', 'fl-builder' ),
|
3623 |
+
'id' => 'right-sidebar',
|
3624 |
'count' => 2,
|
3625 |
),
|
3626 |
array(
|
3627 |
+
'name' => __( 'Left & Right Sidebar', 'fl-builder' ),
|
3628 |
+
'id' => 'left-right-sidebar',
|
3629 |
'count' => 3,
|
3630 |
),
|
3631 |
);
|
3743 |
// Check the registered forms first.
|
3744 |
if ( isset( self::$settings_forms[ $type ] ) ) {
|
3745 |
$form_type = $type;
|
3746 |
+
$tabs = self::$settings_forms[ $type ]['tabs'];
|
3747 |
} elseif ( isset( self::$modules[ $type ] ) ) {
|
3748 |
$form_type = $type . '-module';
|
3749 |
+
$tabs = self::$modules[ $type ]->form;
|
3750 |
} else {
|
3751 |
return $defaults;
|
3752 |
}
|
3760 |
// Add the root name if needed later for synthetic fields like
|
3761 |
// the dimension fields being synthesized below.
|
3762 |
$fields[ $name ]['root_name'] = $name;
|
3763 |
+
$field['root_name'] = $name;
|
3764 |
|
3765 |
// Handle dimension fields. We have to do it this way for backwards compat
|
3766 |
// with old margin, padding, and border fields as the settings expect margin_top
|
3806 |
|
3807 |
$response_suffix = ( 'default' == $device ? '' : '_' . $device );
|
3808 |
$responsive_name = $name . $response_suffix;
|
3809 |
+
$unit_name = $field['root_name'] . $response_suffix . '_unit';
|
3810 |
|
3811 |
// Add the default value.
|
3812 |
if ( is_array( $responsive ) && isset( $responsive['default'] ) && isset( $responsive['default'][ $device ] ) ) {
|
3909 |
* @return void
|
3910 |
*/
|
3911 |
static public function save_settings( $node_id = null, $settings = null ) {
|
3912 |
+
$node = self::get_node( $node_id );
|
3913 |
+
$new_settings = (object) array_merge( (array) $node->settings, (array) $settings );
|
3914 |
+
$template_post_id = self::is_node_global( $node );
|
3915 |
|
3916 |
// Process the settings.
|
3917 |
$new_settings = self::process_node_settings( $node, $new_settings );
|
3918 |
|
3919 |
// Save the settings to the node.
|
3920 |
+
$data = self::get_layout_data();
|
3921 |
$data[ $node_id ]->settings = $new_settings;
|
3922 |
|
3923 |
// Update the layout data.
|
4064 |
static public function duplicate_post() {
|
4065 |
global $wpdb;
|
4066 |
|
4067 |
+
$post_id = self::get_post_id();
|
4068 |
+
$post = get_post( $post_id );
|
4069 |
$current_user = wp_get_current_user();
|
4070 |
$template_id = false;
|
4071 |
|
4072 |
// Duplicate the post.
|
4073 |
$data = array(
|
4074 |
'comment_status' => $post->comment_status,
|
4075 |
+
'ping_status' => $post->ping_status,
|
4076 |
+
'post_author' => $current_user->ID,
|
4077 |
+
'post_content' => $post->post_content,
|
4078 |
+
'post_excerpt' => $post->post_excerpt,
|
4079 |
+
'post_name' => $post->post_name . '-copy',
|
4080 |
+
'post_parent' => $post->post_parent,
|
4081 |
+
'post_password' => $post->post_password,
|
4082 |
+
'post_status' => 'draft',
|
4083 |
+
'post_title' => sprintf( _x( 'Copy of %s', '%s stands for post/page title.', 'fl-builder' ), $post->post_title ),
|
4084 |
+
'post_type' => $post->post_type,
|
4085 |
+
'to_ping' => $post->to_ping,
|
4086 |
+
'menu_order' => $post->menu_order,
|
4087 |
);
|
4088 |
|
4089 |
// Get the new post id.
|
4134 |
|
4135 |
// Update template ID and template node ID
|
4136 |
$template_id = get_post_meta( $new_post_id, '_fl_builder_template_id', true );
|
4137 |
+
$global = get_post_meta( $post_id, '_fl_builder_template_global', true );
|
4138 |
|
4139 |
if ( $template_id && $global ) {
|
4140 |
foreach ( $data as $node_id => $node ) {
|
4141 |
+
$data[ $node_id ]->template_id = $template_id;
|
4142 |
$data[ $node_id ]->template_node_id = $node_id;
|
4143 |
}
|
4144 |
}
|
4179 |
* @param int $post_id
|
4180 |
* @return void
|
4181 |
*/
|
4182 |
+
static public function save_revision( $post_id, $post, $update ) {
|
4183 |
|
4184 |
$parent_id = wp_is_post_revision( $post_id );
|
4185 |
|
4186 |
if ( $parent_id ) {
|
4187 |
|
4188 |
+
$parent = get_post( $parent_id );
|
4189 |
+
$data = self::get_layout_data( 'published', $parent->ID );
|
4190 |
+
$settings = self::get_layout_settings( 'published', $parent->ID );
|
4191 |
|
4192 |
if ( ! empty( $data ) ) {
|
4193 |
self::update_layout_data( $data, 'published', $post_id );
|
4217 |
* @since 2.1.5
|
4218 |
*/
|
4219 |
static public function save_layout_revision( $post_id ) {
|
4220 |
+
add_filter( 'wp_save_post_revision_post_has_changed', array( __CLASS__, 'save_layout_revision_changed_filter' ), 10, 3 );
|
4221 |
wp_save_post_revision( $post_id );
|
4222 |
remove_filter( 'wp_save_post_revision_post_has_changed', array( __CLASS__, 'save_layout_revision_changed_filter' ), 10, 3 );
|
4223 |
}
|
4231 |
|
4232 |
// get builder data for compare
|
4233 |
$old = serialize( get_post_meta( $last_revision->ID, '_fl_builder_data', true ) );
|
4234 |
+
$new = serialize( get_post_meta( $post->ID, '_fl_builder_data', true ) );
|
4235 |
|
4236 |
return $old != $new;
|
4237 |
}
|
4245 |
* @return void
|
4246 |
*/
|
4247 |
static public function restore_revision( $post_id, $revision_id ) {
|
4248 |
+
$post = get_post( $post_id );
|
4249 |
$revision = get_post( $revision_id );
|
4250 |
|
4251 |
if ( $revision ) {
|
4252 |
|
4253 |
+
$data = self::get_layout_data( 'published', $revision->ID );
|
4254 |
$settings = self::get_layout_settings( 'published', $revision->ID );
|
4255 |
|
4256 |
if ( ! empty( $data ) ) {
|
4279 |
* @return array
|
4280 |
*/
|
4281 |
static public function get_layout_data( $status = null, $post_id = null ) {
|
4282 |
+
$post_id = ! $post_id ? self::get_post_id() : $post_id;
|
4283 |
+
$status = ! $status ? self::get_node_status() : $status;
|
4284 |
|
4285 |
// Get layout metadata.
|
4286 |
if ( 'published' == $status || 'revision' == get_post_type( $post_id ) ) {
|
4287 |
if ( isset( self::$published_layout_data[ $post_id ] ) ) {
|
4288 |
$data = self::$published_layout_data[ $post_id ];
|
4289 |
} else {
|
4290 |
+
$data = get_metadata( 'post', $post_id, '_fl_builder_data', true );
|
4291 |
+
$data = self::clean_layout_data( $data );
|
4292 |
+
$data = FLBuilderSettingsCompat::filter_layout_data( $data );
|
4293 |
self::$published_layout_data[ $post_id ] = apply_filters( 'fl_builder_get_layout_metadata', $data, $status, $post_id );
|
4294 |
}
|
4295 |
} elseif ( 'draft' == $status ) {
|
4296 |
if ( isset( self::$draft_layout_data[ $post_id ] ) ) {
|
4297 |
$data = self::$draft_layout_data[ $post_id ];
|
4298 |
} else {
|
4299 |
+
$data = get_metadata( 'post', $post_id, '_fl_builder_draft', true );
|
4300 |
+
$data = self::clean_layout_data( $data );
|
4301 |
+
$data = FLBuilderSettingsCompat::filter_layout_data( $data );
|
4302 |
self::$draft_layout_data[ $post_id ] = apply_filters( 'fl_builder_get_layout_metadata', $data, $status, $post_id );
|
4303 |
}
|
4304 |
}
|
4315 |
}
|
4316 |
}
|
4317 |
|
4318 |
+
/**
|
4319 |
+
* Return the data.
|
4320 |
+
* @see fl_builder_layout_data
|
4321 |
+
*/
|
4322 |
return apply_filters( 'fl_builder_layout_data', $data, $status, $post_id );
|
4323 |
}
|
4324 |
|
4333 |
* @return void
|
4334 |
*/
|
4335 |
static public function update_layout_data( $data, $status = null, $post_id = null ) {
|
4336 |
+
$post_id = ! $post_id ? self::get_post_id() : $post_id;
|
4337 |
+
$status = ! $status ? self::get_node_status() : $status;
|
4338 |
+
$key = 'published' == $status ? '_fl_builder_data' : '_fl_builder_draft';
|
4339 |
+
$raw_data = get_metadata( 'post', $post_id, $key );
|
4340 |
+
$data = self::slash_settings( self::clean_layout_data( $data ) );
|
4341 |
|
4342 |
// Update the data.
|
4343 |
if ( 0 === count( $raw_data ) ) {
|
4426 |
* @return bool
|
4427 |
*/
|
4428 |
static public function layout_has_drafted_changes() {
|
4429 |
+
$post_id = FLBuilderModel::get_post_id();
|
4430 |
$published = serialize( self::get_layout_data( 'published', $post_id ) );
|
4431 |
+
$draft = serialize( self::get_layout_data( 'draft', $post_id ) );
|
4432 |
|
4433 |
if ( $published != $draft ) {
|
4434 |
return true;
|
4446 |
* @return object
|
4447 |
*/
|
4448 |
static public function get_layout_settings( $status = null, $post_id = null ) {
|
4449 |
+
$status = ! $status ? self::get_node_status() : $status;
|
4450 |
+
$post_id = ! $post_id ? self::get_post_id() : $post_id;
|
4451 |
+
$key = 'published' == $status ? '_fl_builder_data_settings' : '_fl_builder_draft_settings';
|
4452 |
+
$settings = get_metadata( 'post', $post_id, $key, true );
|
4453 |
+
$defaults = self::get_settings_form_defaults( 'layout' );
|
4454 |
|
4455 |
if ( ! $settings ) {
|
4456 |
$settings = new StdClass();
|
4471 |
* @return object
|
4472 |
*/
|
4473 |
static public function update_layout_settings( $settings = array(), $status = null, $post_id = null ) {
|
4474 |
+
$status = ! $status ? self::get_node_status() : $status;
|
4475 |
+
$post_id = ! $post_id ? self::get_post_id() : $post_id;
|
4476 |
+
$key = 'published' == $status ? '_fl_builder_data_settings' : '_fl_builder_draft_settings';
|
4477 |
+
$raw_settings = get_metadata( 'post', $post_id, $key );
|
4478 |
+
$old_settings = self::get_layout_settings( $status, $post_id );
|
4479 |
+
$new_settings = (object) array_merge( (array) $old_settings, (array) $settings );
|
4480 |
|
4481 |
if ( 0 === count( $raw_settings ) ) {
|
4482 |
add_metadata( 'post', $post_id, $key, self::slash_settings( $new_settings ) );
|
4509 |
* @return void
|
4510 |
*/
|
4511 |
static public function delete_layout_settings( $status = null, $post_id = null ) {
|
4512 |
+
$status = ! $status ? self::get_node_status() : $status;
|
4513 |
+
$post_id = ! $post_id ? self::get_post_id() : $post_id;
|
4514 |
+
$key = 'published' == $status ? '_fl_builder_data_settings' : '_fl_builder_draft_settings';
|
4515 |
|
4516 |
update_metadata( 'post', $post_id, $key, array() );
|
4517 |
}
|
4554 |
* @return void
|
4555 |
*/
|
4556 |
static public function clear_draft_layout() {
|
4557 |
+
$post_id = self::get_post_id();
|
4558 |
+
$data = self::get_layout_data( 'published', $post_id );
|
4559 |
+
$settings = self::get_layout_settings( 'published', $post_id );
|
4560 |
|
4561 |
// Delete the old draft layout.
|
4562 |
self::delete_layout_data( 'draft' );
|
4580 |
*/
|
4581 |
static public function save_layout( $publish = true ) {
|
4582 |
$editor_content = FLBuilder::render_editor_content();
|
4583 |
+
$post_id = self::get_post_id();
|
4584 |
+
$data = self::get_layout_data( 'draft', $post_id );
|
4585 |
+
$settings = self::get_layout_settings( 'draft', $post_id );
|
4586 |
|
4587 |
/**
|
4588 |
* This action allows you to hook into before the data is saved for a layout.
|
4612 |
// Publish the post?
|
4613 |
if ( $publish ) {
|
4614 |
|
4615 |
+
$is_draft = strstr( $post_status, 'draft' );
|
4616 |
+
$is_pending = strstr( $post_status, 'pending' );
|
4617 |
|
4618 |
if ( current_user_can( 'publish_posts' ) ) {
|
4619 |
$post_status = $is_draft || $is_pending ? 'publish' : $post_status;
|
4624 |
|
4625 |
// Update the post with stripped down content.
|
4626 |
wp_update_post(array(
|
4627 |
+
'ID' => self::get_post_id(),
|
4628 |
+
'post_status' => $post_status,
|
4629 |
+
'post_content' => $editor_content,
|
4630 |
));
|
4631 |
|
4632 |
// Rerender the assets for this layout.
|
4651 |
* @return void
|
4652 |
*/
|
4653 |
static public function save_draft() {
|
4654 |
+
$post_id = self::get_post_id();
|
4655 |
$post_status = get_post_status( $post_id );
|
4656 |
|
4657 |
if ( strstr( $post_status, 'draft' ) ) {
|
4658 |
self::save_layout( false );
|
4659 |
}
|
4660 |
|
4661 |
+
/**
|
4662 |
+
* After draft is saved.
|
4663 |
+
* @see fl_builder_after_save_draft
|
4664 |
+
*/
|
4665 |
do_action( 'fl_builder_after_save_draft', $post_id, $post_status );
|
4666 |
}
|
4667 |
|
4675 |
* @return array
|
4676 |
*/
|
4677 |
static public function duplicate_wpml_layout( $original_post_id = null, $new_post_id = null ) {
|
4678 |
+
$post_data = self::get_post_data();
|
4679 |
+
$original_post_id = isset( $post_data['original_post_id'] ) ? $post_data['original_post_id'] : $original_post_id;
|
4680 |
+
$new_post_id = isset( $post_data['post_id'] ) ? $post_data['post_id'] : $new_post_id;
|
4681 |
+
$enabled = get_post_meta( $original_post_id, '_fl_builder_enabled', true );
|
4682 |
+
$published = self::get_layout_data( 'published', $original_post_id );
|
4683 |
+
$draft = self::get_layout_data( 'draft', $original_post_id );
|
4684 |
|
4685 |
$response = array(
|
4686 |
+
'enabled' => false,
|
4687 |
'has_layout' => false,
|
4688 |
);
|
4689 |
|
4753 |
static public function save_user_template( $settings = array() ) {
|
4754 |
// Save the user template post.
|
4755 |
$post_id = wp_insert_post(array(
|
4756 |
+
'post_title' => $settings['name'],
|
4757 |
+
'post_type' => 'fl-builder-template',
|
4758 |
+
'post_status' => 'publish',
|
4759 |
+
'ping_status' => 'closed',
|
4760 |
'comment_status' => 'closed',
|
4761 |
));
|
4762 |
|
4764 |
wp_set_post_terms( $post_id, 'layout', 'fl-builder-template-type' );
|
4765 |
|
4766 |
// Add category
|
4767 |
+
$cat = isset( $settings['category'] ) ? $settings['category'] : '';
|
4768 |
$cat_added = '';
|
4769 |
if ( __( 'Uncategorized', 'fl-builder' ) !== $cat && 'uncategorized' !== $cat ) {
|
4770 |
$cat_added = wp_set_object_terms( $post_id, $cat, 'fl-builder-template-category' );
|
4771 |
}
|
4772 |
|
4773 |
// Get the layout data and settings to copy.
|
4774 |
+
$data = self::get_layout_data();
|
4775 |
+
$layout_settings = self::get_layout_settings();
|
4776 |
|
4777 |
// Generate new node ids.
|
4778 |
$data = self::generate_new_node_ids( $data );
|
4784 |
// Enable the builder for this template.
|
4785 |
update_post_meta( $post_id, '_fl_builder_enabled', true );
|
4786 |
|
4787 |
+
/**
|
4788 |
+
* Allow extensions to hook into saving a user template.
|
4789 |
+
* @see fl_builder_after_save_user_template
|
4790 |
+
*/
|
4791 |
do_action( 'fl_builder_after_save_user_template', $post_id );
|
4792 |
|
4793 |
$response = array(
|
4794 |
+
'name' => $settings['name'],
|
4795 |
+
'id' => get_post_meta( $post_id, '_fl_builder_template_id', true ),
|
4796 |
+
'postId' => $post_id,
|
4797 |
+
'image' => FL_BUILDER_URL . 'img/templates/blank.jpg',
|
4798 |
+
'kind' => 'template',
|
4799 |
+
'content' => 'layout',
|
4800 |
+
'type' => 'user',
|
4801 |
'isGlobal' => false,
|
4802 |
+
'link' => add_query_arg( 'fl_builder', '', get_permalink( $post_id ) ),
|
4803 |
'category' => array(),
|
4804 |
);
|
4805 |
|
4806 |
if ( is_array( $cat_added ) && ! empty( $cat_added ) ) {
|
4807 |
+
$term = get_term( $cat_added[0] );
|
4808 |
$response['category'][ $term->slug ] = $term->name;
|
4809 |
} else {
|
4810 |
$response['category']['uncategorized'] = __( 'Uncategorized', 'fl-builder' );
|
4824 |
static public function get_user_templates( $type = 'layout' ) {
|
4825 |
$categorized = array(
|
4826 |
'uncategorized' => array(
|
4827 |
+
'name' => _x( 'Uncategorized', 'Default user template category.', 'fl-builder' ),
|
4828 |
+
'templates' => array(),
|
4829 |
),
|
4830 |
);
|
4831 |
|
4835 |
'order' => 'ASC',
|
4836 |
'posts_per_page' => '-1',
|
4837 |
'suppress_filters' => false,
|
4838 |
+
'tax_query' => array(
|
4839 |
array(
|
4840 |
'taxonomy' => 'fl-builder-template-type',
|
4841 |
'field' => 'slug',
|
4851 |
|
4852 |
if ( has_post_thumbnail( $post->ID ) ) {
|
4853 |
$image_data = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'medium_large' );
|
4854 |
+
$image = $image_data[0];
|
4855 |
} else {
|
4856 |
$image = FL_BUILDER_URL . 'img/templates/blank.jpg';
|
4857 |
}
|
4858 |
|
4859 |
$templates[] = array(
|
4860 |
+
'id' => get_post_meta( $post->ID, '_fl_builder_template_id', true ),
|
4861 |
+
'postId' => $post->ID,
|
4862 |
+
'name' => $post->post_title,
|
4863 |
+
'image' => $image,
|
4864 |
+
'kind' => 'template',
|
4865 |
+
'type' => 'user',
|
4866 |
+
'content' => FLBuilderModel::get_user_template_type( $post->ID ),
|
4867 |
+
'isGlobal' => FLBuilderModel::is_post_global_node_template( $post->ID ),
|
4868 |
+
'link' => add_query_arg( 'fl_builder', '', get_permalink( $post->ID ) ),
|
4869 |
+
'category' => array(),
|
4870 |
);
|
4871 |
}
|
4872 |
|
4876 |
$cats = wp_get_post_terms( $template['postId'], 'fl-builder-template-category' );
|
4877 |
|
4878 |
if ( 0 === count( $cats ) || is_wp_error( $cats ) ) {
|
4879 |
+
$template['category'] = array(
|
4880 |
'uncategorized' => __( 'Uncategorized', 'fl-builder' ),
|
4881 |
);
|
4882 |
$categorized['uncategorized']['templates'][] = $template;
|
4889 |
foreach ( $cats as $cat ) {
|
4890 |
if ( ! isset( $categorized[ $cat->slug ] ) ) {
|
4891 |
$categorized[ $cat->slug ] = array(
|
4892 |
+
'name' => $cat->name,
|
4893 |
+
'templates' => array(),
|
4894 |
);
|
4895 |
}
|
4896 |
$categorized[ $cat->slug ]['templates'][] = $template;
|
4909 |
asort( $categorized );
|
4910 |
|
4911 |
return array(
|
4912 |
+
'templates' => $templates,
|
4913 |
+
'categorized' => $categorized,
|
4914 |
);
|
4915 |
}
|
4916 |
|
4977 |
|
4978 |
// Get the template data if $template is not an object.
|
4979 |
if ( ! is_object( $template ) ) {
|
4980 |
+
$template_id = $template;
|
4981 |
+
$template = new StdClass();
|
4982 |
+
$template->nodes = self::get_layout_data( 'published', $template_id );
|
4983 |
$template->settings = self::get_layout_settings( 'published', $template_id );
|
4984 |
}
|
4985 |
|
4987 |
$template->nodes = self::generate_new_node_ids( $template->nodes );
|
4988 |
|
4989 |
// Get the existing layout data and settings.
|
4990 |
+
$layout_data = self::get_layout_data();
|
4991 |
$layout_settings = self::get_layout_settings();
|
4992 |
|
4993 |
// Reposition rows if we are appending.
|
5004 |
}
|
5005 |
|
5006 |
// Merge the layout data and settings.
|
5007 |
+
$data = array_merge( $layout_data, $template->nodes );
|
5008 |
$settings = self::merge_layout_settings( $layout_settings, $template->settings );
|
5009 |
|
5010 |
// Update the layout data and settings.
|
5020 |
// Return the layout.
|
5021 |
return array(
|
5022 |
'layout_css' => isset( $settings ) ? $settings->css : null,
|
5023 |
+
'layout' => FLBuilderAJAXLayout::render(),
|
5024 |
+
'config' => FLBuilderUISettingsForms::get_node_js_config(),
|
5025 |
);
|
5026 |
}
|
5027 |
|
5119 |
|
5120 |
$is_visible = true;
|
5121 |
|
5122 |
+
if ( isset( $node->settings->visibility_display ) && ( '' != $node->settings->visibility_display ) ) {
|
5123 |
|
5124 |
// For logged out users
|
5125 |
if ( 'logged_out' == $node->settings->visibility_display && ! is_user_logged_in() ) {
|
5175 |
*/
|
5176 |
static public function get_node_templates( $type = '' ) {
|
5177 |
$posts = get_posts( array(
|
5178 |
+
'post_type' => 'fl-builder-template',
|
5179 |
+
'orderby' => 'title',
|
5180 |
+
'order' => 'ASC',
|
5181 |
+
'posts_per_page' => '-1',
|
5182 |
+
'tax_query' => array(
|
5183 |
array(
|
5184 |
'taxonomy' => 'fl-builder-template-type',
|
5185 |
+
'field' => 'slug',
|
5186 |
+
'terms' => $type,
|
5187 |
),
|
5188 |
),
|
5189 |
) );
|
5193 |
foreach ( $posts as $post ) {
|
5194 |
|
5195 |
$templates[] = array(
|
5196 |
+
'id' => get_post_meta( $post->ID, '_fl_builder_template_id', true ),
|
5197 |
+
'global' => get_post_meta( $post->ID, '_fl_builder_template_global', true ),
|
5198 |
+
'link' => add_query_arg( 'fl_builder', '', get_permalink( $post->ID ) ),
|
5199 |
+
'name' => $post->post_title,
|
5200 |
);
|
5201 |
}
|
5202 |
|
5244 |
} else {
|
5245 |
|
5246 |
$posts = get_posts( array(
|
5247 |
+
'post_type' => 'fl-builder-template',
|
5248 |
+
'post_status' => array( 'any', 'trash' ),
|
5249 |
+
'posts_per_page' => '-1',
|
5250 |
+
'post_status' => 'any',
|
5251 |
+
'meta_key' => '_fl_builder_template_id',
|
5252 |
+
'meta_value' => $template_id,
|
5253 |
) );
|
5254 |
|
5255 |
if ( 0 === count( $posts ) ) {
|
5256 |
return false;
|
5257 |
}
|
5258 |
|
5259 |
+
$post_id = apply_filters( 'fl_builder_node_template_post_id', $posts[0]->ID );
|
5260 |
self::$node_template_post_ids[ $template_id ] = $post_id;
|
5261 |
return $post_id;
|
5262 |
}
|
5300 |
'key' => '_fl_builder_draft',
|
5301 |
'value' => $template_id,
|
5302 |
'compare' => 'LIKE',
|
5303 |
+
),
|
5304 |
),
|
5305 |
+
'post_type' => 'any',
|
5306 |
'post_status' => 'any',
|
5307 |
'post__not_in' => array( $post_id ),
|
5308 |
) );
|
5322 |
* @return void
|
5323 |
*/
|
5324 |
static public function save_node_template( $template_node_id, $settings ) {
|
5325 |
+
$root_node = self::get_node( $template_node_id );
|
5326 |
+
$nodes = self::get_nested_nodes( $template_node_id );
|
5327 |
+
$template_id = self::generate_node_id();
|
5328 |
+
$original_parent = $root_node->parent;
|
5329 |
+
$original_position = $root_node->position;
|
5330 |
|
5331 |
// Save the node template post.
|
5332 |
$post_id = wp_insert_post( array(
|
5333 |
+
'post_title' => $settings['name'],
|
5334 |
+
'post_type' => 'fl-builder-template',
|
5335 |
+
'post_status' => 'publish',
|
5336 |
+
'ping_status' => 'closed',
|
5337 |
'comment_status' => 'closed',
|
5338 |
) );
|
5339 |
|
5345 |
|
5346 |
// Remove root parent for column template.
|
5347 |
if ( 'column' == $root_node->type ) {
|
5348 |
+
$root_node->parent = null;
|
5349 |
$root_node->settings->size = 100;
|
5350 |
}
|
5351 |
|
5363 |
|
5364 |
foreach ( $nodes as $node_id => $node ) {
|
5365 |
|
5366 |
+
$nodes[ $node_id ]->template_id = $template_id;
|
5367 |
$nodes[ $node_id ]->template_node_id = $node_id;
|
5368 |
|
5369 |
if ( $node_id == $root_node->node ) {
|
5415 |
|
5416 |
// Return an array of template settings.
|
5417 |
return array(
|
5418 |
+
'id' => $template_id,
|
5419 |
+
'global' => $settings['global'] ? true : false,
|
5420 |
+
'link' => add_query_arg( 'fl_builder', '', get_permalink( $post_id ) ),
|
5421 |
+
'name' => $settings['name'],
|
5422 |
+
'type' => $root_node->type,
|
5423 |
+
'layout' => $settings['global'] ? FLBuilderAJAXLayout::render( $root_node->node, $template_node_id ) : null,
|
5424 |
+
'config' => $settings['global'] ? FLBuilderUISettingsForms::get_node_js_config() : null,
|
5425 |
+
'postID' => $post_id,
|
5426 |
);
|
5427 |
}
|
5428 |
|
5496 |
static public function unlink_global_node_template_from_all_posts( $template_post_id ) {
|
5497 |
if ( self::is_post_global_node_template( $template_post_id ) ) {
|
5498 |
|
5499 |
+
$posts = self::get_posts_with_global_node_template( $template_post_id );
|
5500 |
$template_id = get_post_meta( $template_post_id, '_fl_builder_template_id', true );
|
5501 |
|
5502 |
foreach ( $posts as $post ) {
|
5521 |
* @return void
|
5522 |
*/
|
5523 |
static public function unlink_global_node_template_from_post( $status, $post_id, $template_post_id, $template_id ) {
|
5524 |
+
$template_data = self::get_layout_data( $status, $template_post_id );
|
5525 |
+
$layout_data = self::get_layout_data( $status, $post_id );
|
5526 |
+
$update = false;
|
5527 |
|
5528 |
// Loop through the layout data.
|
5529 |
foreach ( $layout_data as $node_id => $node ) {
|
5583 |
static public function delete_global_node_template_from_all_posts( $template_post_id ) {
|
5584 |
if ( self::is_post_global_node_template( $template_post_id ) ) {
|
5585 |
|
5586 |
+
$posts = self::get_posts_with_global_node_template( $template_post_id );
|
5587 |
$template_id = get_post_meta( $template_post_id, '_fl_builder_template_id', true );
|
5588 |
|
5589 |
foreach ( $posts as $post ) {
|
5662 |
$template_post_id = self::get_node_template_post_id( $template_id );
|
5663 |
$is_col_template = false;
|
5664 |
|
5665 |
+
/**
|
5666 |
+
* Allow extensions to hook into applying a node template.
|
5667 |
+
* @see fl_builder_override_apply_node_template
|
5668 |
+
*/
|
5669 |
$override = apply_filters( 'fl_builder_override_apply_node_template', false, array(
|
5670 |
'template_id' => $template_id,
|
5671 |
'parent_id' => $parent_id,
|
5681 |
|
5682 |
// Get the template data from $template if we have it.
|
5683 |
if ( is_object( $template ) ) {
|
5684 |
+
$template_data = $template->nodes;
|
5685 |
+
$template_settings = $template->settings;
|
5686 |
+
$type = $template->type;
|
5687 |
+
$global = $template->global;
|
5688 |
} else {
|
5689 |
+
$template_data = self::get_layout_data( 'published', $template_post_id );
|
5690 |
+
$template_settings = self::get_layout_settings( 'published', $template_post_id );
|
5691 |
+
$type = self::get_user_template_type( $template_post_id );
|
5692 |
+
$global = get_post_meta( $template_post_id, '_fl_builder_template_global', true );
|
5693 |
}
|
5694 |
|
5695 |
// Generate new node ids.
|
5708 |
$parent_id = self::add_module_parent( $parent_id, $position );
|
5709 |
$position = null;
|
5710 |
} elseif ( 'column' == $root_node->type ) {
|
5711 |
+
$parent_id = self::add_col_parent( $parent_id, $position );
|
5712 |
$is_col_template = self::is_node_global( $root_node );
|
5713 |
}
|
5714 |
|
5717 |
|
5718 |
// Set the node's template data if the parent is a global node.
|
5719 |
if ( self::is_node_global( $parent ) && ! $is_col_template ) {
|
5720 |
+
$template_data[ $root_node->node ]->template_id = $parent->template_id;
|
5721 |
$template_data[ $root_node->node ]->template_node_id = $root_node->node;
|
5722 |
unset( $template_data[ $root_node->node ]->template_root_node );
|
5723 |
$global = true;
|
5728 |
$template_data[ $root_node->node ]->parent = ! $parent_id ? null : $parent_id;
|
5729 |
|
5730 |
// Get the layout data and settings.
|
5731 |
+
$layout_data = self::get_layout_data( 'draft' );
|
5732 |
$layout_settings = self::get_layout_settings( 'draft' );
|
5733 |
|
5734 |
// Only merge the root node for global templates.
|
5846 |
* @return void
|
5847 |
*/
|
5848 |
static public function apply_template( $index = 0, $append = false, $type = 'layout' ) {
|
5849 |
+
/**
|
5850 |
+
* Allow extensions to hook into applying a template.
|
5851 |
+
* @see fl_builder_override_apply_template
|
5852 |
+
*/
|
5853 |
$override = apply_filters( 'fl_builder_override_apply_template', false, array(
|
5854 |
'index' => $index,
|
5855 |
'append' => $append,
|
5875 |
* @return array
|
5876 |
*/
|
5877 |
static public function apply_core_template( $index = 0, $append = false, $type = 'layout' ) {
|
5878 |
+
$template = self::get_template( $index, $type );
|
5879 |
$row_position = self::next_node_position( 'row' );
|
5880 |
|
5881 |
// Delete existing nodes and settings?
|
5894 |
$template->nodes = FLBuilderSettingsCompat::filter_layout_data( $template->nodes );
|
5895 |
|
5896 |
// Get the existing layout data and settings.
|
5897 |
+
$layout_data = self::get_layout_data();
|
5898 |
$layout_settings = self::get_layout_settings();
|
5899 |
|
5900 |
// Reposition rows?
|
6036 |
* @return array
|
6037 |
*/
|
6038 |
static public function get_template_selector_data( $type = 'layout' ) {
|
6039 |
+
$type = apply_filters( 'fl_builder_template_selector_data_type', $type );
|
6040 |
+
$categorized = array();
|
6041 |
+
$templates = array();
|
6042 |
+
$groups = array();
|
6043 |
|
6044 |
// This is needed for backwards compat with the old core templates category.
|
6045 |
$core_categories = array(
|
6073 |
'image' => $image,
|
6074 |
'author' => '',
|
6075 |
'category' => isset( $template->category ) ? $template->category : $template->categories,
|
6076 |
+
'tags' => array(),
|
6077 |
+
'group' => $template->group,
|
6078 |
'type' => 'core',
|
6079 |
+
'kind' => 'template',
|
6080 |
'content' => ! in_array( $type, array( 'row', 'column', 'module' ) ) ? 'layout' : $type,
|
6081 |
), $template );
|
6082 |
}
|
6122 |
$group_key = sanitize_key( $group_name );
|
6123 |
if ( ! isset( $groups[ $group_key ] ) ) {
|
6124 |
$groups[ $group_key ] = array(
|
6125 |
+
'name' => $group_name,
|
6126 |
'categories' => array(),
|
6127 |
);
|
6128 |
}
|
6143 |
// Add the category if we don't have it yet.
|
6144 |
if ( ! isset( $categorized[ $cat_key ] ) ) {
|
6145 |
$categorized[ $cat_key ] = array(
|
6146 |
+
'name' => $cat_name,
|
6147 |
+
'templates' => array(),
|
6148 |
);
|
6149 |
}
|
6150 |
|
6154 |
$templates[ $i ] = $template;
|
6155 |
}
|
6156 |
|
6157 |
+
/**
|
6158 |
+
* Return both the templates and categorized templates array.
|
6159 |
+
* @see fl_builder_template_selector_data
|
6160 |
+
*/
|
6161 |
return apply_filters( 'fl_builder_template_selector_data', array(
|
6162 |
+
'templates' => $templates,
|
6163 |
+
'categorized' => $categorized,
|
6164 |
+
'groups' => $groups,
|
6165 |
), $type );
|
6166 |
}
|
6167 |
|
6313 |
/**
|
6314 |
* Check if the current user has the specific capabilities
|
6315 |
*
|
6316 |
+
* @param string $cap The capability to evaluate if it's single or multiple (comma separated) value
|
6317 |
* @return bool
|
6318 |
*/
|
6319 |
static public function current_user_has_capability( $cap ) {
|
6341 |
*/
|
6342 |
static public function get_help_button_defaults() {
|
6343 |
$defaults = array(
|
6344 |
+
'enabled' => true,
|
6345 |
+
'tour' => true,
|
6346 |
+
'video' => true,
|
6347 |
+
'video_embed' => '<iframe src="https://player.vimeo.com/video/240550556?autoplay=1" width="420" height="315" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
|
6348 |
+
'knowledge_base' => true,
|
6349 |
+
'knowledge_base_url' => self::get_store_url( 'knowledge-base', array(
|
6350 |
+
'utm_medium' => ( true === FL_BUILDER_LITE ? 'bb-lite' : 'bb-pro' ),
|
6351 |
+
'utm_source' => 'builder-ui',
|
6352 |
'utm_campaign' => 'kb-help-button',
|
6353 |
) ),
|
6354 |
+
'forums' => true,
|
6355 |
+
'forums_url' => self::get_store_url( 'knowledge-base', array(
|
6356 |
+
'utm_medium' => ( true === FL_BUILDER_LITE ? 'bb-lite' : 'bb-pro' ),
|
6357 |
+
'utm_source' => 'builder-ui',
|
6358 |
'utm_campaign' => 'forums-help-button',
|
6359 |
) ),
|
6360 |
);
|
6385 |
static public function get_row_resize_settings() {
|
6386 |
$defaults = array(
|
6387 |
'userCanResizeRows' => true,
|
6388 |
+
'minAllowedWidth' => 300,
|
6389 |
+
'maxAllowedWidth' => false,
|
6390 |
);
|
6391 |
|
6392 |
$settings = apply_filters( 'fl_row_resize_settings', $defaults );
|
6585 |
delete_metadata( 'user', 0, '_fl_builder_launched', 1, true );
|
6586 |
|
6587 |
// Delete uploaded files and folders.
|
6588 |
+
$upload_dir = self::get_upload_dir();
|
6589 |
fl_builder_filesystem()->rmdir( $upload_dir['path'], true );
|
6590 |
|
6591 |
// Deactivate and delete the plugin.
|
classes/class-fl-builder-module.php
CHANGED
@@ -151,23 +151,23 @@ class FLBuilderModule {
|
|
151 |
* @since 1.0
|
152 |
*/
|
153 |
public function __construct( $params ) {
|
154 |
-
$class_info
|
155 |
-
$class_path
|
156 |
-
$dir_path
|
157 |
-
$this->slug
|
158 |
-
$this->enabled
|
159 |
-
$this->editor_export
|
160 |
-
$this->partial_refresh
|
161 |
|
162 |
// We need to normalize the paths here since path comparisons
|
163 |
// break on Windows because they use backslashes.
|
164 |
-
$abspath
|
165 |
-
$fl_builder_dir
|
166 |
-
$dir_path
|
167 |
-
$stylesheet_directory
|
168 |
-
$stylesheet_directory_uri
|
169 |
-
$template_directory
|
170 |
-
$template_directory_uri
|
171 |
|
172 |
// Find the right paths.
|
173 |
if ( is_child_theme() && stristr( $dir_path, $stylesheet_directory ) ) {
|
@@ -193,15 +193,15 @@ class FLBuilderModule {
|
|
193 |
'name' => $params['name'],
|
194 |
'description' => $params['description'],
|
195 |
'category' => $this->normalize_category_name( $params['category'] ),
|
196 |
-
'group'
|
197 |
-
'icon'
|
198 |
), $this->slug );
|
199 |
|
200 |
-
$this->name
|
201 |
-
$this->description
|
202 |
-
$this->category
|
203 |
-
$this->group
|
204 |
-
$this->icon
|
205 |
}
|
206 |
|
207 |
/**
|
151 |
* @since 1.0
|
152 |
*/
|
153 |
public function __construct( $params ) {
|
154 |
+
$class_info = new ReflectionClass( $this );
|
155 |
+
$class_path = $class_info->getFileName();
|
156 |
+
$dir_path = dirname( $class_path );
|
157 |
+
$this->slug = basename( $class_path, '.php' );
|
158 |
+
$this->enabled = isset( $params['enabled'] ) ? $params['enabled'] : true;
|
159 |
+
$this->editor_export = isset( $params['editor_export'] ) ? $params['editor_export'] : true;
|
160 |
+
$this->partial_refresh = isset( $params['partial_refresh'] ) ? $params['partial_refresh'] : false;
|
161 |
|
162 |
// We need to normalize the paths here since path comparisons
|
163 |
// break on Windows because they use backslashes.
|
164 |
+
$abspath = str_replace( '\\', '/', ABSPATH );
|
165 |
+
$fl_builder_dir = str_replace( '\\', '/', FL_BUILDER_DIR );
|
166 |
+
$dir_path = str_replace( '\\', '/', $dir_path );
|
167 |
+
$stylesheet_directory = str_replace( '\\', '/', get_stylesheet_directory() );
|
168 |
+
$stylesheet_directory_uri = str_replace( '\\', '/', get_stylesheet_directory_uri() );
|
169 |
+
$template_directory = str_replace( '\\', '/', get_template_directory() );
|
170 |
+
$template_directory_uri = str_replace( '\\', '/', get_template_directory_uri() );
|
171 |
|
172 |
// Find the right paths.
|
173 |
if ( is_child_theme() && stristr( $dir_path, $stylesheet_directory ) ) {
|
193 |
'name' => $params['name'],
|
194 |
'description' => $params['description'],
|
195 |
'category' => $this->normalize_category_name( $params['category'] ),
|
196 |
+
'group' => isset( $params['group'] ) ? $params['group'] : false,
|
197 |
+
'icon' => $this->icon,
|
198 |
), $this->slug );
|
199 |
|
200 |
+
$this->name = $details['name'];
|
201 |
+
$this->description = $details['description'];
|
202 |
+
$this->category = $details['category'];
|
203 |
+
$this->group = $details['group'];
|
204 |
+
$this->icon = $details['icon'];
|
205 |
}
|
206 |
|
207 |
/**
|
classes/class-fl-builder-notifications.php
CHANGED
@@ -5,22 +5,36 @@
|
|
5 |
*/
|
6 |
final class FLBuilderNotifications {
|
7 |
|
8 |
-
static $url = 'https://www.wpbeaverbuilder.com/wp-json/wp/v2/fl_notification';
|
9 |
|
10 |
-
static $option = 'fl_notifications';
|
|
|
|
|
11 |
|
12 |
public static function init() {
|
13 |
|
14 |
if ( FLBuilderModel::is_white_labeled() || true == apply_filters( 'fl_disable_notifications', false ) ) {
|
15 |
return false;
|
16 |
}
|
17 |
-
add_action( '
|
18 |
-
add_action( '
|
19 |
FLBuilderAJAX::add_action( 'fl_builder_notifications', array( 'FLBuilderNotifications', 'notications_ajax' ), array( 'read' ) );
|
20 |
}
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
/**
|
23 |
* Transient is passed by reference here, lets not mess with it and just trigger our fetch.
|
|
|
24 |
*/
|
25 |
public static function fetch_notifications_trigger( $transient ) {
|
26 |
if ( ! did_action( 'fl_fetch_notifications' ) ) {
|
@@ -52,14 +66,14 @@ final class FLBuilderNotifications {
|
|
52 |
public static function fetch_notifications() {
|
53 |
|
54 |
$defaults = array(
|
55 |
-
'read'
|
56 |
'checksum' => '',
|
57 |
-
'data'
|
58 |
);
|
59 |
|
60 |
-
$url
|
61 |
-
$stored_data
|
62 |
-
$response
|
63 |
|
64 |
$response_code = wp_remote_retrieve_response_code( $response );
|
65 |
$body = wp_remote_retrieve_body( $response );
|
@@ -81,9 +95,9 @@ final class FLBuilderNotifications {
|
|
81 |
$unread = self::compare_checksums( $stored_checksum, $latest_checksum );
|
82 |
|
83 |
$stored_data = array(
|
84 |
-
'read'
|
85 |
'checksum' => $latest_checksum,
|
86 |
-
'data'
|
87 |
);
|
88 |
|
89 |
if ( $unread ) {
|
@@ -142,10 +156,10 @@ final class FLBuilderNotifications {
|
|
142 |
*/
|
143 |
public static function get_notifications() {
|
144 |
|
145 |
-
$defaults
|
146 |
-
'read'
|
147 |
'checksum' => '',
|
148 |
-
'data'
|
149 |
);
|
150 |
$notifications = get_option( self::$option, $defaults );
|
151 |
|
@@ -161,12 +175,12 @@ final class FLBuilderNotifications {
|
|
161 |
* @since 2.1
|
162 |
*/
|
163 |
public static function update_state( $state ) {
|
164 |
-
$defaults
|
165 |
-
'read'
|
166 |
'checksum' => '',
|
167 |
-
'data'
|
168 |
);
|
169 |
-
$notifications
|
170 |
$notifications['read'] = $state;
|
171 |
update_option( self::$option, $notifications );
|
172 |
}
|
5 |
*/
|
6 |
final class FLBuilderNotifications {
|
7 |
|
8 |
+
protected static $url = 'https://www.wpbeaverbuilder.com/wp-json/wp/v2/fl_notification';
|
9 |
|
10 |
+
protected static $option = 'fl_notifications';
|
11 |
+
|
12 |
+
protected static $seconds = 172800; // 48 hours
|
13 |
|
14 |
public static function init() {
|
15 |
|
16 |
if ( FLBuilderModel::is_white_labeled() || true == apply_filters( 'fl_disable_notifications', false ) ) {
|
17 |
return false;
|
18 |
}
|
19 |
+
add_action( 'init', array( 'FLBuilderNotifications', 'set_schedule' ) );
|
20 |
+
add_action( 'fl_builder_notifications_event', array( 'FLBuilderNotifications', 'fetch_notifications' ) );
|
21 |
FLBuilderAJAX::add_action( 'fl_builder_notifications', array( 'FLBuilderNotifications', 'notications_ajax' ), array( 'read' ) );
|
22 |
}
|
23 |
|
24 |
+
/**
|
25 |
+
* Add scheduled event
|
26 |
+
* @since 2.2.1
|
27 |
+
*/
|
28 |
+
public static function set_schedule() {
|
29 |
+
|
30 |
+
if ( ! wp_next_scheduled( 'fl_builder_notifications_event' ) ) {
|
31 |
+
wp_schedule_single_event( time() + self::$seconds, 'fl_builder_notifications_event' );
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
35 |
/**
|
36 |
* Transient is passed by reference here, lets not mess with it and just trigger our fetch.
|
37 |
+
* @deprecated 2.2.1
|
38 |
*/
|
39 |
public static function fetch_notifications_trigger( $transient ) {
|
40 |
if ( ! did_action( 'fl_fetch_notifications' ) ) {
|
66 |
public static function fetch_notifications() {
|
67 |
|
68 |
$defaults = array(
|
69 |
+
'read' => false,
|
70 |
'checksum' => '',
|
71 |
+
'data' => '{}',
|
72 |
);
|
73 |
|
74 |
+
$url = self::$url;
|
75 |
+
$stored_data = get_option( self::$option, $defaults );
|
76 |
+
$response = wp_remote_get( $url );
|
77 |
|
78 |
$response_code = wp_remote_retrieve_response_code( $response );
|
79 |
$body = wp_remote_retrieve_body( $response );
|
95 |
$unread = self::compare_checksums( $stored_checksum, $latest_checksum );
|
96 |
|
97 |
$stored_data = array(
|
98 |
+
'read' => true,
|
99 |
'checksum' => $latest_checksum,
|
100 |
+
'data' => wp_json_encode( $body ),
|
101 |
);
|
102 |
|
103 |
if ( $unread ) {
|
156 |
*/
|
157 |
public static function get_notifications() {
|
158 |
|
159 |
+
$defaults = array(
|
160 |
+
'read' => false,
|
161 |
'checksum' => '',
|
162 |
+
'data' => '{}',
|
163 |
);
|
164 |
$notifications = get_option( self::$option, $defaults );
|
165 |
|
175 |
* @since 2.1
|
176 |
*/
|
177 |
public static function update_state( $state ) {
|
178 |
+
$defaults = array(
|
179 |
+
'read' => false,
|
180 |
'checksum' => '',
|
181 |
+
'data' => '{}',
|
182 |
);
|
183 |
+
$notifications = get_option( self::$option, $defaults );
|
184 |
$notifications['read'] = $state;
|
185 |
update_option( self::$option, $notifications );
|
186 |
}
|
classes/class-fl-builder-privacy.php
CHANGED
@@ -28,7 +28,7 @@ final class FLBuilderPrivacy {
|
|
28 |
static public function exporter( $email, $page = 1 ) {
|
29 |
|
30 |
$export_items = array();
|
31 |
-
$data
|
32 |
|
33 |
$user = get_user_by( 'email', $email );
|
34 |
$meta = (array) get_user_meta( $user->ID, 'fl_builder_user_settings', true );
|
@@ -47,8 +47,8 @@ final class FLBuilderPrivacy {
|
|
47 |
$setting = 'false';
|
48 |
}
|
49 |
$data[] = array(
|
50 |
-
|
51 |
-
|
52 |
);
|
53 |
}
|
54 |
}
|
@@ -61,15 +61,15 @@ final class FLBuilderPrivacy {
|
|
61 |
}
|
62 |
|
63 |
$export_items[] = array(
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
);
|
69 |
|
70 |
return array(
|
71 |
-
|
72 |
-
|
73 |
);
|
74 |
}
|
75 |
|
28 |
static public function exporter( $email, $page = 1 ) {
|
29 |
|
30 |
$export_items = array();
|
31 |
+
$data = array();
|
32 |
|
33 |
$user = get_user_by( 'email', $email );
|
34 |
$meta = (array) get_user_meta( $user->ID, 'fl_builder_user_settings', true );
|
47 |
$setting = 'false';
|
48 |
}
|
49 |
$data[] = array(
|
50 |
+
'name' => $key,
|
51 |
+
'value' => $setting,
|
52 |
);
|
53 |
}
|
54 |
}
|
61 |
}
|
62 |
|
63 |
$export_items[] = array(
|
64 |
+
'group_id' => 'bb-settings',
|
65 |
+
'group_label' => 'Beaver Builder Settings',
|
66 |
+
'item_id' => 'bb-settings',
|
67 |
+
'data' => $data,
|
68 |
);
|
69 |
|
70 |
return array(
|
71 |
+
'data' => $export_items,
|
72 |
+
'done' => true,
|
73 |
);
|
74 |
}
|
75 |
|
classes/class-fl-builder-revisions.php
CHANGED
@@ -14,8 +14,8 @@ final class FLBuilderRevisions {
|
|
14 |
* @return void
|
15 |
*/
|
16 |
static public function init() {
|
17 |
-
add_filter( 'fl_builder_ui_js_config',
|
18 |
-
add_filter( 'fl_builder_main_menu',
|
19 |
}
|
20 |
|
21 |
/**
|
@@ -44,8 +44,8 @@ final class FLBuilderRevisions {
|
|
44 |
) );
|
45 |
$current_time = current_time( 'timestamp' );
|
46 |
$config = array(
|
47 |
-
'posts'
|
48 |
-
'authors'
|
49 |
);
|
50 |
|
51 |
$current_data = serialize( get_post_meta( $post_id, '_fl_builder_data', true ) );
|
@@ -70,11 +70,11 @@ final class FLBuilderRevisions {
|
|
70 |
$timestamp = strtotime( $revision->post_date );
|
71 |
|
72 |
$config['posts'][] = array(
|
73 |
-
'id'
|
74 |
'author' => $revision->post_author,
|
75 |
'date' => array(
|
76 |
-
'published'
|
77 |
-
'diff'
|
78 |
),
|
79 |
);
|
80 |
|
@@ -100,15 +100,15 @@ final class FLBuilderRevisions {
|
|
100 |
static public function main_menu_config( $config ) {
|
101 |
$config['main']['items'][35] = array(
|
102 |
'label' => __( 'Revisions', 'fl-builder' ),
|
103 |
-
'type'
|
104 |
-
'view'
|
105 |
);
|
106 |
|
107 |
$config['revisions'] = array(
|
108 |
-
'name'
|
109 |
'isShowing' => false,
|
110 |
'isRootView' => false,
|
111 |
-
'items'
|
112 |
);
|
113 |
|
114 |
return $config;
|
14 |
* @return void
|
15 |
*/
|
16 |
static public function init() {
|
17 |
+
add_filter( 'fl_builder_ui_js_config', __CLASS__ . '::ui_js_config' );
|
18 |
+
add_filter( 'fl_builder_main_menu', __CLASS__ . '::main_menu_config' );
|
19 |
}
|
20 |
|
21 |
/**
|
44 |
) );
|
45 |
$current_time = current_time( 'timestamp' );
|
46 |
$config = array(
|
47 |
+
'posts' => array(),
|
48 |
+
'authors' => array(),
|
49 |
);
|
50 |
|
51 |
$current_data = serialize( get_post_meta( $post_id, '_fl_builder_data', true ) );
|
70 |
$timestamp = strtotime( $revision->post_date );
|
71 |
|
72 |
$config['posts'][] = array(
|
73 |
+
'id' => $revision->ID,
|
74 |
'author' => $revision->post_author,
|
75 |
'date' => array(
|
76 |
+
'published' => date( 'F j', $timestamp ),
|
77 |
+
'diff' => human_time_diff( $timestamp, $current_time ),
|
78 |
),
|
79 |
);
|
80 |
|
100 |
static public function main_menu_config( $config ) {
|
101 |
$config['main']['items'][35] = array(
|
102 |
'label' => __( 'Revisions', 'fl-builder' ),
|
103 |
+
'type' => 'view',
|
104 |
+
'view' => 'revisions',
|
105 |
);
|
106 |
|
107 |
$config['revisions'] = array(
|
108 |
+
'name' => __( 'Revisions', 'fl-builder' ),
|
109 |
'isShowing' => false,
|
110 |
'isRootView' => false,
|
111 |
+
'items' => array(),
|
112 |
);
|
113 |
|
114 |
return $config;
|
classes/class-fl-builder-service-activecampaign.php
CHANGED
@@ -58,8 +58,8 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
-
'error'
|
62 |
-
'data'
|
63 |
);
|
64 |
|
65 |
// Make sure we have an API url.
|
@@ -67,8 +67,7 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
67 |
$response['error'] = __( 'Error: You must provide an API URL.', 'fl-builder' );
|
68 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
69 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
70 |
-
} // Try to connect and store the connection data.
|
71 |
-
else {
|
72 |
|
73 |
$api = $this->get_api( $fields['api_url'], $fields['api_key'] );
|
74 |
|
@@ -95,24 +94,24 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
95 |
ob_start();
|
96 |
|
97 |
FLBuilder::render_settings_field( 'api_url', array(
|
98 |
-
'row_class'
|
99 |
-
'class'
|
100 |
-
'type'
|
101 |
-
'label'
|
102 |
-
'help'
|
103 |
-
'preview'
|
104 |
-
'type'
|
105 |
),
|
106 |
));
|
107 |
|
108 |
FLBuilder::render_settings_field( 'api_key', array(
|
109 |
-
'row_class'
|
110 |
-
'class'
|
111 |
-
'type'
|
112 |
-
'label'
|
113 |
-
'help'
|
114 |
-
'preview'
|
115 |
-
'type'
|
116 |
),
|
117 |
));
|
118 |
|
@@ -131,26 +130,26 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
131 |
* }
|
132 |
*/
|
133 |
public function render_fields( $account, $settings ) {
|
134 |
-
$post_data
|
135 |
-
$account_data
|
136 |
-
$api
|
137 |
-
$response
|
138 |
-
'error'
|
139 |
-
'html'
|
140 |
);
|
141 |
|
142 |
if ( ! isset( $post_data['list_type'] ) ) {
|
143 |
$response['html'] = $this->render_list_type_field( $settings );
|
144 |
}
|
145 |
|
146 |
-
$lists
|
147 |
-
$render_type_html
|
148 |
|
149 |
if ( isset( $post_data['list_type'] ) || isset( $settings->list_type ) ) {
|
150 |
$list_type = isset( $post_data['list_type'] ) ? $post_data['list_type'] : $settings->list_type;
|
151 |
|
152 |
if ( ! empty( $list_type ) && 'form' == $list_type ) {
|
153 |
-
$forms
|
154 |
$render_type_html = $this->render_form_field( $forms, $settings );
|
155 |
}
|
156 |
}
|
@@ -175,17 +174,17 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
175 |
private function render_list_type_field( $settings ) {
|
176 |
ob_start();
|
177 |
FLBuilder::render_settings_field( 'list_type', array(
|
178 |
-
'row_class'
|
179 |
-
'class'
|
180 |
-
'type'
|
181 |
-
'label'
|
182 |
-
'default'
|
183 |
-
'options'
|
184 |
-
'list'
|
185 |
-
'form'
|
186 |
),
|
187 |
-
'preview'
|
188 |
-
'type'
|
189 |
),
|
190 |
), $settings);
|
191 |
return ob_get_clean();
|
@@ -212,13 +211,13 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
212 |
}
|
213 |
}
|
214 |
FLBuilder::render_settings_field( 'form_id', array(
|
215 |
-
'row_class'
|
216 |
-
'class'
|
217 |
-
'type'
|
218 |
-
'label'
|
219 |
-
'options'
|
220 |
-
'preview'
|
221 |
-
'type'
|
222 |
),
|
223 |
), $settings);
|
224 |
return ob_get_clean();
|
@@ -247,13 +246,13 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
247 |
}
|
248 |
|
249 |
FLBuilder::render_settings_field( 'list_id', array(
|
250 |
-
'row_class'
|
251 |
-
'class'
|
252 |
-
'type'
|
253 |
-
'label'
|
254 |
-
'options'
|
255 |
-
'preview'
|
256 |
-
'type'
|
257 |
),
|
258 |
), $settings);
|
259 |
|
@@ -272,16 +271,16 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
272 |
ob_start();
|
273 |
|
274 |
FLBuilder::render_settings_field( 'tags', array(
|
275 |
-
'row_class'
|
276 |
-
'class'
|
277 |
-
'type'
|
278 |
-
'default'
|
279 |
-
'label'
|
280 |
-
'help'
|
281 |
-
'preview'
|
282 |
-
'type'
|
283 |
),
|
284 |
-
)
|
285 |
|
286 |
return ob_get_clean();
|
287 |
}
|
@@ -308,7 +307,7 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
308 |
$response['error'] = __( 'There was an error subscribing to ActiveCampaign. The account is no longer connected.', 'fl-builder' );
|
309 |
} else {
|
310 |
|
311 |
-
$api
|
312 |
|
313 |
$data['email'] = $email;
|
314 |
if ( isset( $settings->list_type ) && 'form' == $settings->list_type ) {
|
@@ -334,11 +333,11 @@ final class FLBuilderServiceActiveCampaign extends FLBuilderService {
|
|
334 |
}
|
335 |
} else {
|
336 |
$data['p'] = array( $settings->list_id );
|
337 |
-
$list_id
|
338 |
}
|
339 |
|
340 |
if ( $list_id ) {
|
341 |
-
$data['status']
|
342 |
$list_id => 1,
|
343 |
);
|
344 |
$data['instantresponders'] = array(
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
+
'error' => false,
|
62 |
+
'data' => array(),
|
63 |
);
|
64 |
|
65 |
// Make sure we have an API url.
|
67 |
$response['error'] = __( 'Error: You must provide an API URL.', 'fl-builder' );
|
68 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
69 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
70 |
+
} else { // Try to connect and store the connection data.
|
|
|
71 |
|
72 |
$api = $this->get_api( $fields['api_url'], $fields['api_key'] );
|
73 |
|
94 |
ob_start();
|
95 |
|
96 |
FLBuilder::render_settings_field( 'api_url', array(
|
97 |
+
'row_class' => 'fl-builder-service-connect-row',
|
98 |
+
'class' => 'fl-builder-service-connect-input',
|
99 |
+
'type' => 'text',
|
100 |
+
'label' => __( 'API URL', 'fl-builder' ),
|
101 |
+
'help' => __( 'Your API url can be found in your ActiveCampaign account under My Settings > Developer > API.', 'fl-builder' ),
|
102 |
+
'preview' => array(
|
103 |
+
'type' => 'none',
|
104 |
),
|
105 |
));
|
106 |
|
107 |
FLBuilder::render_settings_field( 'api_key', array(
|
108 |
+
'row_class' => 'fl-builder-service-connect-row',
|
109 |
+
'class' => 'fl-builder-service-connect-input',
|
110 |
+
'type' => 'text',
|
111 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
112 |
+
'help' => __( 'Your API key can be found in your ActiveCampaign account under My Settings > Developer > API.', 'fl-builder' ),
|
113 |
+
'preview' => array(
|
114 |
+
'type' => 'none',
|
115 |
),
|
116 |
));
|
117 |
|
130 |
* }
|
131 |
*/
|
132 |
public function render_fields( $account, $settings ) {
|
133 |
+
$post_data = FLBuilderModel::get_post_data();
|
134 |
+
$account_data = $this->get_account_data( $account );
|
135 |
+
$api = $this->get_api( $account_data['api_url'], $account_data['api_key'] );
|
136 |
+
$response = array(
|
137 |
+
'error' => false,
|
138 |
+
'html' => '',
|
139 |
);
|
140 |
|
141 |
if ( ! isset( $post_data['list_type'] ) ) {
|
142 |
$response['html'] = $this->render_list_type_field( $settings );
|
143 |
}
|
144 |
|
145 |
+
$lists = $api->api( 'list/list?ids=all' );
|
146 |
+
$render_type_html = $this->render_list_field( $lists, $settings );
|
147 |
|
148 |
if ( isset( $post_data['list_type'] ) || isset( $settings->list_type ) ) {
|
149 |
$list_type = isset( $post_data['list_type'] ) ? $post_data['list_type'] : $settings->list_type;
|
150 |
|
151 |
if ( ! empty( $list_type ) && 'form' == $list_type ) {
|
152 |
+
$forms = $api->api( 'form/getforms' );
|
153 |
$render_type_html = $this->render_form_field( $forms, $settings );
|
154 |
}
|
155 |
}
|
174 |
private function render_list_type_field( $settings ) {
|
175 |
ob_start();
|
176 |
FLBuilder::render_settings_field( 'list_type', array(
|
177 |
+
'row_class' => 'fl-builder-service-field-row',
|
178 |
+
'class' => 'fl-builder-activecampaign-list_type-select',
|
179 |
+
'type' => 'select',
|
180 |
+
'label' => _x( 'Type', 'Select the list type.', 'fl-builder' ),
|
181 |
+
'default' => 'list',
|
182 |
+
'options' => array(
|
183 |
+
'list' => __( 'List', 'fl-builder' ),
|
184 |
+
'form' => __( 'Form', 'fl-builder' ),
|
185 |
),
|
186 |
+
'preview' => array(
|
187 |
+
'type' => 'none',
|
188 |
),
|
189 |
), $settings);
|
190 |
return ob_get_clean();
|
211 |
}
|
212 |
}
|
213 |
FLBuilder::render_settings_field( 'form_id', array(
|
214 |
+
'row_class' => 'fl-builder-service-field-row',
|
215 |
+
'class' => 'fl-builder-service-list-select',
|
216 |
+
'type' => 'select',
|
217 |
+
'label' => _x( 'Form', 'Select a form a ActiveCampaign.', 'fl-builder' ),
|
218 |
+
'options' => $options,
|
219 |
+
'preview' => array(
|
220 |
+
'type' => 'none',
|
221 |
),
|
222 |
), $settings);
|
223 |
return ob_get_clean();
|
246 |
}
|
247 |
|
248 |
FLBuilder::render_settings_field( 'list_id', array(
|
249 |
+
'row_class' => 'fl-builder-service-field-row',
|
250 |
+
'class' => 'fl-builder-service-list-select',
|
251 |
+
'type' => 'select',
|
252 |
+
'label' => _x( 'List', 'An email list from ActiveCampaign.', 'fl-builder' ),
|
253 |
+
'options' => $options,
|
254 |
+
'preview' => array(
|
255 |
+
'type' => 'none',
|
256 |
),
|
257 |
), $settings);
|
258 |
|
271 |
ob_start();
|
272 |
|
273 |
FLBuilder::render_settings_field( 'tags', array(
|
274 |
+
'row_class' => 'fl-builder-service-connect-row',
|
275 |
+
'class' => 'fl-builder-service-connect-input',
|
276 |
+
'type' => 'text',
|
277 |
+
'default' => '',
|
278 |
+
'label' => _x( 'Tags', 'A comma separated list of tags.', 'fl-builder' ),
|
279 |
+
'help' => __( 'A comma separated list of tags.', 'fl-builder' ),
|
280 |
+
'preview' => array(
|
281 |
+
'type' => 'none',
|
282 |
),
|
283 |
+
), $settings);
|
284 |
|
285 |
return ob_get_clean();
|
286 |
}
|
307 |
$response['error'] = __( 'There was an error subscribing to ActiveCampaign. The account is no longer connected.', 'fl-builder' );
|
308 |
} else {
|
309 |
|
310 |
+
$api = $this->get_api( $account_data['api_url'], $account_data['api_key'] );
|
311 |
|
312 |
$data['email'] = $email;
|
313 |
if ( isset( $settings->list_type ) && 'form' == $settings->list_type ) {
|
333 |
}
|
334 |
} else {
|
335 |
$data['p'] = array( $settings->list_id );
|
336 |
+
$list_id = $settings->list_id;
|
337 |
}
|
338 |
|
339 |
if ( $list_id ) {
|
340 |
+
$data['status'] = array(
|
341 |
$list_id => 1,
|
342 |
);
|
343 |
$data['instantresponders'] = array(
|
classes/class-fl-builder-service-aweber.php
CHANGED
@@ -61,8 +61,8 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
61 |
*/
|
62 |
public function connect( $fields = array() ) {
|
63 |
$response = array(
|
64 |
-
'error'
|
65 |
-
'data'
|
66 |
);
|
67 |
|
68 |
// Make sure we have an authorization code.
|
@@ -70,8 +70,7 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
70 |
$response['error'] = __( 'Error: You must provide an Authorization Code.', 'fl-builder' );
|
71 |
} elseif ( 6 != count( explode( '|', $fields['auth_code'] ) ) ) {
|
72 |
$response['error'] = __( 'Error: Please enter a valid Authorization Code.', 'fl-builder' );
|
73 |
-
} // Try to connect and store the connection data.
|
74 |
-
else {
|
75 |
|
76 |
$api = $this->get_api( $fields['auth_code'] );
|
77 |
|
@@ -93,9 +92,9 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
93 |
if ( ! $response['error'] ) {
|
94 |
|
95 |
$response['data'] = array(
|
96 |
-
'auth_code'
|
97 |
-
'access_token'
|
98 |
-
'access_secret'
|
99 |
);
|
100 |
}
|
101 |
}
|
@@ -113,13 +112,13 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
113 |
ob_start();
|
114 |
|
115 |
FLBuilder::render_settings_field( 'auth_code', array(
|
116 |
-
'row_class'
|
117 |
-
'class'
|
118 |
-
'type'
|
119 |
-
'label'
|
120 |
-
'description'
|
121 |
-
'preview'
|
122 |
-
'type'
|
123 |
),
|
124 |
));
|
125 |
|
@@ -138,17 +137,17 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
138 |
* }
|
139 |
*/
|
140 |
public function render_fields( $account, $settings ) {
|
141 |
-
$account_data
|
142 |
-
$api
|
143 |
-
$response
|
144 |
-
'error'
|
145 |
-
'html'
|
146 |
);
|
147 |
|
148 |
try {
|
149 |
-
$account
|
150 |
-
$lists
|
151 |
-
$response['html']
|
152 |
$response['html'] .= $this->render_tags_field( $settings );
|
153 |
} catch ( AWeberException $e ) {
|
154 |
$response['error'] = $e->getMessage();
|
@@ -178,13 +177,13 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
178 |
}
|
179 |
|
180 |
FLBuilder::render_settings_field( 'list_id', array(
|
181 |
-
'row_class'
|
182 |
-
'class'
|
183 |
-
'type'
|
184 |
-
'label'
|
185 |
-
'options'
|
186 |
-
'preview'
|
187 |
-
'type'
|
188 |
),
|
189 |
), $settings);
|
190 |
|
@@ -203,15 +202,15 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
203 |
ob_start();
|
204 |
|
205 |
FLBuilder::render_settings_field( 'tags', array(
|
206 |
-
'row_class'
|
207 |
-
'class'
|
208 |
-
'type'
|
209 |
-
'label'
|
210 |
-
'help'
|
211 |
-
'preview'
|
212 |
-
'type'
|
213 |
),
|
214 |
-
)
|
215 |
|
216 |
return ob_get_clean();
|
217 |
}
|
@@ -237,8 +236,8 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
237 |
$response['error'] = __( 'There was an error subscribing to AWeber. The account is no longer connected.', 'fl-builder' );
|
238 |
} else {
|
239 |
|
240 |
-
$api
|
241 |
-
$data
|
242 |
'email' => $email,
|
243 |
);
|
244 |
|
@@ -273,7 +272,7 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
273 |
}
|
274 |
|
275 |
try {
|
276 |
-
$result
|
277 |
'return' => 'headers',
|
278 |
) );
|
279 |
|
@@ -290,7 +289,7 @@ final class FLBuilderServiceAWeber extends FLBuilderService {
|
|
290 |
}
|
291 |
} else {
|
292 |
$data['ws.op'] = 'create';
|
293 |
-
$result
|
294 |
'return' => 'headers',
|
295 |
) );
|
296 |
|
61 |
*/
|
62 |
public function connect( $fields = array() ) {
|
63 |
$response = array(
|
64 |
+
'error' => false,
|
65 |
+
'data' => array(),
|
66 |
);
|
67 |
|
68 |
// Make sure we have an authorization code.
|
70 |
$response['error'] = __( 'Error: You must provide an Authorization Code.', 'fl-builder' );
|
71 |
} elseif ( 6 != count( explode( '|', $fields['auth_code'] ) ) ) {
|
72 |
$response['error'] = __( 'Error: Please enter a valid Authorization Code.', 'fl-builder' );
|
73 |
+
} else { // Try to connect and store the connection data.
|
|
|
74 |
|
75 |
$api = $this->get_api( $fields['auth_code'] );
|
76 |
|
92 |
if ( ! $response['error'] ) {
|
93 |
|
94 |
$response['data'] = array(
|
95 |
+
'auth_code' => $fields['auth_code'],
|
96 |
+
'access_token' => $access_token,
|
97 |
+
'access_secret' => $access_token_secret,
|
98 |
);
|
99 |
}
|
100 |
}
|
112 |
ob_start();
|
113 |
|
114 |
FLBuilder::render_settings_field( 'auth_code', array(
|
115 |
+
'row_class' => 'fl-builder-service-connect-row',
|
116 |
+
'class' => 'fl-builder-service-connect-input',
|
117 |
+
'type' => 'text',
|
118 |
+
'label' => __( 'Authorization Code', 'fl-builder' ),
|
119 |
+
'description' => sprintf( __( 'Please register this website with AWeber to get your Authorization Code. <a%s>Register Now</a>', 'fl-builder' ), ' href="https://auth.aweber.com/1.0/oauth/authorize_app/baa1f131" target="_blank"' ),
|
120 |
+
'preview' => array(
|
121 |
+
'type' => 'none',
|
122 |
),
|
123 |
));
|
124 |
|
137 |
* }
|
138 |
*/
|
139 |
public function render_fields( $account, $settings ) {
|
140 |
+
$account_data = $this->get_account_data( $account );
|
141 |
+
$api = $this->get_api( $account_data['auth_code'] );
|
142 |
+
$response = array(
|
143 |
+
'error' => false,
|
144 |
+
'html' => '',
|
145 |
);
|
146 |
|
147 |
try {
|
148 |
+
$account = $api->getAccount( $account_data['access_token'], $account_data['access_secret'] );
|
149 |
+
$lists = $account->loadFromUrl( '/accounts/' . $account->id . '/lists' );
|
150 |
+
$response['html'] = $this->render_list_field( $lists, $settings );
|
151 |
$response['html'] .= $this->render_tags_field( $settings );
|
152 |
} catch ( AWeberException $e ) {
|
153 |
$response['error'] = $e->getMessage();
|
177 |
}
|
178 |
|
179 |
FLBuilder::render_settings_field( 'list_id', array(
|
180 |
+
'row_class' => 'fl-builder-service-field-row',
|
181 |
+
'class' => 'fl-builder-service-list-select',
|
182 |
+
'type' => 'select',
|
183 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
184 |
+
'options' => $options,
|
185 |
+
'preview' => array(
|
186 |
+
'type' => 'none',
|
187 |
),
|
188 |
), $settings);
|
189 |
|
202 |
ob_start();
|
203 |
|
204 |
FLBuilder::render_settings_field( 'tags', array(
|
205 |
+
'row_class' => 'fl-builder-service-connect-row',
|
206 |
+
'class' => 'fl-builder-service-connect-input',
|
207 |
+
'type' => 'text',
|
208 |
+
'label' => _x( 'Tags', 'A comma separated list of tags.', 'fl-builder' ),
|
209 |
+
'help' => __( 'A comma separated list of tags.', 'fl-builder' ),
|
210 |
+
'preview' => array(
|
211 |
+
'type' => 'none',
|
212 |
),
|
213 |
+
), $settings);
|
214 |
|
215 |
return ob_get_clean();
|
216 |
}
|
236 |
$response['error'] = __( 'There was an error subscribing to AWeber. The account is no longer connected.', 'fl-builder' );
|
237 |
} else {
|
238 |
|
239 |
+
$api = $this->get_api( $account_data['auth_code'] );
|
240 |
+
$data = array(
|
241 |
'email' => $email,
|
242 |
);
|
243 |
|
272 |
}
|
273 |
|
274 |
try {
|
275 |
+
$result = $api->adapter->request( 'PATCH', $url . '/' . $subscriber_id, $data, array(
|
276 |
'return' => 'headers',
|
277 |
) );
|
278 |
|
289 |
}
|
290 |
} else {
|
291 |
$data['ws.op'] = 'create';
|
292 |
+
$result = $api->adapter->request( 'POST', $url, $data, array(
|
293 |
'return' => 'headers',
|
294 |
) );
|
295 |
|
classes/class-fl-builder-service-campaign-monitor.php
CHANGED
@@ -44,8 +44,8 @@ final class FLBuilderServiceCampaignMonitor extends FLBuilderService {
|
|
44 |
*/
|
45 |
public function connect( $fields = array() ) {
|
46 |
$response = array(
|
47 |
-
'error'
|
48 |
-
'data'
|
49 |
);
|
50 |
|
51 |
// Make sure we have an API key.
|
@@ -80,13 +80,13 @@ final class FLBuilderServiceCampaignMonitor extends FLBuilderService {
|
|
80 |
ob_start();
|
81 |
|
82 |
FLBuilder::render_settings_field( 'api_key', array(
|
83 |
-
'row_class'
|
84 |
-
'class'
|
85 |
-
'type'
|
86 |
-
'label'
|
87 |
-
'help'
|
88 |
-
'preview'
|
89 |
-
'type'
|
90 |
),
|
91 |
));
|
92 |
|
@@ -105,13 +105,13 @@ final class FLBuilderServiceCampaignMonitor extends FLBuilderService {
|
|
105 |
* }
|
106 |
*/
|
107 |
public function render_fields( $account, $settings ) {
|
108 |
-
$post_data
|
109 |
-
$account_data
|
110 |
-
$api
|
111 |
-
$result
|
112 |
-
$response
|
113 |
-
'error'
|
114 |
-
'html'
|
115 |
);
|
116 |
|
117 |
if ( $result->was_successful() ) {
|
@@ -150,13 +150,13 @@ final class FLBuilderServiceCampaignMonitor extends FLBuilderService {
|
|
150 |
}
|
151 |
|
152 |
FLBuilder::render_settings_field( 'client_id', array(
|
153 |
-
'row_class'
|
154 |
-
'class'
|
155 |
-
'type'
|
156 |
-
'label'
|
157 |
-
'options'
|
158 |
-
'preview'
|
159 |
-
'type'
|
160 |
),
|
161 |
), $settings);
|
162 |
|
@@ -201,13 +201,13 @@ final class FLBuilderServiceCampaignMonitor extends FLBuilderService {
|
|
201 |
}
|
202 |
|
203 |
FLBuilder::render_settings_field( 'list_id', array(
|
204 |
-
'row_class'
|
205 |
-
'class'
|
206 |
-
'type'
|
207 |
-
'label'
|
208 |
-
'options'
|
209 |
-
'preview'
|
210 |
-
'type'
|
211 |
),
|
212 |
), $settings);
|
213 |
|
@@ -235,8 +235,8 @@ final class FLBuilderServiceCampaignMonitor extends FLBuilderService {
|
|
235 |
$response['error'] = __( 'There was an error subscribing to Campaign Monitor. The account is no longer connected.', 'fl-builder' );
|
236 |
} else {
|
237 |
|
238 |
-
$api
|
239 |
-
$data
|
240 |
'EmailAddress' => $email,
|
241 |
'Resubscribe' => true,
|
242 |
);
|
44 |
*/
|
45 |
public function connect( $fields = array() ) {
|
46 |
$response = array(
|
47 |
+
'error' => false,
|
48 |
+
'data' => array(),
|
49 |
);
|
50 |
|
51 |
// Make sure we have an API key.
|
80 |
ob_start();
|
81 |
|
82 |
FLBuilder::render_settings_field( 'api_key', array(
|
83 |
+
'row_class' => 'fl-builder-service-connect-row',
|
84 |
+
'class' => 'fl-builder-service-connect-input',
|
85 |
+
'type' => 'text',
|
86 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
87 |
+
'help' => __( 'Your API key can be found in your Campaign Monitor account under Account Settings > API Key.', 'fl-builder' ),
|
88 |
+
'preview' => array(
|
89 |
+
'type' => 'none',
|
90 |
),
|
91 |
));
|
92 |
|
105 |
* }
|
106 |
*/
|
107 |
public function render_fields( $account, $settings ) {
|
108 |
+
$post_data = FLBuilderModel::get_post_data();
|
109 |
+
$account_data = $this->get_account_data( $account );
|
110 |
+
$api = new CS_REST_General( $account_data );
|
111 |
+
$result = $api->get_clients();
|
112 |
+
$response = array(
|
113 |
+
'error' => false,
|
114 |
+
'html' => '',
|
115 |
);
|
116 |
|
117 |
if ( $result->was_successful() ) {
|
150 |
}
|
151 |
|
152 |
FLBuilder::render_settings_field( 'client_id', array(
|
153 |
+
'row_class' => 'fl-builder-service-field-row',
|
154 |
+
'class' => 'fl-builder-campaign-monitor-client-select',
|
155 |
+
'type' => 'select',
|
156 |
+
'label' => _x( 'Client', 'A client account in Campaign Monitor.', 'fl-builder' ),
|
157 |
+
'options' => $options,
|
158 |
+
'preview' => array(
|
159 |
+
'type' => 'none',
|
160 |
),
|
161 |
), $settings);
|
162 |
|
201 |
}
|
202 |
|
203 |
FLBuilder::render_settings_field( 'list_id', array(
|
204 |
+
'row_class' => 'fl-builder-service-field-row',
|
205 |
+
'class' => 'fl-builder-service-list-select',
|
206 |
+
'type' => 'select',
|
207 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
208 |
+
'options' => $options,
|
209 |
+
'preview' => array(
|
210 |
+
'type' => 'none',
|
211 |
),
|
212 |
), $settings);
|
213 |
|
235 |
$response['error'] = __( 'There was an error subscribing to Campaign Monitor. The account is no longer connected.', 'fl-builder' );
|
236 |
} else {
|
237 |
|
238 |
+
$api = new CS_Rest_Subscribers( $settings->list_id, $account_data );
|
239 |
+
$data = array(
|
240 |
'EmailAddress' => $email,
|
241 |
'Resubscribe' => true,
|
242 |
);
|
classes/class-fl-builder-service-campayn.php
CHANGED
@@ -37,27 +37,27 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
37 |
* Request data from the thir party API.
|
38 |
*
|
39 |
* @since 1.5.4
|
40 |
-
* @param string $base_url
|
41 |
-
* @param string $api_key
|
42 |
-
* @param string $endpoint
|
43 |
-
* @param array $params
|
44 |
-
* @return array|object
|
45 |
*/
|
46 |
private function get_api_response( $base_url, $api_key, $endpoint, $params = array() ) {
|
47 |
// Exclude http:// from the user's input
|
48 |
-
$request_uri
|
49 |
|
50 |
-
$params['timeout']
|
51 |
-
$params['body']
|
52 |
-
$params['headers']
|
53 |
'Authorization' => 'TRUEREST apikey=' . $api_key,
|
54 |
);
|
55 |
-
$response
|
56 |
-
$response_code
|
57 |
-
$response_message
|
58 |
-
$get_response
|
59 |
|
60 |
-
if ( is_wp_error( $response ) || (200 != $response_code) ) {
|
61 |
|
62 |
if ( is_wp_error( $response ) ) {
|
63 |
$data['error'] = $response->get_error_message();
|
@@ -89,8 +89,8 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
89 |
*/
|
90 |
public function connect( $fields = array() ) {
|
91 |
$response = array(
|
92 |
-
'error'
|
93 |
-
'data'
|
94 |
);
|
95 |
|
96 |
// Make sure we have the Host.
|
@@ -98,15 +98,14 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
98 |
$response['error'] = __( 'Error: You must provide a Host.', 'fl-builder' );
|
99 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
100 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
101 |
-
} // Try to connect and store the connection data.
|
102 |
-
else {
|
103 |
|
104 |
$result = $this->get_api_response( $fields['api_host'], $fields['api_key'], '/lists.json' );
|
105 |
|
106 |
if ( ! isset( $result['error'] ) ) {
|
107 |
$response['data'] = array(
|
108 |
'api_host' => $fields['api_host'],
|
109 |
-
'api_key'
|
110 |
);
|
111 |
} else {
|
112 |
$response['error'] = sprintf( __( 'Error: Could not connect to Campayn. %s', 'fl-builder' ), $result['error'] );
|
@@ -126,24 +125,24 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
126 |
ob_start();
|
127 |
|
128 |
FLBuilder::render_settings_field( 'api_host', array(
|
129 |
-
'row_class'
|
130 |
-
'class'
|
131 |
-
'type'
|
132 |
-
'label'
|
133 |
-
'help'
|
134 |
-
'preview'
|
135 |
-
'type'
|
136 |
),
|
137 |
));
|
138 |
|
139 |
FLBuilder::render_settings_field( 'api_key', array(
|
140 |
-
'row_class'
|
141 |
-
'class'
|
142 |
-
'type'
|
143 |
-
'label'
|
144 |
-
'help'
|
145 |
-
'preview'
|
146 |
-
'type'
|
147 |
),
|
148 |
));
|
149 |
|
@@ -162,12 +161,12 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
162 |
* }
|
163 |
*/
|
164 |
public function render_fields( $account, $settings ) {
|
165 |
-
$account_data
|
166 |
-
$results
|
167 |
|
168 |
-
$response
|
169 |
-
'error'
|
170 |
-
'html'
|
171 |
);
|
172 |
|
173 |
if ( isset( $results['error'] ) ) {
|
@@ -200,13 +199,13 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
200 |
}
|
201 |
|
202 |
FLBuilder::render_settings_field( 'list_id', array(
|
203 |
-
'row_class'
|
204 |
-
'class'
|
205 |
-
'type'
|
206 |
-
'label'
|
207 |
-
'options'
|
208 |
-
'preview'
|
209 |
-
'type'
|
210 |
),
|
211 |
), $settings);
|
212 |
|
@@ -229,7 +228,7 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
229 |
$response = array(
|
230 |
'error' => false,
|
231 |
);
|
232 |
-
$contact_id
|
233 |
|
234 |
if ( ! $account_data ) {
|
235 |
$response['error'] = __( 'There was an error subscribing to Campayn. The account is no longer connected.', 'fl-builder' );
|
@@ -259,23 +258,23 @@ final class FLBuilderServiceCampayn extends FLBuilderService {
|
|
259 |
);
|
260 |
|
261 |
// Already exists
|
262 |
-
if ( ! isset( $result['error'] ) && (is_array( $result ) && isset( $result[0]['id'] )) ) {
|
263 |
$contact_id = $result[0]['id'];
|
264 |
}
|
265 |
|
266 |
// Add the contact if it doesn't exist.
|
267 |
if ( ! $contact_id ) {
|
268 |
$endpoint = "/lists/{$settings->list_id}/contacts.json";
|
269 |
-
$method
|
270 |
} else {
|
271 |
-
$endpoint
|
272 |
-
$method
|
273 |
$data['id'] = $contact_id;
|
274 |
}
|
275 |
|
276 |
$result = $this->get_api_response( $account_data['api_host'], $account_data['api_key'], $endpoint, array(
|
277 |
-
|
278 |
-
|
279 |
) );
|
280 |
|
281 |
if ( isset( $result['error'] ) ) {
|
37 |
* Request data from the thir party API.
|
38 |
*
|
39 |
* @since 1.5.4
|
40 |
+
* @param string $base_url Base URL where API is available
|
41 |
+
* @param string $api_key API Key provided by this service
|
42 |
+
* @param string $endpoint Method to request available from this service.
|
43 |
+
* @param array $params Data to be passed to API
|
44 |
+
* @return array|object The API response.
|
45 |
*/
|
46 |
private function get_api_response( $base_url, $api_key, $endpoint, $params = array() ) {
|
47 |
// Exclude http:// from the user's input
|
48 |
+
$request_uri = $this->api_protocol . '://' . preg_replace( '#^https?://#', '', $base_url ) . '/api/v' . $this->api_version . $endpoint;
|
49 |
|
50 |
+
$params['timeout'] = 60;
|
51 |
+
$params['body'] = isset( $params['data'] ) && $params['data'] ? json_encode( $params['data'] ) : '';
|
52 |
+
$params['headers'] = array(
|
53 |
'Authorization' => 'TRUEREST apikey=' . $api_key,
|
54 |
);
|
55 |
+
$response = wp_remote_get( $request_uri, $params );
|
56 |
+
$response_code = wp_remote_retrieve_response_code( $response );
|
57 |
+
$response_message = wp_remote_retrieve_response_message( $response );
|
58 |
+
$get_response = json_decode( wp_remote_retrieve_body( $response ), true );
|
59 |
|
60 |
+
if ( is_wp_error( $response ) || ( 200 != $response_code ) ) {
|
61 |
|
62 |
if ( is_wp_error( $response ) ) {
|
63 |
$data['error'] = $response->get_error_message();
|
89 |
*/
|
90 |
public function connect( $fields = array() ) {
|
91 |
$response = array(
|
92 |
+
'error' => false,
|
93 |
+
'data' => array(),
|
94 |
);
|
95 |
|
96 |
// Make sure we have the Host.
|
98 |
$response['error'] = __( 'Error: You must provide a Host.', 'fl-builder' );
|
99 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
100 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
101 |
+
} else { // Try to connect and store the connection data.
|
|
|
102 |
|
103 |
$result = $this->get_api_response( $fields['api_host'], $fields['api_key'], '/lists.json' );
|
104 |
|
105 |
if ( ! isset( $result['error'] ) ) {
|
106 |
$response['data'] = array(
|
107 |
'api_host' => $fields['api_host'],
|
108 |
+
'api_key' => $fields['api_key'],
|
109 |
);
|
110 |
} else {
|
111 |
$response['error'] = sprintf( __( 'Error: Could not connect to Campayn. %s', 'fl-builder' ), $result['error'] );
|
125 |
ob_start();
|
126 |
|
127 |
FLBuilder::render_settings_field( 'api_host', array(
|
128 |
+
'row_class' => 'fl-builder-service-connect-row',
|
129 |
+
'class' => 'fl-builder-service-connect-input',
|
130 |
+
'type' => 'text',
|
131 |
+
'label' => __( 'Host', 'fl-builder' ),
|
132 |
+
'help' => __( 'The host you chose when you signed up for your account. Check your welcome email if you forgot it. Please enter it without the initial http:// (for example: demo.campayn.com).', 'fl-builder' ),
|
133 |
+
'preview' => array(
|
134 |
+
'type' => 'none',
|
135 |
),
|
136 |
));
|
137 |
|
138 |
FLBuilder::render_settings_field( 'api_key', array(
|
139 |
+
'row_class' => 'fl-builder-service-connect-row',
|
140 |
+
'class' => 'fl-builder-service-connect-input',
|
141 |
+
'type' => 'text',
|
142 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
143 |
+
'help' => __( 'Your API key can be found in your Campayn account under Settings > API Key.', 'fl-builder' ),
|
144 |
+
'preview' => array(
|
145 |
+
'type' => 'none',
|
146 |
),
|
147 |
));
|
148 |
|
161 |
* }
|
162 |
*/
|
163 |
public function render_fields( $account, $settings ) {
|
164 |
+
$account_data = $this->get_account_data( $account );
|
165 |
+
$results = $this->get_api_response( $account_data['api_host'], $account_data['api_key'], '/lists.json' );
|
166 |
|
167 |
+
$response = array(
|
168 |
+
'error' => false,
|
169 |
+
'html' => '',
|
170 |
);
|
171 |
|
172 |
if ( isset( $results['error'] ) ) {
|
199 |
}
|
200 |
|
201 |
FLBuilder::render_settings_field( 'list_id', array(
|
202 |
+
'row_class' => 'fl-builder-service-field-row',
|
203 |
+
'class' => 'fl-builder-service-list-select',
|
204 |
+
'type' => 'select',
|
205 |
+
'label' => _x( 'List', 'An email list from third party provider.', 'fl-builder' ),
|
206 |
+
'options' => $options,
|
207 |
+
'preview' => array(
|
208 |
+
'type' => 'none',
|
209 |
),
|
210 |
), $settings);
|
211 |
|
228 |
$response = array(
|
229 |
'error' => false,
|
230 |
);
|
231 |
+
$contact_id = null;
|
232 |
|
233 |
if ( ! $account_data ) {
|
234 |
$response['error'] = __( 'There was an error subscribing to Campayn. The account is no longer connected.', 'fl-builder' );
|
258 |
);
|
259 |
|
260 |
// Already exists
|
261 |
+
if ( ! isset( $result['error'] ) && ( is_array( $result ) && isset( $result[0]['id'] ) ) ) {
|
262 |
$contact_id = $result[0]['id'];
|
263 |
}
|
264 |
|
265 |
// Add the contact if it doesn't exist.
|
266 |
if ( ! $contact_id ) {
|
267 |
$endpoint = "/lists/{$settings->list_id}/contacts.json";
|
268 |
+
$method = 'POST';
|
269 |
} else {
|
270 |
+
$endpoint = "/contacts/{$contact_id}.json";
|
271 |
+
$method = 'PUT';
|
272 |
$data['id'] = $contact_id;
|
273 |
}
|
274 |
|
275 |
$result = $this->get_api_response( $account_data['api_host'], $account_data['api_key'], $endpoint, array(
|
276 |
+
'data' => $data,
|
277 |
+
'method' => $method,
|
278 |
) );
|
279 |
|
280 |
if ( isset( $result['error'] ) ) {
|
classes/class-fl-builder-service-constant-contact.php
CHANGED
@@ -38,8 +38,8 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
38 |
*/
|
39 |
public function connect( $fields = array() ) {
|
40 |
$response = array(
|
41 |
-
'error'
|
42 |
-
'data'
|
43 |
);
|
44 |
|
45 |
// Make sure we have an API key.
|
@@ -47,18 +47,17 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
47 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
48 |
} elseif ( ! isset( $fields['access_token'] ) || empty( $fields['access_token'] ) ) {
|
49 |
$response['error'] = __( 'Error: You must provide an access token.', 'fl-builder' );
|
50 |
-
} // Try to connect and store the connection data.
|
51 |
-
else {
|
52 |
|
53 |
-
$url
|
54 |
-
$request
|
55 |
|
56 |
if ( ! is_array( $request ) || ( isset( $request[0] ) && isset( $request[0]->error_message ) ) ) {
|
57 |
$response['error'] = sprintf( __( 'Error: Could not connect to Constant Contact. %s', 'fl-builder' ), $request[0]->error_message );
|
58 |
} else {
|
59 |
$response['data'] = array(
|
60 |
-
'api_key'
|
61 |
-
'access_token'
|
62 |
);
|
63 |
}
|
64 |
}
|
@@ -76,25 +75,25 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
76 |
ob_start();
|
77 |
|
78 |
FLBuilder::render_settings_field( 'api_key', array(
|
79 |
-
'row_class'
|
80 |
-
'class'
|
81 |
-
'type'
|
82 |
-
'label'
|
83 |
-
'help'
|
84 |
-
'preview'
|
85 |
-
'type'
|
86 |
),
|
87 |
));
|
88 |
|
89 |
FLBuilder::render_settings_field( 'access_token', array(
|
90 |
-
'row_class'
|
91 |
-
'class'
|
92 |
-
'type'
|
93 |
-
'label'
|
94 |
-
'help'
|
95 |
-
'description'
|
96 |
-
'preview'
|
97 |
-
'type'
|
98 |
),
|
99 |
));
|
100 |
|
@@ -113,14 +112,14 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
113 |
* }
|
114 |
*/
|
115 |
public function render_fields( $account, $settings ) {
|
116 |
-
$account_data
|
117 |
-
$api_key
|
118 |
-
$access_token
|
119 |
-
$url
|
120 |
-
$request
|
121 |
-
$response
|
122 |
-
'error'
|
123 |
-
'html'
|
124 |
);
|
125 |
|
126 |
if ( ! is_array( $request ) || ( isset( $request[0] ) && isset( $request[0]->error_message ) ) ) {
|
@@ -153,13 +152,13 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
153 |
}
|
154 |
|
155 |
FLBuilder::render_settings_field( 'list_id', array(
|
156 |
-
'row_class'
|
157 |
-
'class'
|
158 |
-
'type'
|
159 |
-
'label'
|
160 |
-
'options'
|
161 |
-
'preview'
|
162 |
-
'type'
|
163 |
),
|
164 |
), $settings);
|
165 |
|
@@ -178,8 +177,8 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
178 |
* }
|
179 |
*/
|
180 |
public function subscribe( $settings, $email, $name = false ) {
|
181 |
-
$account_data
|
182 |
-
$response
|
183 |
'error' => false,
|
184 |
);
|
185 |
|
@@ -187,12 +186,12 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
187 |
$response['error'] = __( 'There was an error subscribing to Constant Contact. The account is no longer connected.', 'fl-builder' );
|
188 |
} else {
|
189 |
|
190 |
-
$api_key
|
191 |
-
$access_token
|
192 |
-
$url
|
193 |
-
$request
|
194 |
-
$contact
|
195 |
-
$list_id
|
196 |
|
197 |
// This contact exists.
|
198 |
if ( ! empty( $contact->results ) ) {
|
@@ -239,9 +238,9 @@ final class FLBuilderServiceConstantContact extends FLBuilderService {
|
|
239 |
} else {
|
240 |
// @codingStandardsIgnoreLine
|
241 |
$args = $data = array();
|
242 |
-
$data['email_addresses']
|
243 |
-
$data['email_addresses'][0]['id']
|
244 |
-
$data['email_addresses'][0]['status']
|
245 |
$data['email_addresses'][0]['confirm_status'] = 'CONFIRMED';
|
246 |
$data['email_addresses'][0]['email_address'] = $email;
|
247 |
$data['lists'] = array();
|
38 |
*/
|
39 |
public function connect( $fields = array() ) {
|
40 |
$response = array(
|
41 |
+
'error' => false,
|
42 |
+
'data' => array(),
|
43 |
);
|
44 |
|
45 |
// Make sure we have an API key.
|
47 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
48 |
} elseif ( ! isset( $fields['access_token'] ) || empty( $fields['access_token'] ) ) {
|
49 |
$response['error'] = __( 'Error: You must provide an access token.', 'fl-builder' );
|
50 |
+
} else { // Try to connect and store the connection data.
|
|
|
51 |
|
52 |
+
$url = $this->api_url . 'lists?api_key=' . $fields['api_key'] . '&access_token=' . $fields['access_token'];
|
53 |
+
$request = json_decode( wp_remote_retrieve_body( wp_remote_get( $url ) ) );
|
54 |
|
55 |
if ( ! is_array( $request ) || ( isset( $request[0] ) && isset( $request[0]->error_message ) ) ) {
|
56 |
$response['error'] = sprintf( __( 'Error: Could not connect to Constant Contact. %s', 'fl-builder' ), $request[0]->error_message );
|
57 |
} else {
|
58 |
$response['data'] = array(
|
59 |
+
'api_key' => $fields['api_key'],
|
60 |
+
'access_token' => $fields['access_token'],
|
61 |
);
|
62 |
}
|
63 |
}
|
75 |
ob_start();
|
76 |
|
77 |
FLBuilder::render_settings_field( 'api_key', array(
|
78 |
+
'row_class' => 'fl-builder-service-connect-row',
|
79 |
+
'class' => 'fl-builder-service-connect-input',
|
80 |
+
'type' => 'text',
|
81 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
82 |
+
'help' => __( 'Your Constant Contact API key.', 'fl-builder' ),
|
83 |
+
'preview' => array(
|
84 |
+
'type' => 'none',
|
85 |
),
|
86 |
));
|
87 |
|
88 |
FLBuilder::render_settings_field( 'access_token', array(
|
89 |
+
'row_class' => 'fl-builder-service-connect-row',
|
90 |
+
'class' => 'fl-builder-service-connect-input',
|
91 |
+
'type' => 'text',
|
92 |
+
'label' => __( 'Access Token', 'fl-builder' ),
|
93 |
+
'help' => __( 'Your Constant Contact access token.', 'fl-builder' ),
|
94 |
+
'description' => sprintf( __( 'You must register a <a%1$s>Developer Account</a> with Constant Contact to obtain an API key and access token. Please see <a%2$s>Getting an API key</a> for complete instructions.', 'fl-builder' ), ' href="https://constantcontact.mashery.com/member/register" target="_blank"', ' href="https://developer.constantcontact.com/home/api-keys.html" target="_blank"' ),
|
95 |
+
'preview' => array(
|
96 |
+
'type' => 'none',
|
97 |
),
|
98 |
));
|
99 |
|
112 |
* }
|
113 |
*/
|
114 |
public function render_fields( $account, $settings ) {
|
115 |
+
$account_data = $this->get_account_data( $account );
|
116 |
+
$api_key = $account_data['api_key'];
|
117 |
+
$access_token = $account_data['access_token'];
|
118 |
+
$url = $this->api_url . 'lists?api_key=' . $api_key . '&access_token=' . $access_token;
|
119 |
+
$request = json_decode( wp_remote_retrieve_body( wp_remote_get( $url ) ) );
|
120 |
+
$response = array(
|
121 |
+
'error' => false,
|
122 |
+
'html' => '',
|
123 |
);
|
124 |
|
125 |
if ( ! is_array( $request ) || ( isset( $request[0] ) && isset( $request[0]->error_message ) ) ) {
|
152 |
}
|
153 |
|
154 |
FLBuilder::render_settings_field( 'list_id', array(
|
155 |
+
'row_class' => 'fl-builder-service-field-row',
|
156 |
+
'class' => 'fl-builder-service-list-select',
|
157 |
+
'type' => 'select',
|
158 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
159 |
+
'options' => $options,
|
160 |
+
'preview' => array(
|
161 |
+
'type' => 'none',
|
162 |
),
|
163 |
), $settings);
|
164 |
|
177 |
* }
|
178 |
*/
|
179 |
public function subscribe( $settings, $email, $name = false ) {
|
180 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
181 |
+
$response = array(
|
182 |
'error' => false,
|
183 |
);
|
184 |
|
186 |
$response['error'] = __( 'There was an error subscribing to Constant Contact. The account is no longer connected.', 'fl-builder' );
|
187 |
} else {
|
188 |
|
189 |
+
$api_key = $account_data['api_key'];
|
190 |
+
$access_token = $account_data['access_token'];
|
191 |
+
$url = $this->api_url . 'contacts?api_key=' . $api_key . '&access_token=' . $access_token . '&email=' . $email;
|
192 |
+
$request = wp_remote_get( $url );
|
193 |
+
$contact = json_decode( wp_remote_retrieve_body( $request ) );
|
194 |
+
$list_id = $settings->list_id;
|
195 |
|
196 |
// This contact exists.
|
197 |
if ( ! empty( $contact->results ) ) {
|
238 |
} else {
|
239 |
// @codingStandardsIgnoreLine
|
240 |
$args = $data = array();
|
241 |
+
$data['email_addresses'] = array();
|
242 |
+
$data['email_addresses'][0]['id'] = $list_id;
|
243 |
+
$data['email_addresses'][0]['status'] = 'ACTIVE';
|
244 |
$data['email_addresses'][0]['confirm_status'] = 'CONFIRMED';
|
245 |
$data['email_addresses'][0]['email_address'] = $email;
|
246 |
$data['lists'] = array();
|
classes/class-fl-builder-service-convertkit.php
CHANGED
@@ -56,8 +56,8 @@ final class FLBuilderServiceConvertKit extends FLBuilderService {
|
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
-
'error'
|
60 |
-
'data'
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API key.
|
@@ -89,13 +89,13 @@ final class FLBuilderServiceConvertKit extends FLBuilderService {
|
|
89 |
ob_start();
|
90 |
|
91 |
FLBuilder::render_settings_field( 'api_key', array(
|
92 |
-
'row_class'
|
93 |
-
'class'
|
94 |
-
'type'
|
95 |
-
'label'
|
96 |
-
'help'
|
97 |
-
'preview'
|
98 |
-
'type'
|
99 |
),
|
100 |
));
|
101 |
|
@@ -114,12 +114,12 @@ final class FLBuilderServiceConvertKit extends FLBuilderService {
|
|
114 |
* }
|
115 |
*/
|
116 |
public function render_fields( $account, $settings ) {
|
117 |
-
$account_data
|
118 |
-
$api
|
119 |
-
$forms
|
120 |
-
$response
|
121 |
-
'error'
|
122 |
-
'html'
|
123 |
);
|
124 |
|
125 |
if ( ! $forms ) {
|
@@ -154,13 +154,13 @@ final class FLBuilderServiceConvertKit extends FLBuilderService {
|
|
154 |
}
|
155 |
|
156 |
FLBuilder::render_settings_field( 'list_id', array(
|
157 |
-
'row_class'
|
158 |
-
'class'
|
159 |
-
'type'
|
160 |
-
'label'
|
161 |
-
'options'
|
162 |
-
'preview'
|
163 |
-
'type'
|
164 |
),
|
165 |
), $settings);
|
166 |
|
@@ -188,7 +188,7 @@ final class FLBuilderServiceConvertKit extends FLBuilderService {
|
|
188 |
$response['error'] = __( 'There was an error subscribing to ConvertKit. The account is no longer connected.', 'fl-builder' );
|
189 |
} else {
|
190 |
|
191 |
-
$api
|
192 |
$data = array(
|
193 |
'email' => $email,
|
194 |
);
|
@@ -200,7 +200,7 @@ final class FLBuilderServiceConvertKit extends FLBuilderService {
|
|
200 |
$result = $api->form_subscribe( $settings->list_id, $data );
|
201 |
|
202 |
if ( isset( $result->error ) ) {
|
203 |
-
$message
|
204 |
$response['error'] = sprintf(
|
205 |
__( 'There was an error subscribing to ConvertKit. Error: %s', 'fl-builder' ),
|
206 |
$message
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
+
'error' => false,
|
60 |
+
'data' => array(),
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API key.
|
89 |
ob_start();
|
90 |
|
91 |
FLBuilder::render_settings_field( 'api_key', array(
|
92 |
+
'row_class' => 'fl-builder-service-connect-row',
|
93 |
+
'class' => 'fl-builder-service-connect-input',
|
94 |
+
'type' => 'text',
|
95 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
96 |
+
'help' => __( 'Your API key can be found in your ConvertKit account under Account > Account Settings > API Key.', 'fl-builder' ),
|
97 |
+
'preview' => array(
|
98 |
+
'type' => 'none',
|
99 |
),
|
100 |
));
|
101 |
|
114 |
* }
|
115 |
*/
|
116 |
public function render_fields( $account, $settings ) {
|
117 |
+
$account_data = $this->get_account_data( $account );
|
118 |
+
$api = $this->get_api( $account_data['api_key'] );
|
119 |
+
$forms = $api->get_resources( 'forms' );
|
120 |
+
$response = array(
|
121 |
+
'error' => false,
|
122 |
+
'html' => '',
|
123 |
);
|
124 |
|
125 |
if ( ! $forms ) {
|
154 |
}
|
155 |
|
156 |
FLBuilder::render_settings_field( 'list_id', array(
|
157 |
+
'row_class' => 'fl-builder-service-field-row',
|
158 |
+
'class' => 'fl-builder-service-list-select',
|
159 |
+
'type' => 'select',
|
160 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
161 |
+
'options' => $options,
|
162 |
+
'preview' => array(
|
163 |
+
'type' => 'none',
|
164 |
),
|
165 |
), $settings);
|
166 |
|
188 |
$response['error'] = __( 'There was an error subscribing to ConvertKit. The account is no longer connected.', 'fl-builder' );
|
189 |
} else {
|
190 |
|
191 |
+
$api = $this->get_api( $account_data['api_key'] );
|
192 |
$data = array(
|
193 |
'email' => $email,
|
194 |
);
|
200 |
$result = $api->form_subscribe( $settings->list_id, $data );
|
201 |
|
202 |
if ( isset( $result->error ) ) {
|
203 |
+
$message = isset( $result->message ) ? $result->message : '';
|
204 |
$response['error'] = sprintf(
|
205 |
__( 'There was an error subscribing to ConvertKit. Error: %s', 'fl-builder' ),
|
206 |
$message
|
classes/class-fl-builder-service-drip.php
CHANGED
@@ -56,8 +56,8 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
-
'error'
|
60 |
-
'data'
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API token.
|
@@ -65,21 +65,20 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
65 |
$response['error'] = __( 'Error: You must provide an API token.', 'fl-builder' );
|
66 |
} elseif ( ! isset( $fields['api_account_id'] ) || empty( $fields['api_account_id'] ) ) {
|
67 |
$response['error'] = __( 'Error: You must provide an Account ID.', 'fl-builder' );
|
68 |
-
} // Try to connect and store the connection data.
|
69 |
-
else {
|
70 |
try {
|
71 |
|
72 |
-
$api
|
73 |
try {
|
74 |
|
75 |
-
$account
|
76 |
$error_message = $api->get_error_message();
|
77 |
|
78 |
if ( ! empty( $error_message ) ) {
|
79 |
$response['error'] = $error_message;
|
80 |
} else {
|
81 |
$response['data'] = array(
|
82 |
-
'api_key'
|
83 |
'api_account_id' => $fields['api_account_id'],
|
84 |
);
|
85 |
}
|
@@ -110,24 +109,24 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
110 |
ob_start();
|
111 |
|
112 |
FLBuilder::render_settings_field( 'api_key', array(
|
113 |
-
'row_class'
|
114 |
-
'class'
|
115 |
-
'type'
|
116 |
-
'label'
|
117 |
-
'description'
|
118 |
-
'preview'
|
119 |
-
'type'
|
120 |
),
|
121 |
));
|
122 |
|
123 |
FLBuilder::render_settings_field( 'api_account_id', array(
|
124 |
-
'row_class'
|
125 |
-
'class'
|
126 |
-
'type'
|
127 |
-
'label'
|
128 |
-
'help'
|
129 |
-
'preview'
|
130 |
-
'type'
|
131 |
),
|
132 |
));
|
133 |
|
@@ -146,15 +145,15 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
146 |
* }
|
147 |
*/
|
148 |
public function render_fields( $account, $settings ) {
|
149 |
-
$account_data
|
150 |
-
$api
|
151 |
-
$campaigns
|
152 |
'account_id' => $account_data['api_account_id'],
|
153 |
) );
|
154 |
|
155 |
-
$response
|
156 |
-
'error'
|
157 |
-
'html'
|
158 |
);
|
159 |
|
160 |
return $response;
|
@@ -181,13 +180,13 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
181 |
}
|
182 |
|
183 |
FLBuilder::render_settings_field( 'campaign_id', array(
|
184 |
-
'row_class'
|
185 |
-
'class'
|
186 |
-
'type'
|
187 |
-
'label'
|
188 |
-
'options'
|
189 |
-
'preview'
|
190 |
-
'type'
|
191 |
),
|
192 |
), $settings);
|
193 |
|
@@ -206,13 +205,13 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
206 |
ob_start();
|
207 |
|
208 |
FLBuilder::render_settings_field( 'list_id', array(
|
209 |
-
'row_class'
|
210 |
-
'class'
|
211 |
-
'type'
|
212 |
-
'label'
|
213 |
-
'help'
|
214 |
-
'preview'
|
215 |
-
'type'
|
216 |
),
|
217 |
), $settings);
|
218 |
|
@@ -231,20 +230,20 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
231 |
* }
|
232 |
*/
|
233 |
public function subscribe( $settings, $email, $name = '' ) {
|
234 |
-
$account_data
|
235 |
-
$response
|
236 |
'error' => false,
|
237 |
);
|
238 |
-
$subscriber_id
|
239 |
|
240 |
if ( ! $account_data ) {
|
241 |
$response['error'] = __( 'There was an error subscribing to Drip. The account is no longer connected.', 'fl-builder' );
|
242 |
} else {
|
243 |
|
244 |
-
$api
|
245 |
$args = array(
|
246 |
'account_id' => $account_data['api_account_id'],
|
247 |
-
'email'
|
248 |
);
|
249 |
|
250 |
// Check if the contact already exists
|
@@ -282,9 +281,9 @@ final class FLBuilderServiceDrip extends FLBuilderService {
|
|
282 |
$result = $api->create_or_update_subscriber( $args );
|
283 |
|
284 |
if ( isset( $result['id'] ) && isset( $settings->campaign_id ) ) {
|
285 |
-
$args['campaign_id']
|
286 |
$args['double_optin'] = false;
|
287 |
-
$get_res
|
288 |
}
|
289 |
} catch ( Exception $e ) {
|
290 |
$response['error'] = sprintf(
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
+
'error' => false,
|
60 |
+
'data' => array(),
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API token.
|
65 |
$response['error'] = __( 'Error: You must provide an API token.', 'fl-builder' );
|
66 |
} elseif ( ! isset( $fields['api_account_id'] ) || empty( $fields['api_account_id'] ) ) {
|
67 |
$response['error'] = __( 'Error: You must provide an Account ID.', 'fl-builder' );
|
68 |
+
} else { // Try to connect and store the connection data.
|
|
|
69 |
try {
|
70 |
|
71 |
+
$api = $this->get_api( $fields['api_key'] );
|
72 |
try {
|
73 |
|
74 |
+
$account = $api->fetch_account( $fields['api_account_id'] );
|
75 |
$error_message = $api->get_error_message();
|
76 |
|
77 |
if ( ! empty( $error_message ) ) {
|
78 |
$response['error'] = $error_message;
|
79 |
} else {
|
80 |
$response['data'] = array(
|
81 |
+
'api_key' => $fields['api_key'],
|
82 |
'api_account_id' => $fields['api_account_id'],
|
83 |
);
|
84 |
}
|
109 |
ob_start();
|
110 |
|
111 |
FLBuilder::render_settings_field( 'api_key', array(
|
112 |
+
'row_class' => 'fl-builder-service-connect-row',
|
113 |
+
'class' => 'fl-builder-service-connect-input',
|
114 |
+
'type' => 'text',
|
115 |
+
'label' => __( 'API Token', 'fl-builder' ),
|
116 |
+
'description' => sprintf( __( 'Your API Token can be found in your Drip account under Settings > My User Settings. Or, you can click this <a%s>direct link</a>.', 'fl-builder' ), ' href="https://www.getdrip.com/user/edit" target="_blank"' ),
|
117 |
+
'preview' => array(
|
118 |
+
'type' => 'none',
|
119 |
),
|
120 |
));
|
121 |
|
122 |
FLBuilder::render_settings_field( 'api_account_id', array(
|
123 |
+
'row_class' => 'fl-builder-service-connect-row',
|
124 |
+
'class' => 'fl-builder-service-connect-input',
|
125 |
+
'type' => 'text',
|
126 |
+
'label' => __( 'Account ID', 'fl-builder' ),
|
127 |
+
'help' => __( 'Your Account ID can be found in your Drip account under Settings > Site Setup.', 'fl-builder' ),
|
128 |
+
'preview' => array(
|
129 |
+
'type' => 'none',
|
130 |
),
|
131 |
));
|
132 |
|
145 |
* }
|
146 |
*/
|
147 |
public function render_fields( $account, $settings ) {
|
148 |
+
$account_data = $this->get_account_data( $account );
|
149 |
+
$api = $this->get_api( $account_data['api_key'] );
|
150 |
+
$campaigns = $api->get_campaigns( array(
|
151 |
'account_id' => $account_data['api_account_id'],
|
152 |
) );
|
153 |
|
154 |
+
$response = array(
|
155 |
+
'error' => false,
|
156 |
+
'html' => $this->render_campaigns_field( $campaigns, $settings ) . $this->render_tag_field( $settings ),
|
157 |
);
|
158 |
|
159 |
return $response;
|
180 |
}
|
181 |
|
182 |
FLBuilder::render_settings_field( 'campaign_id', array(
|
183 |
+
'row_class' => 'fl-builder-service-field-row',
|
184 |
+
'class' => 'fl-builder-service-campaign-select',
|
185 |
+
'type' => 'select',
|
186 |
+
'label' => _x( 'Campaign', 'An email campaign from your GetDrip account.', 'fl-builder' ),
|
187 |
+
'options' => $options,
|
188 |
+
'preview' => array(
|
189 |
+
'type' => 'none',
|
190 |
),
|
191 |
), $settings);
|
192 |
|
205 |
ob_start();
|
206 |
|
207 |
FLBuilder::render_settings_field( 'list_id', array(
|
208 |
+
'row_class' => 'fl-builder-service-field-row',
|
209 |
+
'class' => 'fl-builder-service-list-select',
|
210 |
+
'type' => 'text',
|
211 |
+
'label' => _x( 'Tags', 'A tag to add to contacts in Drip when they subscribe.', 'fl-builder' ),
|
212 |
+
'help' => __( 'For multiple tags, separate with comma.', 'fl-builder' ),
|
213 |
+
'preview' => array(
|
214 |
+
'type' => 'none',
|
215 |
),
|
216 |
), $settings);
|
217 |
|
230 |
* }
|
231 |
*/
|
232 |
public function subscribe( $settings, $email, $name = '' ) {
|
233 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
234 |
+
$response = array(
|
235 |
'error' => false,
|
236 |
);
|
237 |
+
$subscriber_id = null;
|
238 |
|
239 |
if ( ! $account_data ) {
|
240 |
$response['error'] = __( 'There was an error subscribing to Drip. The account is no longer connected.', 'fl-builder' );
|
241 |
} else {
|
242 |
|
243 |
+
$api = $this->get_api( $account_data['api_key'] );
|
244 |
$args = array(
|
245 |
'account_id' => $account_data['api_account_id'],
|
246 |
+
'email' => $email,
|
247 |
);
|
248 |
|
249 |
// Check if the contact already exists
|
281 |
$result = $api->create_or_update_subscriber( $args );
|
282 |
|
283 |
if ( isset( $result['id'] ) && isset( $settings->campaign_id ) ) {
|
284 |
+
$args['campaign_id'] = $settings->campaign_id;
|
285 |
$args['double_optin'] = false;
|
286 |
+
$get_res = $api->subscribe_subscriber( $args );
|
287 |
}
|
288 |
} catch ( Exception $e ) {
|
289 |
$response['error'] = sprintf(
|
classes/class-fl-builder-service-email-address.php
CHANGED
@@ -29,8 +29,8 @@ final class FLBuilderServiceEmailAddress extends FLBuilderService {
|
|
29 |
*/
|
30 |
public function connect( $fields = array() ) {
|
31 |
$response = array(
|
32 |
-
'error'
|
33 |
-
'data'
|
34 |
);
|
35 |
|
36 |
// Make sure we have an email address.
|
@@ -55,12 +55,12 @@ final class FLBuilderServiceEmailAddress extends FLBuilderService {
|
|
55 |
ob_start();
|
56 |
|
57 |
FLBuilder::render_settings_field( 'email', array(
|
58 |
-
'row_class'
|
59 |
-
'class'
|
60 |
-
'type'
|
61 |
-
'label'
|
62 |
-
'preview'
|
63 |
-
'type'
|
64 |
),
|
65 |
));
|
66 |
|
@@ -80,8 +80,8 @@ final class FLBuilderServiceEmailAddress extends FLBuilderService {
|
|
80 |
*/
|
81 |
public function render_fields( $account, $settings ) {
|
82 |
$response = array(
|
83 |
-
'error'
|
84 |
-
'html'
|
85 |
);
|
86 |
|
87 |
return $response;
|
29 |
*/
|
30 |
public function connect( $fields = array() ) {
|
31 |
$response = array(
|
32 |
+
'error' => false,
|
33 |
+
'data' => array(),
|
34 |
);
|
35 |
|
36 |
// Make sure we have an email address.
|
55 |
ob_start();
|
56 |
|
57 |
FLBuilder::render_settings_field( 'email', array(
|
58 |
+
'row_class' => 'fl-builder-service-connect-row',
|
59 |
+
'class' => 'fl-builder-service-connect-input',
|
60 |
+
'type' => 'text',
|
61 |
+
'label' => __( 'Email Address', 'fl-builder' ),
|
62 |
+
'preview' => array(
|
63 |
+
'type' => 'none',
|
64 |
),
|
65 |
));
|
66 |
|
80 |
*/
|
81 |
public function render_fields( $account, $settings ) {
|
82 |
$response = array(
|
83 |
+
'error' => false,
|
84 |
+
'html' => '',
|
85 |
);
|
86 |
|
87 |
return $response;
|
classes/class-fl-builder-service-enormail.php
CHANGED
@@ -58,8 +58,8 @@ final class FLBuilderServiceEnormail extends FLBuilderService {
|
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
-
'error'
|
62 |
-
'data'
|
63 |
);
|
64 |
|
65 |
// Make sure we have an API key.
|
@@ -96,13 +96,13 @@ final class FLBuilderServiceEnormail extends FLBuilderService {
|
|
96 |
ob_start();
|
97 |
|
98 |
FLBuilder::render_settings_field( 'api_key', array(
|
99 |
-
'row_class'
|
100 |
-
'class'
|
101 |
-
'type'
|
102 |
-
'label'
|
103 |
-
'help'
|
104 |
-
'preview'
|
105 |
-
'type'
|
106 |
),
|
107 |
));
|
108 |
|
@@ -121,12 +121,12 @@ final class FLBuilderServiceEnormail extends FLBuilderService {
|
|
121 |
* }
|
122 |
*/
|
123 |
public function render_fields( $account, $settings ) {
|
124 |
-
$account_data
|
125 |
-
$api
|
126 |
-
$lists
|
127 |
-
$response
|
128 |
-
'error'
|
129 |
-
'html'
|
130 |
);
|
131 |
|
132 |
if ( ! $lists ) {
|
@@ -161,13 +161,13 @@ final class FLBuilderServiceEnormail extends FLBuilderService {
|
|
161 |
}
|
162 |
|
163 |
FLBuilder::render_settings_field( 'list_id', array(
|
164 |
-
'row_class'
|
165 |
-
'class'
|
166 |
-
'type'
|
167 |
-
'label'
|
168 |
-
'options'
|
169 |
-
'preview'
|
170 |
-
'type'
|
171 |
),
|
172 |
), $settings);
|
173 |
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
+
'error' => false,
|
62 |
+
'data' => array(),
|
63 |
);
|
64 |
|
65 |
// Make sure we have an API key.
|
96 |
ob_start();
|
97 |
|
98 |
FLBuilder::render_settings_field( 'api_key', array(
|
99 |
+
'row_class' => 'fl-builder-service-connect-row',
|
100 |
+
'class' => 'fl-builder-service-connect-input',
|
101 |
+
'type' => 'text',
|
102 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
103 |
+
'help' => __( 'Found in your Sendy application under Settings.', 'fl-builder' ),
|
104 |
+
'preview' => array(
|
105 |
+
'type' => 'none',
|
106 |
),
|
107 |
));
|
108 |
|
121 |
* }
|
122 |
*/
|
123 |
public function render_fields( $account, $settings ) {
|
124 |
+
$account_data = $this->get_account_data( $account );
|
125 |
+
$api = $this->get_api( $account_data['api_key'] );
|
126 |
+
$lists = json_decode( $api->lists->get() );
|
127 |
+
$response = array(
|
128 |
+
'error' => false,
|
129 |
+
'html' => '',
|
130 |
);
|
131 |
|
132 |
if ( ! $lists ) {
|
161 |
}
|
162 |
|
163 |
FLBuilder::render_settings_field( 'list_id', array(
|
164 |
+
'row_class' => 'fl-builder-service-field-row',
|
165 |
+
'class' => 'fl-builder-service-list-select',
|
166 |
+
'type' => 'select',
|
167 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
168 |
+
'options' => $options,
|
169 |
+
'preview' => array(
|
170 |
+
'type' => 'none',
|
171 |
),
|
172 |
), $settings);
|
173 |
|
classes/class-fl-builder-service-getresponse.php
CHANGED
@@ -56,8 +56,8 @@ final class FLBuilderServiceGetResponse extends FLBuilderService {
|
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
-
'error'
|
60 |
-
'data'
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API key.
|
@@ -90,13 +90,13 @@ final class FLBuilderServiceGetResponse extends FLBuilderService {
|
|
90 |
ob_start();
|
91 |
|
92 |
FLBuilder::render_settings_field( 'api_key', array(
|
93 |
-
'row_class'
|
94 |
-
'class'
|
95 |
-
'type'
|
96 |
-
'label'
|
97 |
-
'help'
|
98 |
-
'preview'
|
99 |
-
'type'
|
100 |
),
|
101 |
));
|
102 |
|
@@ -115,12 +115,12 @@ final class FLBuilderServiceGetResponse extends FLBuilderService {
|
|
115 |
* }
|
116 |
*/
|
117 |
public function render_fields( $account, $settings ) {
|
118 |
-
$account_data
|
119 |
-
$api
|
120 |
-
$lists
|
121 |
-
$response
|
122 |
-
'error'
|
123 |
-
'html'
|
124 |
);
|
125 |
|
126 |
if ( ! $lists ) {
|
@@ -154,25 +154,25 @@ final class FLBuilderServiceGetResponse extends FLBuilderService {
|
|
154 |
}
|
155 |
|
156 |
FLBuilder::render_settings_field( 'list_id', array(
|
157 |
-
'row_class'
|
158 |
-
'class'
|
159 |
-
'type'
|
160 |
-
'label'
|
161 |
-
'options'
|
162 |
-
'preview'
|
163 |
-
'type'
|
164 |
),
|
165 |
), $settings);
|
166 |
|
167 |
FLBuilder::render_settings_field( 'cycle_day', array(
|
168 |
-
'row_class'
|
169 |
-
'class'
|
170 |
-
'type'
|
171 |
-
'label'
|
172 |
-
'help'
|
173 |
-
'options'
|
174 |
-
'preview'
|
175 |
-
'type'
|
176 |
),
|
177 |
), $settings);
|
178 |
|
@@ -207,15 +207,15 @@ final class FLBuilderServiceGetResponse extends FLBuilderService {
|
|
207 |
// Fix, name should not be empty
|
208 |
if ( ! $name ) {
|
209 |
$names = explode( '@', $email );
|
210 |
-
$name
|
211 |
}
|
212 |
|
213 |
$cyle_day = isset( $settings->cycle_day ) ? $settings->cycle_day : 0;
|
214 |
|
215 |
$data = array(
|
216 |
-
'email'
|
217 |
-
'name'
|
218 |
-
'campaign'
|
219 |
'campaignId' => $settings->list_id,
|
220 |
),
|
221 |
'dayOfCycle' => $cyle_day,
|
@@ -223,8 +223,8 @@ final class FLBuilderServiceGetResponse extends FLBuilderService {
|
|
223 |
|
224 |
// Check if email exists
|
225 |
$get_contact = $api->getContacts(array(
|
226 |
-
'query'
|
227 |
-
'email'
|
228 |
'campaignId' => $settings->list_id,
|
229 |
),
|
230 |
'fields' => 'name, email',
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
+
'error' => false,
|
60 |
+
'data' => array(),
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API key.
|
90 |
ob_start();
|
91 |
|
92 |
FLBuilder::render_settings_field( 'api_key', array(
|
93 |
+
'row_class' => 'fl-builder-service-connect-row',
|
94 |
+
'class' => 'fl-builder-service-connect-input',
|
95 |
+
'type' => 'text',
|
96 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
97 |
+
'help' => __( 'Your API key can be found in your GetResponse account under My Account > API & OAuth.', 'fl-builder' ),
|
98 |
+
'preview' => array(
|
99 |
+
'type' => 'none',
|
100 |
),
|
101 |
));
|
102 |
|
115 |
* }
|
116 |
*/
|
117 |
public function render_fields( $account, $settings ) {
|
118 |
+
$account_data = $this->get_account_data( $account );
|
119 |
+
$api = $this->get_api( $account_data['api_key'] );
|
120 |
+
$lists = $api->getCampaigns();
|
121 |
+
$response = array(
|
122 |
+
'error' => false,
|
123 |
+
'html' => '',
|
124 |
);
|
125 |
|
126 |
if ( ! $lists ) {
|
154 |
}
|
155 |
|
156 |
FLBuilder::render_settings_field( 'list_id', array(
|
157 |
+
'row_class' => 'fl-builder-service-field-row',
|
158 |
+
'class' => 'fl-builder-service-list-select',
|
159 |
+
'type' => 'select',
|
160 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
161 |
+
'options' => $options,
|
162 |
+
'preview' => array(
|
163 |
+
'type' => 'none',
|
164 |
),
|
165 |
), $settings);
|
166 |
|
167 |
FLBuilder::render_settings_field( 'cycle_day', array(
|
168 |
+
'row_class' => 'fl-builder-service-field-row',
|
169 |
+
'class' => 'fl-builder-service-cycleday-select',
|
170 |
+
'type' => 'select',
|
171 |
+
'label' => _x( 'Cycle Day', 'Day of autoresponder cycle.', 'fl-builder' ),
|
172 |
+
'help' => __( 'This should match the cycle day settings for the selected list\'s Autoresponder.', 'fl-builder' ),
|
173 |
+
'options' => range( 0, 30 ),
|
174 |
+
'preview' => array(
|
175 |
+
'type' => 'none',
|
176 |
),
|
177 |
), $settings);
|
178 |
|
207 |
// Fix, name should not be empty
|
208 |
if ( ! $name ) {
|
209 |
$names = explode( '@', $email );
|
210 |
+
$name = $names[0];
|
211 |
}
|
212 |
|
213 |
$cyle_day = isset( $settings->cycle_day ) ? $settings->cycle_day : 0;
|
214 |
|
215 |
$data = array(
|
216 |
+
'email' => $email,
|
217 |
+
'name' => $name,
|
218 |
+
'campaign' => array(
|
219 |
'campaignId' => $settings->list_id,
|
220 |
),
|
221 |
'dayOfCycle' => $cyle_day,
|
223 |
|
224 |
// Check if email exists
|
225 |
$get_contact = $api->getContacts(array(
|
226 |
+
'query' => array(
|
227 |
+
'email' => $email,
|
228 |
'campaignId' => $settings->list_id,
|
229 |
),
|
230 |
'fields' => 'name, email',
|
classes/class-fl-builder-service-godaddy-email-marketing.php
CHANGED
@@ -58,8 +58,8 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
-
'error'
|
62 |
-
'data'
|
63 |
);
|
64 |
|
65 |
// Make sure we have an email address.
|
@@ -67,8 +67,7 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
67 |
$response['error'] = __( 'Error: You must provide an API username.', 'fl-builder' );
|
68 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
69 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
70 |
-
} // Try to connect and store the connection data.
|
71 |
-
else {
|
72 |
|
73 |
$api = $this->get_api( $fields['api_username'], $fields['api_key'] );
|
74 |
|
@@ -77,7 +76,7 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
77 |
} else {
|
78 |
$response['data'] = array(
|
79 |
'api_username' => $fields['api_username'],
|
80 |
-
'api_key'
|
81 |
);
|
82 |
}
|
83 |
}
|
@@ -95,25 +94,25 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
95 |
ob_start();
|
96 |
|
97 |
FLBuilder::render_settings_field( 'api_username', array(
|
98 |
-
'row_class'
|
99 |
-
'class'
|
100 |
-
'type'
|
101 |
-
'label'
|
102 |
-
'help'
|
103 |
-
'preview'
|
104 |
-
'type'
|
105 |
),
|
106 |
));
|
107 |
|
108 |
FLBuilder::render_settings_field( 'api_key', array(
|
109 |
-
'row_class'
|
110 |
-
'class'
|
111 |
-
'type'
|
112 |
-
'label'
|
113 |
-
'help'
|
114 |
-
'description'
|
115 |
-
'preview'
|
116 |
-
'type'
|
117 |
),
|
118 |
));
|
119 |
|
@@ -132,11 +131,11 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
132 |
* }
|
133 |
*/
|
134 |
public function render_fields( $account, $settings ) {
|
135 |
-
$account_data
|
136 |
-
$api
|
137 |
-
$response
|
138 |
-
'error'
|
139 |
-
'html'
|
140 |
);
|
141 |
|
142 |
$result = $api::get_forms();
|
@@ -173,13 +172,13 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
173 |
}
|
174 |
|
175 |
FLBuilder::render_settings_field( 'form_id', array(
|
176 |
-
'row_class'
|
177 |
-
'class'
|
178 |
-
'type'
|
179 |
-
'label'
|
180 |
-
'options'
|
181 |
-
'preview'
|
182 |
-
'type'
|
183 |
),
|
184 |
), $settings);
|
185 |
|
@@ -207,10 +206,10 @@ final class FLBuilderServiceGoDaddyEmailMarketing extends FLBuilderService {
|
|
207 |
$response['error'] = __( 'There was an error subscribing to GoDaddy Email Marketing. The account is no longer connected.', 'fl-builder' );
|
208 |
} else {
|
209 |
|
210 |
-
$api
|
211 |
-
$data
|
212 |
-
'email'
|
213 |
-
'form_id'
|
214 |
);
|
215 |
|
216 |
if ( $name ) {
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
+
'error' => false,
|
62 |
+
'data' => array(),
|
63 |
);
|
64 |
|
65 |
// Make sure we have an email address.
|
67 |
$response['error'] = __( 'Error: You must provide an API username.', 'fl-builder' );
|
68 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
69 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
70 |
+
} else { // Try to connect and store the connection data.
|
|
|
71 |
|
72 |
$api = $this->get_api( $fields['api_username'], $fields['api_key'] );
|
73 |
|
76 |
} else {
|
77 |
$response['data'] = array(
|
78 |
'api_username' => $fields['api_username'],
|
79 |
+
'api_key' => $fields['api_key'],
|
80 |
);
|
81 |
}
|
82 |
}
|
94 |
ob_start();
|
95 |
|
96 |
FLBuilder::render_settings_field( 'api_username', array(
|
97 |
+
'row_class' => 'fl-builder-service-connect-row',
|
98 |
+
'class' => 'fl-builder-service-connect-input',
|
99 |
+
'type' => 'text',
|
100 |
+
'label' => __( 'API Username', 'fl-builder' ),
|
101 |
+
'help' => __( 'The username associated with your GoDaddy Email Marketing account.', 'fl-builder' ),
|
102 |
+
'preview' => array(
|
103 |
+
'type' => 'none',
|
104 |
),
|
105 |
));
|
106 |
|
107 |
FLBuilder::render_settings_field( 'api_key', array(
|
108 |
+
'row_class' => 'fl-builder-service-connect-row',
|
109 |
+
'class' => 'fl-builder-service-connect-input',
|
110 |
+
'type' => 'text',
|
111 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
112 |
+
'help' => __( 'Your API key from your GoDaddy Email Marketing account.', 'fl-builder' ),
|
113 |
+
'description' => sprintf( __( '<a%1$s>Sign in</a> to get your username and API key. <a%2$s>Signup</a> if you don\'t have a GoDaddy Email Marketing account.', 'fl-builder' ), ' href="https://gem.godaddy.com/mwp/accounts" target="_blank"', ' href="https://sso.godaddy.com/account/create?path=/wordpress_plugin&app=gem&realm=idp&ssoreturnpath=/%3Fpath%3D%2Fwordpress_plugin%26app%3Dgem%26realm%3Didp" target="_blank"' ),
|
114 |
+
'preview' => array(
|
115 |
+
'type' => 'none',
|
116 |
),
|
117 |
));
|
118 |
|
131 |
* }
|
132 |
*/
|
133 |
public function render_fields( $account, $settings ) {
|
134 |
+
$account_data = $this->get_account_data( $account );
|
135 |
+
$api = $this->get_api( $account_data['api_username'], $account_data['api_key'] );
|
136 |
+
$response = array(
|
137 |
+
'error' => false,
|
138 |
+
'html' => '',
|
139 |
);
|
140 |
|
141 |
$result = $api::get_forms();
|
172 |
}
|
173 |
|
174 |
FLBuilder::render_settings_field( 'form_id', array(
|
175 |
+
'row_class' => 'fl-builder-service-field-row',
|
176 |
+
'class' => 'fl-builder-service-list-select',
|
177 |
+
'type' => 'select',
|
178 |
+
'label' => _x( 'Form', 'A signup form from your GoDaddy Email Marketing account.', 'fl-builder' ),
|
179 |
+
'options' => $options,
|
180 |
+
'preview' => array(
|
181 |
+
'type' => 'none',
|
182 |
),
|
183 |
), $settings);
|
184 |
|
206 |
$response['error'] = __( 'There was an error subscribing to GoDaddy Email Marketing. The account is no longer connected.', 'fl-builder' );
|
207 |
} else {
|
208 |
|
209 |
+
$api = $this->get_api( $account_data['api_username'], $account_data['api_key'] );
|
210 |
+
$data = array(
|
211 |
+
'email' => $email,
|
212 |
+
'form_id' => $settings->form_id,
|
213 |
);
|
214 |
|
215 |
if ( $name ) {
|
classes/class-fl-builder-service-hatchbuck.php
CHANGED
@@ -38,8 +38,8 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
38 |
*/
|
39 |
public function connect( $fields = array() ) {
|
40 |
$response = array(
|
41 |
-
'error'
|
42 |
-
'data'
|
43 |
);
|
44 |
|
45 |
// Make sure we have an API key.
|
@@ -48,12 +48,12 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
48 |
} else {
|
49 |
|
50 |
$result = wp_remote_post( $this->api_url . 'search?api_key=' . $fields['api_key'], array(
|
51 |
-
'method'
|
52 |
-
'timeout'
|
53 |
-
'headers'
|
54 |
'Content-Type' => 'application/json',
|
55 |
),
|
56 |
-
'body'
|
57 |
) );
|
58 |
|
59 |
if ( 401 == $result['response']['code'] ) {
|
@@ -78,13 +78,13 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
78 |
ob_start();
|
79 |
|
80 |
FLBuilder::render_settings_field( 'api_key', array(
|
81 |
-
'row_class'
|
82 |
-
'class'
|
83 |
-
'type'
|
84 |
-
'label'
|
85 |
-
'help'
|
86 |
-
'preview'
|
87 |
-
'type'
|
88 |
),
|
89 |
));
|
90 |
|
@@ -104,8 +104,8 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
104 |
*/
|
105 |
public function render_fields( $account, $settings ) {
|
106 |
$response = array(
|
107 |
-
'error'
|
108 |
-
'html'
|
109 |
);
|
110 |
|
111 |
return $response;
|
@@ -123,12 +123,12 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
123 |
ob_start();
|
124 |
|
125 |
FLBuilder::render_settings_field( 'list_id', array(
|
126 |
-
'row_class'
|
127 |
-
'class'
|
128 |
-
'type'
|
129 |
-
'label'
|
130 |
-
'preview'
|
131 |
-
'type'
|
132 |
),
|
133 |
), $settings);
|
134 |
|
@@ -147,7 +147,7 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
147 |
* }
|
148 |
*/
|
149 |
public function subscribe( $settings, $email, $name = false ) {
|
150 |
-
$contact_id
|
151 |
$account_data = $this->get_account_data( $settings->service_account );
|
152 |
$response = array(
|
153 |
'error' => false,
|
@@ -162,7 +162,7 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
162 |
'emails' => array(
|
163 |
array(
|
164 |
'address' => $email,
|
165 |
-
'type'
|
166 |
),
|
167 |
),
|
168 |
'status' => array(
|
@@ -172,12 +172,12 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
172 |
|
173 |
// Check if the contact exists.
|
174 |
$result = wp_remote_post( $this->api_url . 'search?api_key=' . $account_data['api_key'], array(
|
175 |
-
'method'
|
176 |
-
'timeout'
|
177 |
-
'headers'
|
178 |
'Content-Type' => 'application/json',
|
179 |
),
|
180 |
-
'body'
|
181 |
) );
|
182 |
|
183 |
// Return if we have an API key error.
|
@@ -187,8 +187,7 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
187 |
} elseif ( 200 == $result['response']['code'] ) {
|
188 |
$result_data = json_decode( $result['body'] );
|
189 |
$contact_id = $result_data[0]->contactId;
|
190 |
-
} // Generic error. Contact not found should be 400.
|
191 |
-
elseif ( 400 != $result['response']['code'] ) {
|
192 |
$response['error'] = __( 'There was an error subscribing to Hatchbuck.', 'fl-builder' );
|
193 |
return $response;
|
194 |
}
|
@@ -211,12 +210,12 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
211 |
|
212 |
// Add the contact to Hatchbuck.
|
213 |
$result = wp_remote_post( $this->api_url . '?api_key=' . $account_data['api_key'], array(
|
214 |
-
'method'
|
215 |
-
'timeout'
|
216 |
-
'headers'
|
217 |
'Content-Type' => 'application/json',
|
218 |
),
|
219 |
-
'body'
|
220 |
) );
|
221 |
|
222 |
// Return if we have an error.
|
@@ -233,12 +232,12 @@ final class FLBuilderServiceHatchbuck extends FLBuilderService {
|
|
233 |
|
234 |
// Add the tag to the contact.
|
235 |
$result = wp_remote_post( $this->api_url . $contact_id . '/Tags?api_key=' . $account_data['api_key'], array(
|
236 |
-
'method'
|
237 |
-
'timeout'
|
238 |
-
'headers'
|
239 |
'Content-Type' => 'application/json',
|
240 |
),
|
241 |
-
'body'
|
242 |
array(
|
243 |
'name' => $settings->list_id,
|
244 |
),
|
38 |
*/
|
39 |
public function connect( $fields = array() ) {
|
40 |
$response = array(
|
41 |
+
'error' => false,
|
42 |
+
'data' => array(),
|
43 |
);
|
44 |
|
45 |
// Make sure we have an API key.
|
48 |
} else {
|
49 |
|
50 |
$result = wp_remote_post( $this->api_url . 'search?api_key=' . $fields['api_key'], array(
|
51 |
+
'method' => 'POST',
|
52 |
+
'timeout' => 60,
|
53 |
+
'headers' => array(
|
54 |
'Content-Type' => 'application/json',
|
55 |
),
|
56 |
+
'body' => array(),
|
57 |
) );
|
58 |
|
59 |
if ( 401 == $result['response']['code'] ) {
|
78 |
ob_start();
|
79 |
|
80 |
FLBuilder::render_settings_field( 'api_key', array(
|
81 |
+
'row_class' => 'fl-builder-service-connect-row',
|
82 |
+
'class' => 'fl-builder-service-connect-input',
|
83 |
+
'type' => 'text',
|
84 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
85 |
+
'help' => __( 'Your API key can be found in your Hatchbuck account under Account Settings > Web API.', 'fl-builder' ),
|
86 |
+
'preview' => array(
|
87 |
+
'type' => 'none',
|
88 |
),
|
89 |
));
|
90 |
|
104 |
*/
|
105 |
public function render_fields( $account, $settings ) {
|
106 |
$response = array(
|
107 |
+
'error' => false,
|
108 |
+
'html' => $this->render_tag_field( $settings ),
|
109 |
);
|
110 |
|
111 |
return $response;
|
123 |
ob_start();
|
124 |
|
125 |
FLBuilder::render_settings_field( 'list_id', array(
|
126 |
+
'row_class' => 'fl-builder-service-field-row',
|
127 |
+
'class' => 'fl-builder-service-list-select',
|
128 |
+
'type' => 'text',
|
129 |
+
'label' => _x( 'Tag', 'A tag to add to contacts in Hatchbuck when they subscribe.', 'fl-builder' ),
|
130 |
+
'preview' => array(
|
131 |
+
'type' => 'none',
|
132 |
),
|
133 |
), $settings);
|
134 |
|
147 |
* }
|
148 |
*/
|
149 |
public function subscribe( $settings, $email, $name = false ) {
|
150 |
+
$contact_id = null;
|
151 |
$account_data = $this->get_account_data( $settings->service_account );
|
152 |
$response = array(
|
153 |
'error' => false,
|
162 |
'emails' => array(
|
163 |
array(
|
164 |
'address' => $email,
|
165 |
+
'type' => 'Work',
|
166 |
),
|
167 |
),
|
168 |
'status' => array(
|
172 |
|
173 |
// Check if the contact exists.
|
174 |
$result = wp_remote_post( $this->api_url . 'search?api_key=' . $account_data['api_key'], array(
|
175 |
+
'method' => 'POST',
|
176 |
+
'timeout' => 60,
|
177 |
+
'headers' => array(
|
178 |
'Content-Type' => 'application/json',
|
179 |
),
|
180 |
+
'body' => json_encode( $data ),
|
181 |
) );
|
182 |
|
183 |
// Return if we have an API key error.
|
187 |
} elseif ( 200 == $result['response']['code'] ) {
|
188 |
$result_data = json_decode( $result['body'] );
|
189 |
$contact_id = $result_data[0]->contactId;
|
190 |
+
} elseif ( 400 != $result['response']['code'] ) { // Generic error. Contact not found should be 400.
|
|
|
191 |
$response['error'] = __( 'There was an error subscribing to Hatchbuck.', 'fl-builder' );
|
192 |
return $response;
|
193 |
}
|
210 |
|
211 |
// Add the contact to Hatchbuck.
|
212 |
$result = wp_remote_post( $this->api_url . '?api_key=' . $account_data['api_key'], array(
|
213 |
+
'method' => 'POST',
|
214 |
+
'timeout' => 60,
|
215 |
+
'headers' => array(
|
216 |
'Content-Type' => 'application/json',
|
217 |
),
|
218 |
+
'body' => json_encode( $data ),
|
219 |
) );
|
220 |
|
221 |
// Return if we have an error.
|
232 |
|
233 |
// Add the tag to the contact.
|
234 |
$result = wp_remote_post( $this->api_url . $contact_id . '/Tags?api_key=' . $account_data['api_key'], array(
|
235 |
+
'method' => 'POST',
|
236 |
+
'timeout' => 60,
|
237 |
+
'headers' => array(
|
238 |
'Content-Type' => 'application/json',
|
239 |
),
|
240 |
+
'body' => json_encode( array(
|
241 |
array(
|
242 |
'name' => $settings->list_id,
|
243 |
),
|
classes/class-fl-builder-service-icontact-pro.php
CHANGED
@@ -68,8 +68,8 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
68 |
*/
|
69 |
public function connect( $fields = array() ) {
|
70 |
$response = array(
|
71 |
-
'error'
|
72 |
-
'data'
|
73 |
);
|
74 |
|
75 |
// Make sure we have a username.
|
@@ -77,17 +77,13 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
77 |
$response['error'] = __( 'Error: You must provide a username.', 'fl-builder' );
|
78 |
} elseif ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
79 |
$response['error'] = __( 'Error: You must provide an app ID.', 'fl-builder' );
|
80 |
-
} // Make sure we have an app password.
|
81 |
-
elseif ( ! isset( $fields['app_password'] ) || empty( $fields['app_password'] ) ) {
|
82 |
$response['error'] = __( 'Error: You must provide an app password.', 'fl-builder' );
|
83 |
-
} // Make sure we have a company ID
|
84 |
-
elseif ( ! isset( $fields['company_id'] ) || empty( $fields['company_id'] ) ) {
|
85 |
$response['error'] = __( 'Error: You must provide a company ID.', 'fl-builder' );
|
86 |
-
} // Make sure we have a profile ID
|
87 |
-
elseif ( ! isset( $fields['profile_id'] ) || empty( $fields['profile_id'] ) ) {
|
88 |
$response['error'] = __( 'Error: You must provide a profile ID.', 'fl-builder' );
|
89 |
-
} // Try to connect and store the connection data.
|
90 |
-
else {
|
91 |
|
92 |
$api = $this->get_api( array(
|
93 |
'apiUsername' => $fields['username'],
|
@@ -100,14 +96,14 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
100 |
try {
|
101 |
$api->getLists();
|
102 |
$response['data'] = array(
|
103 |
-
'username'
|
104 |
-
'app_id'
|
105 |
-
'app_password'
|
106 |
-
'company_id'
|
107 |
-
'profile_id'
|
108 |
);
|
109 |
} catch ( Exception $e ) {
|
110 |
-
$errors
|
111 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact Pro. %s', 'fl-builder' ), $errors[0] );
|
112 |
}
|
113 |
}
|
@@ -125,59 +121,59 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
125 |
ob_start();
|
126 |
|
127 |
FLBuilder::render_settings_field( 'username', array(
|
128 |
-
'row_class'
|
129 |
-
'class'
|
130 |
-
'type'
|
131 |
-
'label'
|
132 |
-
'help'
|
133 |
-
'preview'
|
134 |
-
'type'
|
135 |
),
|
136 |
));
|
137 |
|
138 |
FLBuilder::render_settings_field( 'app_id', array(
|
139 |
-
'row_class'
|
140 |
-
'class'
|
141 |
-
'type'
|
142 |
-
'label'
|
143 |
-
'help'
|
144 |
-
'preview'
|
145 |
-
'type'
|
146 |
),
|
147 |
));
|
148 |
|
149 |
FLBuilder::render_settings_field( 'app_password', array(
|
150 |
-
'row_class'
|
151 |
-
'class'
|
152 |
-
'type'
|
153 |
-
'label'
|
154 |
-
'help'
|
155 |
-
'description'
|
156 |
-
'preview'
|
157 |
-
'type'
|
158 |
),
|
159 |
));
|
160 |
|
161 |
FLBuilder::render_settings_field( 'company_id', array(
|
162 |
-
'row_class'
|
163 |
-
'class'
|
164 |
-
'type'
|
165 |
-
'label'
|
166 |
-
'help'
|
167 |
-
'preview'
|
168 |
-
'type'
|
169 |
),
|
170 |
));
|
171 |
|
172 |
FLBuilder::render_settings_field( 'profile_id', array(
|
173 |
-
'row_class'
|
174 |
-
'class'
|
175 |
-
'type'
|
176 |
-
'label'
|
177 |
-
'help'
|
178 |
-
'description'
|
179 |
-
'preview'
|
180 |
-
'type'
|
181 |
),
|
182 |
));
|
183 |
|
@@ -196,24 +192,24 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
196 |
* }
|
197 |
*/
|
198 |
public function render_fields( $account, $settings ) {
|
199 |
-
$account_data
|
200 |
-
$api
|
201 |
-
'apiUsername'
|
202 |
-
'appId'
|
203 |
-
'apiPassword'
|
204 |
-
'companyId'
|
205 |
-
'profileId'
|
206 |
));
|
207 |
-
$response
|
208 |
-
'error'
|
209 |
-
'html'
|
210 |
);
|
211 |
|
212 |
try {
|
213 |
-
$lists
|
214 |
$response['html'] = $this->render_list_field( $lists, $settings );
|
215 |
} catch ( Exception $e ) {
|
216 |
-
$errors
|
217 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact Pro. %s', 'fl-builder' ), $errors[0] );
|
218 |
}
|
219 |
|
@@ -241,13 +237,13 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
241 |
}
|
242 |
|
243 |
FLBuilder::render_settings_field( 'list_id', array(
|
244 |
-
'row_class'
|
245 |
-
'class'
|
246 |
-
'type'
|
247 |
-
'label'
|
248 |
-
'options'
|
249 |
-
'preview'
|
250 |
-
'type'
|
251 |
),
|
252 |
), $settings);
|
253 |
|
@@ -275,22 +271,22 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
275 |
$response['error'] = __( 'There was an error subscribing to iContact. The account is no longer connected.', 'fl-builder' );
|
276 |
} else {
|
277 |
|
278 |
-
$data
|
279 |
'email' => $email,
|
280 |
);
|
281 |
-
$api
|
282 |
-
'apiUsername'
|
283 |
-
'appId'
|
284 |
-
'apiPassword'
|
285 |
-
'companyId'
|
286 |
-
'profileId'
|
287 |
));
|
288 |
|
289 |
try {
|
290 |
|
291 |
if ( $name ) {
|
292 |
|
293 |
-
$names
|
294 |
$data['first_name'] = null;
|
295 |
$data['last_name'] = null;
|
296 |
|
@@ -308,7 +304,7 @@ final class FLBuilderServiceIContactPro extends FLBuilderService {
|
|
308 |
|
309 |
$api->subscribeContactToList( $result->contactId, $settings->list_id ); // @codingStandardsIgnoreLine
|
310 |
} catch ( Exception $e ) {
|
311 |
-
$errors
|
312 |
$response['error'] = sprintf( __( 'There was an error subscribing to iContact Pro. %s', 'fl-builder' ), $errors[0] );
|
313 |
}
|
314 |
}
|
68 |
*/
|
69 |
public function connect( $fields = array() ) {
|
70 |
$response = array(
|
71 |
+
'error' => false,
|
72 |
+
'data' => array(),
|
73 |
);
|
74 |
|
75 |
// Make sure we have a username.
|
77 |
$response['error'] = __( 'Error: You must provide a username.', 'fl-builder' );
|
78 |
} elseif ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
79 |
$response['error'] = __( 'Error: You must provide an app ID.', 'fl-builder' );
|
80 |
+
} elseif ( ! isset( $fields['app_password'] ) || empty( $fields['app_password'] ) ) { // Make sure we have an app password.
|
|
|
81 |
$response['error'] = __( 'Error: You must provide an app password.', 'fl-builder' );
|
82 |
+
} elseif ( ! isset( $fields['company_id'] ) || empty( $fields['company_id'] ) ) { // Make sure we have a company ID
|
|
|
83 |
$response['error'] = __( 'Error: You must provide a company ID.', 'fl-builder' );
|
84 |
+
} elseif ( ! isset( $fields['profile_id'] ) || empty( $fields['profile_id'] ) ) { // Make sure we have a profile ID
|
|
|
85 |
$response['error'] = __( 'Error: You must provide a profile ID.', 'fl-builder' );
|
86 |
+
} else { // Try to connect and store the connection data.
|
|
|
87 |
|
88 |
$api = $this->get_api( array(
|
89 |
'apiUsername' => $fields['username'],
|
96 |
try {
|
97 |
$api->getLists();
|
98 |
$response['data'] = array(
|
99 |
+
'username' => $fields['username'],
|
100 |
+
'app_id' => $fields['app_id'],
|
101 |
+
'app_password' => $fields['app_password'],
|
102 |
+
'company_id' => $fields['company_id'],
|
103 |
+
'profile_id' => $fields['profile_id'],
|
104 |
);
|
105 |
} catch ( Exception $e ) {
|
106 |
+
$errors = $api->getErrors();
|
107 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact Pro. %s', 'fl-builder' ), $errors[0] );
|
108 |
}
|
109 |
}
|
121 |
ob_start();
|
122 |
|
123 |
FLBuilder::render_settings_field( 'username', array(
|
124 |
+
'row_class' => 'fl-builder-service-connect-row',
|
125 |
+
'class' => 'fl-builder-service-connect-input',
|
126 |
+
'type' => 'text',
|
127 |
+
'label' => __( 'Username', 'fl-builder' ),
|
128 |
+
'help' => __( 'Your iContact Pro username.', 'fl-builder' ),
|
129 |
+
'preview' => array(
|
130 |
+
'type' => 'none',
|
131 |
),
|
132 |
));
|
133 |
|
134 |
FLBuilder::render_settings_field( 'app_id', array(
|
135 |
+
'row_class' => 'fl-builder-service-connect-row',
|
136 |
+
'class' => 'fl-builder-service-connect-input',
|
137 |
+
'type' => 'text',
|
138 |
+
'label' => __( 'App ID', 'fl-builder' ),
|
139 |
+
'help' => __( 'Your iContact Pro app ID.', 'fl-builder' ),
|
140 |
+
'preview' => array(
|
141 |
+
'type' => 'none',
|
142 |
),
|
143 |
));
|
144 |
|
145 |
FLBuilder::render_settings_field( 'app_password', array(
|
146 |
+
'row_class' => 'fl-builder-service-connect-row',
|
147 |
+
'class' => 'fl-builder-service-connect-input',
|
148 |
+
'type' => 'text',
|
149 |
+
'label' => __( 'App Password', 'fl-builder' ),
|
150 |
+
'help' => __( 'Your iContact Pro app password.', 'fl-builder' ),
|
151 |
+
'description' => sprintf( __( 'You must <a%1$s>create an app</a> in iContact Pro to obtain an app ID and password. Please see <a%2$s>the iContact docs</a> for complete instructions.', 'fl-builder' ), ' href="https://app.icontactpro.com/MKT/Settings/Api?returnUrl=/MKT/Settings" target="_blank"', ' href="http://www.icontact.com/developerportal/api-documentation/vocus-register-your-app/" target="_blank"' ),
|
152 |
+
'preview' => array(
|
153 |
+
'type' => 'none',
|
154 |
),
|
155 |
));
|
156 |
|
157 |
FLBuilder::render_settings_field( 'company_id', array(
|
158 |
+
'row_class' => 'fl-builder-service-connect-row',
|
159 |
+
'class' => 'fl-builder-service-connect-input',
|
160 |
+
'type' => 'text',
|
161 |
+
'label' => __( 'Company ID', 'fl-builder' ),
|
162 |
+
'help' => __( 'Your iContact Pro Company ID.', 'fl-builder' ),
|
163 |
+
'preview' => array(
|
164 |
+
'type' => 'none',
|
165 |
),
|
166 |
));
|
167 |
|
168 |
FLBuilder::render_settings_field( 'profile_id', array(
|
169 |
+
'row_class' => 'fl-builder-service-connect-row',
|
170 |
+
'class' => 'fl-builder-service-connect-input',
|
171 |
+
'type' => 'text',
|
172 |
+
'label' => __( 'Profile ID', 'fl-builder' ),
|
173 |
+
'help' => __( 'Your iContact Pro Profile ID.', 'fl-builder' ),
|
174 |
+
'description' => sprintf( __( 'Your Company and Profile ID can also be found in the <a%1$s>iContact Pro API settings</a> under Account Information.', 'fl-builder' ), ' href="https://app.icontactpro.com/MKT/Settings/Api?returnUrl=/MKT/Settings" target="_blank"' ),
|
175 |
+
'preview' => array(
|
176 |
+
'type' => 'none',
|
177 |
),
|
178 |
));
|
179 |
|
192 |
* }
|
193 |
*/
|
194 |
public function render_fields( $account, $settings ) {
|
195 |
+
$account_data = $this->get_account_data( $account );
|
196 |
+
$api = $this->get_api( array(
|
197 |
+
'apiUsername' => $account_data['username'],
|
198 |
+
'appId' => $account_data['app_id'],
|
199 |
+
'apiPassword' => $account_data['app_password'],
|
200 |
+
'companyId' => $account_data['company_id'],
|
201 |
+
'profileId' => $account_data['profile_id'],
|
202 |
));
|
203 |
+
$response = array(
|
204 |
+
'error' => false,
|
205 |
+
'html' => '',
|
206 |
);
|
207 |
|
208 |
try {
|
209 |
+
$lists = $api->getLists();
|
210 |
$response['html'] = $this->render_list_field( $lists, $settings );
|
211 |
} catch ( Exception $e ) {
|
212 |
+
$errors = $api->getErrors();
|
213 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact Pro. %s', 'fl-builder' ), $errors[0] );
|
214 |
}
|
215 |
|
237 |
}
|
238 |
|
239 |
FLBuilder::render_settings_field( 'list_id', array(
|
240 |
+
'row_class' => 'fl-builder-service-field-row',
|
241 |
+
'class' => 'fl-builder-service-list-select',
|
242 |
+
'type' => 'select',
|
243 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
244 |
+
'options' => $options,
|
245 |
+
'preview' => array(
|
246 |
+
'type' => 'none',
|
247 |
),
|
248 |
), $settings);
|
249 |
|
271 |
$response['error'] = __( 'There was an error subscribing to iContact. The account is no longer connected.', 'fl-builder' );
|
272 |
} else {
|
273 |
|
274 |
+
$data = array(
|
275 |
'email' => $email,
|
276 |
);
|
277 |
+
$api = $this->get_api( array(
|
278 |
+
'apiUsername' => $account_data['username'],
|
279 |
+
'appId' => $account_data['app_id'],
|
280 |
+
'apiPassword' => $account_data['app_password'],
|
281 |
+
'companyId' => $account_data['company_id'],
|
282 |
+
'profileId' => $account_data['profile_id'],
|
283 |
));
|
284 |
|
285 |
try {
|
286 |
|
287 |
if ( $name ) {
|
288 |
|
289 |
+
$names = explode( ' ', $name );
|
290 |
$data['first_name'] = null;
|
291 |
$data['last_name'] = null;
|
292 |
|
304 |
|
305 |
$api->subscribeContactToList( $result->contactId, $settings->list_id ); // @codingStandardsIgnoreLine
|
306 |
} catch ( Exception $e ) {
|
307 |
+
$errors = $api->getErrors();
|
308 |
$response['error'] = sprintf( __( 'There was an error subscribing to iContact Pro. %s', 'fl-builder' ), $errors[0] );
|
309 |
}
|
310 |
}
|
classes/class-fl-builder-service-icontact.php
CHANGED
@@ -64,8 +64,8 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
64 |
*/
|
65 |
public function connect( $fields = array() ) {
|
66 |
$response = array(
|
67 |
-
'error'
|
68 |
-
'data'
|
69 |
);
|
70 |
|
71 |
// Make sure we have a username.
|
@@ -73,11 +73,9 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
73 |
$response['error'] = __( 'Error: You must provide a username.', 'fl-builder' );
|
74 |
} elseif ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
75 |
$response['error'] = __( 'Error: You must provide a app ID.', 'fl-builder' );
|
76 |
-
} // Make sure we have an app password.
|
77 |
-
elseif ( ! isset( $fields['app_password'] ) || empty( $fields['app_password'] ) ) {
|
78 |
$response['error'] = __( 'Error: You must provide a app password.', 'fl-builder' );
|
79 |
-
} // Try to connect and store the connection data.
|
80 |
-
else {
|
81 |
|
82 |
$api = $this->get_api( array(
|
83 |
'apiUsername' => $fields['username'],
|
@@ -88,12 +86,12 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
88 |
try {
|
89 |
$api->getLists();
|
90 |
$response['data'] = array(
|
91 |
-
'username'
|
92 |
-
'app_id'
|
93 |
-
'app_password'
|
94 |
);
|
95 |
} catch ( Exception $e ) {
|
96 |
-
$errors
|
97 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact. %s', 'fl-builder' ), $errors[0] );
|
98 |
}
|
99 |
}
|
@@ -111,36 +109,36 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
111 |
ob_start();
|
112 |
|
113 |
FLBuilder::render_settings_field( 'username', array(
|
114 |
-
'row_class'
|
115 |
-
'class'
|
116 |
-
'type'
|
117 |
-
'label'
|
118 |
-
'help'
|
119 |
-
'preview'
|
120 |
-
'type'
|
121 |
),
|
122 |
));
|
123 |
|
124 |
FLBuilder::render_settings_field( 'app_id', array(
|
125 |
-
'row_class'
|
126 |
-
'class'
|
127 |
-
'type'
|
128 |
-
'label'
|
129 |
-
'help'
|
130 |
-
'preview'
|
131 |
-
'type'
|
132 |
),
|
133 |
));
|
134 |
|
135 |
FLBuilder::render_settings_field( 'app_password', array(
|
136 |
-
'row_class'
|
137 |
-
'class'
|
138 |
-
'type'
|
139 |
-
'label'
|
140 |
-
'help'
|
141 |
-
'description'
|
142 |
-
'preview'
|
143 |
-
'type'
|
144 |
),
|
145 |
));
|
146 |
|
@@ -159,22 +157,22 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
159 |
* }
|
160 |
*/
|
161 |
public function render_fields( $account, $settings ) {
|
162 |
-
$account_data
|
163 |
-
$api
|
164 |
-
'apiUsername'
|
165 |
-
'appId'
|
166 |
-
'apiPassword'
|
167 |
));
|
168 |
-
$response
|
169 |
-
'error'
|
170 |
-
'html'
|
171 |
);
|
172 |
|
173 |
try {
|
174 |
-
$lists
|
175 |
$response['html'] = $this->render_list_field( $lists, $settings );
|
176 |
} catch ( Exception $e ) {
|
177 |
-
$errors
|
178 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact. %s', 'fl-builder' ), $errors[0] );
|
179 |
}
|
180 |
|
@@ -203,13 +201,13 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
203 |
}
|
204 |
|
205 |
FLBuilder::render_settings_field( 'list_id', array(
|
206 |
-
'row_class'
|
207 |
-
'class'
|
208 |
-
'type'
|
209 |
-
'label'
|
210 |
-
'options'
|
211 |
-
'preview'
|
212 |
-
'type'
|
213 |
),
|
214 |
), $settings);
|
215 |
|
@@ -237,20 +235,20 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
237 |
$response['error'] = __( 'There was an error subscribing to iContact. The account is no longer connected.', 'fl-builder' );
|
238 |
} else {
|
239 |
|
240 |
-
$data
|
241 |
'email' => $email,
|
242 |
);
|
243 |
-
$api
|
244 |
-
'apiUsername'
|
245 |
-
'appId'
|
246 |
-
'apiPassword'
|
247 |
));
|
248 |
|
249 |
try {
|
250 |
|
251 |
if ( $name ) {
|
252 |
|
253 |
-
$names
|
254 |
$data['first_name'] = null;
|
255 |
$data['last_name'] = null;
|
256 |
|
@@ -269,7 +267,7 @@ final class FLBuilderServiceIContact extends FLBuilderService {
|
|
269 |
// @codingStandardsIgnoreLine
|
270 |
$api->subscribeContactToList( $result->contactId, $settings->list_id );
|
271 |
} catch ( Exception $e ) {
|
272 |
-
$errors
|
273 |
$response['error'] = sprintf( __( 'There was an error subscribing to iContact. %s', 'fl-builder' ), $errors[0] );
|
274 |
}
|
275 |
}
|
64 |
*/
|
65 |
public function connect( $fields = array() ) {
|
66 |
$response = array(
|
67 |
+
'error' => false,
|
68 |
+
'data' => array(),
|
69 |
);
|
70 |
|
71 |
// Make sure we have a username.
|
73 |
$response['error'] = __( 'Error: You must provide a username.', 'fl-builder' );
|
74 |
} elseif ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
75 |
$response['error'] = __( 'Error: You must provide a app ID.', 'fl-builder' );
|
76 |
+
} elseif ( ! isset( $fields['app_password'] ) || empty( $fields['app_password'] ) ) { // Make sure we have an app password.
|
|
|
77 |
$response['error'] = __( 'Error: You must provide a app password.', 'fl-builder' );
|
78 |
+
} else { // Try to connect and store the connection data.
|
|
|
79 |
|
80 |
$api = $this->get_api( array(
|
81 |
'apiUsername' => $fields['username'],
|
86 |
try {
|
87 |
$api->getLists();
|
88 |
$response['data'] = array(
|
89 |
+
'username' => $fields['username'],
|
90 |
+
'app_id' => $fields['app_id'],
|
91 |
+
'app_password' => $fields['app_password'],
|
92 |
);
|
93 |
} catch ( Exception $e ) {
|
94 |
+
$errors = $api->getErrors();
|
95 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact. %s', 'fl-builder' ), $errors[0] );
|
96 |
}
|
97 |
}
|
109 |
ob_start();
|
110 |
|
111 |
FLBuilder::render_settings_field( 'username', array(
|
112 |
+
'row_class' => 'fl-builder-service-connect-row',
|
113 |
+
'class' => 'fl-builder-service-connect-input',
|
114 |
+
'type' => 'text',
|
115 |
+
'label' => __( 'Username', 'fl-builder' ),
|
116 |
+
'help' => __( 'Your iContact username.', 'fl-builder' ),
|
117 |
+
'preview' => array(
|
118 |
+
'type' => 'none',
|
119 |
),
|
120 |
));
|
121 |
|
122 |
FLBuilder::render_settings_field( 'app_id', array(
|
123 |
+
'row_class' => 'fl-builder-service-connect-row',
|
124 |
+
'class' => 'fl-builder-service-connect-input',
|
125 |
+
'type' => 'text',
|
126 |
+
'label' => __( 'App ID', 'fl-builder' ),
|
127 |
+
'help' => __( 'Your iContact app ID.', 'fl-builder' ),
|
128 |
+
'preview' => array(
|
129 |
+
'type' => 'none',
|
130 |
),
|
131 |
));
|
132 |
|
133 |
FLBuilder::render_settings_field( 'app_password', array(
|
134 |
+
'row_class' => 'fl-builder-service-connect-row',
|
135 |
+
'class' => 'fl-builder-service-connect-input',
|
136 |
+
'type' => 'text',
|
137 |
+
'label' => __( 'App Password', 'fl-builder' ),
|
138 |
+
'help' => __( 'Your iContact app password.', 'fl-builder' ),
|
139 |
+
'description' => sprintf( __( 'You must <a%1$s>create an app</a> in iContact to obtain an app ID and password. Please see <a%2$s>the iContact docs</a> for complete instructions.', 'fl-builder' ), ' href="https://app.icontact.com/icp/core/registerapp/" target="_blank"', ' href="http://www.icontact.com/developerportal/api-documentation/vocus-register-your-app/" target="_blank"' ),
|
140 |
+
'preview' => array(
|
141 |
+
'type' => 'none',
|
142 |
),
|
143 |
));
|
144 |
|
157 |
* }
|
158 |
*/
|
159 |
public function render_fields( $account, $settings ) {
|
160 |
+
$account_data = $this->get_account_data( $account );
|
161 |
+
$api = $this->get_api( array(
|
162 |
+
'apiUsername' => $account_data['username'],
|
163 |
+
'appId' => $account_data['app_id'],
|
164 |
+
'apiPassword' => $account_data['app_password'],
|
165 |
));
|
166 |
+
$response = array(
|
167 |
+
'error' => false,
|
168 |
+
'html' => '',
|
169 |
);
|
170 |
|
171 |
try {
|
172 |
+
$lists = $api->getLists();
|
173 |
$response['html'] = $this->render_list_field( $lists, $settings );
|
174 |
} catch ( Exception $e ) {
|
175 |
+
$errors = $api->getErrors();
|
176 |
$response['error'] = sprintf( __( 'Error: Could not connect to iContact. %s', 'fl-builder' ), $errors[0] );
|
177 |
}
|
178 |
|
201 |
}
|
202 |
|
203 |
FLBuilder::render_settings_field( 'list_id', array(
|
204 |
+
'row_class' => 'fl-builder-service-field-row',
|
205 |
+
'class' => 'fl-builder-service-list-select',
|
206 |
+
'type' => 'select',
|
207 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
208 |
+
'options' => $options,
|
209 |
+
'preview' => array(
|
210 |
+
'type' => 'none',
|
211 |
),
|
212 |
), $settings);
|
213 |
|
235 |
$response['error'] = __( 'There was an error subscribing to iContact. The account is no longer connected.', 'fl-builder' );
|
236 |
} else {
|
237 |
|
238 |
+
$data = array(
|
239 |
'email' => $email,
|
240 |
);
|
241 |
+
$api = $this->get_api( array(
|
242 |
+
'apiUsername' => $account_data['username'],
|
243 |
+
'appId' => $account_data['app_id'],
|
244 |
+
'apiPassword' => $account_data['app_password'],
|
245 |
));
|
246 |
|
247 |
try {
|
248 |
|
249 |
if ( $name ) {
|
250 |
|
251 |
+
$names = explode( ' ', $name );
|
252 |
$data['first_name'] = null;
|
253 |
$data['last_name'] = null;
|
254 |
|
267 |
// @codingStandardsIgnoreLine
|
268 |
$api->subscribeContactToList( $result->contactId, $settings->list_id );
|
269 |
} catch ( Exception $e ) {
|
270 |
+
$errors = $api->getErrors();
|
271 |
$response['error'] = sprintf( __( 'There was an error subscribing to iContact. %s', 'fl-builder' ), $errors[0] );
|
272 |
}
|
273 |
}
|
classes/class-fl-builder-service-infusionsoft.php
CHANGED
@@ -42,7 +42,7 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
42 |
$this->api_instance = new iSDK();
|
43 |
$this->api_instance->cfgCon( $app_id, $api_key, 'throw' );
|
44 |
} catch ( iSDKException $e ) {
|
45 |
-
$this->api_instance
|
46 |
$this->api_instance->error = sprintf(
|
47 |
__( 'There was an error connecting to Infusionsoft. %s', 'fl-builder' ),
|
48 |
$e->getMessage()
|
@@ -57,18 +57,18 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
57 |
*
|
58 |
* @since 1.5.7
|
59 |
* @param array $fields {
|
60 |
-
*
|
61 |
-
*
|
62 |
* }
|
63 |
* @return array{
|
64 |
-
*
|
65 |
-
*
|
66 |
* }
|
67 |
*/
|
68 |
public function connect( $fields = array() ) {
|
69 |
$response = array(
|
70 |
-
'error'
|
71 |
-
'data'
|
72 |
);
|
73 |
|
74 |
// Make sure we have an API key.
|
@@ -76,8 +76,7 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
76 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
77 |
} elseif ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
78 |
$response['error'] = __( 'Error: You must provide an app ID.', 'fl-builder' );
|
79 |
-
} // Try to connect and store the connection data.
|
80 |
-
else {
|
81 |
|
82 |
$api = $this->get_api( $fields['app_id'], $fields['api_key'] );
|
83 |
|
@@ -104,24 +103,24 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
104 |
ob_start();
|
105 |
|
106 |
FLBuilder::render_settings_field( 'app_id', array(
|
107 |
-
'row_class'
|
108 |
-
'class'
|
109 |
-
'type'
|
110 |
-
'label'
|
111 |
-
'help'
|
112 |
-
'preview'
|
113 |
-
'type'
|
114 |
),
|
115 |
));
|
116 |
|
117 |
FLBuilder::render_settings_field( 'api_key', array(
|
118 |
-
'row_class'
|
119 |
-
'class'
|
120 |
-
'type'
|
121 |
-
'label'
|
122 |
-
'help'
|
123 |
-
'preview'
|
124 |
-
'type'
|
125 |
),
|
126 |
));
|
127 |
|
@@ -135,18 +134,18 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
135 |
* @param string $account The name of the saved account.
|
136 |
* @param object $settings Saved module settings.
|
137 |
* @return array {
|
138 |
-
*
|
139 |
-
*
|
140 |
* }
|
141 |
*/
|
142 |
public function render_fields( $account, $settings ) {
|
143 |
-
$account_data
|
144 |
-
$api
|
145 |
-
$page
|
146 |
-
$lists
|
147 |
-
$response
|
148 |
-
'error'
|
149 |
-
'html'
|
150 |
);
|
151 |
|
152 |
if ( isset( $api->error ) ) {
|
@@ -201,13 +200,13 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
201 |
}
|
202 |
|
203 |
FLBuilder::render_settings_field( 'list_id', array(
|
204 |
-
'row_class'
|
205 |
-
'class'
|
206 |
-
'type'
|
207 |
-
'label'
|
208 |
-
'options'
|
209 |
-
'preview'
|
210 |
-
'type'
|
211 |
),
|
212 |
), $settings);
|
213 |
|
@@ -222,15 +221,15 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
222 |
* @param string $email The email to subscribe.
|
223 |
* @param string $name Optional. The full name of the person subscribing.
|
224 |
* @return array {
|
225 |
-
*
|
226 |
* }
|
227 |
*/
|
228 |
public function subscribe( $settings, $email, $name = false ) {
|
229 |
$account_data = $this->get_account_data( $settings->service_account );
|
230 |
-
$response
|
231 |
'error' => false,
|
232 |
);
|
233 |
-
$data
|
234 |
|
235 |
if ( ! $account_data ) {
|
236 |
$response['error'] = __( 'There was an error subscribing to Infusionsoft. The account is no longer connected.', 'fl-builder' );
|
@@ -249,13 +248,13 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
249 |
if ( isset( $names[0] ) && isset( $names[1] ) ) {
|
250 |
$data = array(
|
251 |
'FirstName' => $names[0],
|
252 |
-
'LastName'
|
253 |
-
'Email'
|
254 |
);
|
255 |
} else {
|
256 |
$data = array(
|
257 |
'FirstName' => $name,
|
258 |
-
'Email'
|
259 |
);
|
260 |
}
|
261 |
} else {
|
@@ -274,7 +273,7 @@ final class FLBuilderServiceInfusionsoft extends FLBuilderService {
|
|
274 |
$group = $api->grpAssign( $contact[0]['Id'], $settings->list_id );
|
275 |
} else {
|
276 |
$contact_id = $api->addCon( $data );
|
277 |
-
$group_add
|
278 |
}
|
279 |
} catch ( iSDKException $e ) {
|
280 |
$response['error'] = sprintf(
|
42 |
$this->api_instance = new iSDK();
|
43 |
$this->api_instance->cfgCon( $app_id, $api_key, 'throw' );
|
44 |
} catch ( iSDKException $e ) {
|
45 |
+
$this->api_instance = new stdClass();
|
46 |
$this->api_instance->error = sprintf(
|
47 |
__( 'There was an error connecting to Infusionsoft. %s', 'fl-builder' ),
|
48 |
$e->getMessage()
|
57 |
*
|
58 |
* @since 1.5.7
|
59 |
* @param array $fields {
|
60 |
+
* @type string $app_id A valid app ID.
|
61 |
+
* @type string $api_key A valid API key.
|
62 |
* }
|
63 |
* @return array{
|
64 |
+
* @type bool|string $error The error message or false if no error.
|
65 |
+
* @type array $data An array of data used to make the connection.
|
66 |
* }
|
67 |
*/
|
68 |
public function connect( $fields = array() ) {
|
69 |
$response = array(
|
70 |
+
'error' => false,
|
71 |
+
'data' => array(),
|
72 |
);
|
73 |
|
74 |
// Make sure we have an API key.
|
76 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
77 |
} elseif ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
78 |
$response['error'] = __( 'Error: You must provide an app ID.', 'fl-builder' );
|
79 |
+
} else { // Try to connect and store the connection data.
|
|
|
80 |
|
81 |
$api = $this->get_api( $fields['app_id'], $fields['api_key'] );
|
82 |
|
103 |
ob_start();
|
104 |
|
105 |
FLBuilder::render_settings_field( 'app_id', array(
|
106 |
+
'row_class' => 'fl-builder-service-connect-row',
|
107 |
+
'class' => 'fl-builder-service-connect-input',
|
108 |
+
'type' => 'text',
|
109 |
+
'label' => __( 'App ID', 'fl-builder' ),
|
110 |
+
'help' => __( 'Your App ID can be found in the URL for your account. For example, if the URL for your account is myaccount.infusionsoft.com, your App ID would be <strong>myaccount</strong>.', 'fl-builder' ),
|
111 |
+
'preview' => array(
|
112 |
+
'type' => 'none',
|
113 |
),
|
114 |
));
|
115 |
|
116 |
FLBuilder::render_settings_field( 'api_key', array(
|
117 |
+
'row_class' => 'fl-builder-service-connect-row',
|
118 |
+
'class' => 'fl-builder-service-connect-input',
|
119 |
+
'type' => 'text',
|
120 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
121 |
+
'help' => __( 'Your API key can be found in your Infusionsoft account under Admin > Settings > Application > API > Encrypted Key.', 'fl-builder' ),
|
122 |
+
'preview' => array(
|
123 |
+
'type' => 'none',
|
124 |
),
|
125 |
));
|
126 |
|
134 |
* @param string $account The name of the saved account.
|
135 |
* @param object $settings Saved module settings.
|
136 |
* @return array {
|
137 |
+
* @type bool|string $error The error message or false if no error.
|
138 |
+
* @type string $html The field markup.
|
139 |
* }
|
140 |
*/
|
141 |
public function render_fields( $account, $settings ) {
|
142 |
+
$account_data = $this->get_account_data( $account );
|
143 |
+
$api = $this->get_api( $account_data['app_id'], $account_data['api_key'] );
|
144 |
+
$page = 0;
|
145 |
+
$lists = array();
|
146 |
+
$response = array(
|
147 |
+
'error' => false,
|
148 |
+
'html' => '',
|
149 |
);
|
150 |
|
151 |
if ( isset( $api->error ) ) {
|
200 |
}
|
201 |
|
202 |
FLBuilder::render_settings_field( 'list_id', array(
|
203 |
+
'row_class' => 'fl-builder-service-field-row',
|
204 |
+
'class' => 'fl-builder-service-list-select',
|
205 |
+
'type' => 'select',
|
206 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
207 |
+
'options' => $options,
|
208 |
+
'preview' => array(
|
209 |
+
'type' => 'none',
|
210 |
),
|
211 |
), $settings);
|
212 |
|
221 |
* @param string $email The email to subscribe.
|
222 |
* @param string $name Optional. The full name of the person subscribing.
|
223 |
* @return array {
|
224 |
+
* @type bool|string $error The error message or false if no error.
|
225 |
* }
|
226 |
*/
|
227 |
public function subscribe( $settings, $email, $name = false ) {
|
228 |
$account_data = $this->get_account_data( $settings->service_account );
|
229 |
+
$response = array(
|
230 |
'error' => false,
|
231 |
);
|
232 |
+
$data = array();
|
233 |
|
234 |
if ( ! $account_data ) {
|
235 |
$response['error'] = __( 'There was an error subscribing to Infusionsoft. The account is no longer connected.', 'fl-builder' );
|
248 |
if ( isset( $names[0] ) && isset( $names[1] ) ) {
|
249 |
$data = array(
|
250 |
'FirstName' => $names[0],
|
251 |
+
'LastName' => $names[1],
|
252 |
+
'Email' => $email,
|
253 |
);
|
254 |
} else {
|
255 |
$data = array(
|
256 |
'FirstName' => $name,
|
257 |
+
'Email' => $email,
|
258 |
);
|
259 |
}
|
260 |
} else {
|
273 |
$group = $api->grpAssign( $contact[0]['Id'], $settings->list_id );
|
274 |
} else {
|
275 |
$contact_id = $api->addCon( $data );
|
276 |
+
$group_add = $api->grpAssign( $contact_id, $settings->list_id );
|
277 |
}
|
278 |
} catch ( iSDKException $e ) {
|
279 |
$response['error'] = sprintf(
|
classes/class-fl-builder-service-madmimi.php
CHANGED
@@ -58,8 +58,8 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
-
'error'
|
62 |
-
'data'
|
63 |
);
|
64 |
|
65 |
// Make sure we have an email address.
|
@@ -67,8 +67,7 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
67 |
$response['error'] = __( 'Error: You must provide an email address.', 'fl-builder' );
|
68 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
69 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
70 |
-
} // Try to connect and store the connection data.
|
71 |
-
else {
|
72 |
|
73 |
$api = $this->get_api( $fields['api_email'], $fields['api_key'] );
|
74 |
|
@@ -79,7 +78,7 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
79 |
} else {
|
80 |
$response['data'] = array(
|
81 |
'api_email' => $fields['api_email'],
|
82 |
-
'api_key'
|
83 |
);
|
84 |
}
|
85 |
}
|
@@ -97,24 +96,24 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
97 |
ob_start();
|
98 |
|
99 |
FLBuilder::render_settings_field( 'api_email', array(
|
100 |
-
'row_class'
|
101 |
-
'class'
|
102 |
-
'type'
|
103 |
-
'label'
|
104 |
-
'help'
|
105 |
-
'preview'
|
106 |
-
'type'
|
107 |
),
|
108 |
));
|
109 |
|
110 |
FLBuilder::render_settings_field( 'api_key', array(
|
111 |
-
'row_class'
|
112 |
-
'class'
|
113 |
-
'type'
|
114 |
-
'label'
|
115 |
-
'help'
|
116 |
-
'preview'
|
117 |
-
'type'
|
118 |
),
|
119 |
));
|
120 |
|
@@ -133,11 +132,11 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
133 |
* }
|
134 |
*/
|
135 |
public function render_fields( $account, $settings ) {
|
136 |
-
$account_data
|
137 |
-
$api
|
138 |
-
$response
|
139 |
-
'error'
|
140 |
-
'html'
|
141 |
);
|
142 |
|
143 |
libxml_use_internal_errors( true );
|
@@ -174,13 +173,13 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
174 |
}
|
175 |
|
176 |
FLBuilder::render_settings_field( 'list_id', array(
|
177 |
-
'row_class'
|
178 |
-
'class'
|
179 |
-
'type'
|
180 |
-
'label'
|
181 |
-
'options'
|
182 |
-
'preview'
|
183 |
-
'type'
|
184 |
),
|
185 |
), $settings);
|
186 |
|
@@ -208,10 +207,10 @@ final class FLBuilderServiceMadMimi extends FLBuilderService {
|
|
208 |
$response['error'] = __( 'There was an error subscribing to Mad Mimi. The account is no longer connected.', 'fl-builder' );
|
209 |
} else {
|
210 |
|
211 |
-
$api
|
212 |
-
$data
|
213 |
-
'email'
|
214 |
-
'add_list'
|
215 |
);
|
216 |
|
217 |
if ( $name ) {
|
58 |
*/
|
59 |
public function connect( $fields = array() ) {
|
60 |
$response = array(
|
61 |
+
'error' => false,
|
62 |
+
'data' => array(),
|
63 |
);
|
64 |
|
65 |
// Make sure we have an email address.
|
67 |
$response['error'] = __( 'Error: You must provide an email address.', 'fl-builder' );
|
68 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
69 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
70 |
+
} else { // Try to connect and store the connection data.
|
|
|
71 |
|
72 |
$api = $this->get_api( $fields['api_email'], $fields['api_key'] );
|
73 |
|
78 |
} else {
|
79 |
$response['data'] = array(
|
80 |
'api_email' => $fields['api_email'],
|
81 |
+
'api_key' => $fields['api_key'],
|
82 |
);
|
83 |
}
|
84 |
}
|
96 |
ob_start();
|
97 |
|
98 |
FLBuilder::render_settings_field( 'api_email', array(
|
99 |
+
'row_class' => 'fl-builder-service-connect-row',
|
100 |
+
'class' => 'fl-builder-service-connect-input',
|
101 |
+
'type' => 'text',
|
102 |
+
'label' => __( 'Email Address', 'fl-builder' ),
|
103 |
+
'help' => __( 'The email address associated with your Mad Mimi account.', 'fl-builder' ),
|
104 |
+
'preview' => array(
|
105 |
+
'type' => 'none',
|
106 |
),
|
107 |
));
|
108 |
|
109 |
FLBuilder::render_settings_field( 'api_key', array(
|
110 |
+
'row_class' => 'fl-builder-service-connect-row',
|
111 |
+
'class' => 'fl-builder-service-connect-input',
|
112 |
+
'type' => 'text',
|
113 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
114 |
+
'help' => __( 'Your API key can be found in your Mad Mimi account under Account > Settings & Billing > API.', 'fl-builder' ),
|
115 |
+
'preview' => array(
|
116 |
+
'type' => 'none',
|
117 |
),
|
118 |
));
|
119 |
|
132 |
* }
|
133 |
*/
|
134 |
public function render_fields( $account, $settings ) {
|
135 |
+
$account_data = $this->get_account_data( $account );
|
136 |
+
$api = $this->get_api( $account_data['api_email'], $account_data['api_key'] );
|
137 |
+
$response = array(
|
138 |
+
'error' => false,
|
139 |
+
'html' => '',
|
140 |
);
|
141 |
|
142 |
libxml_use_internal_errors( true );
|
173 |
}
|
174 |
|
175 |
FLBuilder::render_settings_field( 'list_id', array(
|
176 |
+
'row_class' => 'fl-builder-service-field-row',
|
177 |
+
'class' => 'fl-builder-service-list-select',
|
178 |
+
'type' => 'select',
|
179 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
180 |
+
'options' => $options,
|
181 |
+
'preview' => array(
|
182 |
+
'type' => 'none',
|
183 |
),
|
184 |
), $settings);
|
185 |
|
207 |
$response['error'] = __( 'There was an error subscribing to Mad Mimi. The account is no longer connected.', 'fl-builder' );
|
208 |
} else {
|
209 |
|
210 |
+
$api = $this->get_api( $account_data['api_email'], $account_data['api_key'] );
|
211 |
+
$data = array(
|
212 |
+
'email' => $email,
|
213 |
+
'add_list' => $settings->list_id,
|
214 |
);
|
215 |
|
216 |
if ( $name ) {
|
classes/class-fl-builder-service-mailchimp.php
CHANGED
@@ -56,8 +56,8 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
-
'error'
|
60 |
-
'data'
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API key.
|
@@ -94,13 +94,13 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
94 |
ob_start();
|
95 |
|
96 |
FLBuilder::render_settings_field( 'api_key', array(
|
97 |
-
'row_class'
|
98 |
-
'class'
|
99 |
-
'type'
|
100 |
-
'label'
|
101 |
-
'help'
|
102 |
-
'preview'
|
103 |
-
'type'
|
104 |
),
|
105 |
));
|
106 |
|
@@ -119,11 +119,11 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
119 |
* }
|
120 |
*/
|
121 |
public function render_fields( $account, $settings ) {
|
122 |
-
$post_data
|
123 |
-
$account_data
|
124 |
-
$response
|
125 |
-
'error'
|
126 |
-
'html'
|
127 |
);
|
128 |
|
129 |
// Lists field
|
@@ -131,7 +131,7 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
131 |
$api = $this->get_api( $account_data['api_key'] );
|
132 |
|
133 |
if ( ! isset( $post_data['list_id'] ) ) {
|
134 |
-
$lists
|
135 |
$response['html'] .= $this->render_list_field( $lists, $settings );
|
136 |
}
|
137 |
} catch ( Exception $e ) {
|
@@ -149,10 +149,11 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
149 |
$list_id = $settings->list_id;
|
150 |
}
|
151 |
|
152 |
-
$groups
|
153 |
$response['html'] .= $this->render_groups_field( $list_id, $groups, $settings );
|
154 |
}
|
155 |
-
} catch ( Exception $e ) {
|
|
|
156 |
|
157 |
return $response;
|
158 |
}
|
@@ -180,13 +181,13 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
180 |
}
|
181 |
|
182 |
FLBuilder::render_settings_field( 'list_id', array(
|
183 |
-
'row_class'
|
184 |
-
'class'
|
185 |
-
'type'
|
186 |
-
'label'
|
187 |
-
'options'
|
188 |
-
'preview'
|
189 |
-
'type'
|
190 |
),
|
191 |
), $settings);
|
192 |
|
@@ -221,14 +222,14 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
221 |
}
|
222 |
|
223 |
FLBuilder::render_settings_field( 'groups', array(
|
224 |
-
'row_class'
|
225 |
-
'class'
|
226 |
-
'type'
|
227 |
-
'label'
|
228 |
-
'multi-select'
|
229 |
-
'options'
|
230 |
-
'preview'
|
231 |
-
'type'
|
232 |
),
|
233 |
), $settings);
|
234 |
|
@@ -257,7 +258,7 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
257 |
} else {
|
258 |
|
259 |
try {
|
260 |
-
$api
|
261 |
/**
|
262 |
* Use this filter to enable double opt-ins for MailChimp integrations.
|
263 |
* Returning true enables double opt-ins; returning false enables single opt-ins.
|
@@ -265,8 +266,8 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
265 |
* @see fl_builder_mailchimp_double_option
|
266 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
267 |
*/
|
268 |
-
$double
|
269 |
-
$data
|
270 |
'email' => $email,
|
271 |
'double_optin' => (bool) $double,
|
272 |
);
|
@@ -308,7 +309,7 @@ final class FLBuilderServiceMailChimp extends FLBuilderService {
|
|
308 |
// Get the subgroup names from the API and add to the $data array.
|
309 |
if ( count( $groups ) > 0 ) {
|
310 |
|
311 |
-
$subgroup_ids
|
312 |
$groups_result = $api->interestGroupings( $settings->list_id );
|
313 |
|
314 |
if ( is_array( $groups_result ) && count( $groups_result ) > 0 ) {
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
+
'error' => false,
|
60 |
+
'data' => array(),
|
61 |
);
|
62 |
|
63 |
// Make sure we have an API key.
|
94 |
ob_start();
|
95 |
|
96 |
FLBuilder::render_settings_field( 'api_key', array(
|
97 |
+
'row_class' => 'fl-builder-service-connect-row',
|
98 |
+
'class' => 'fl-builder-service-connect-input',
|
99 |
+
'type' => 'text',
|
100 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
101 |
+
'help' => __( 'Your API key can be found in your MailChimp account under Account > Extras > API Keys.', 'fl-builder' ),
|
102 |
+
'preview' => array(
|
103 |
+
'type' => 'none',
|
104 |
),
|
105 |
));
|
106 |
|
119 |
* }
|
120 |
*/
|
121 |
public function render_fields( $account, $settings ) {
|
122 |
+
$post_data = FLBuilderModel::get_post_data();
|
123 |
+
$account_data = $this->get_account_data( $account );
|
124 |
+
$response = array(
|
125 |
+
'error' => false,
|
126 |
+
'html' => '',
|
127 |
);
|
128 |
|
129 |
// Lists field
|
131 |
$api = $this->get_api( $account_data['api_key'] );
|
132 |
|
133 |
if ( ! isset( $post_data['list_id'] ) ) {
|
134 |
+
$lists = $api->getLists();
|
135 |
$response['html'] .= $this->render_list_field( $lists, $settings );
|
136 |
}
|
137 |
} catch ( Exception $e ) {
|
149 |
$list_id = $settings->list_id;
|
150 |
}
|
151 |
|
152 |
+
$groups = $api->interestGroupings( $list_id );
|
153 |
$response['html'] .= $this->render_groups_field( $list_id, $groups, $settings );
|
154 |
}
|
155 |
+
} catch ( Exception $e ) {
|
156 |
+
}
|
157 |
|
158 |
return $response;
|
159 |
}
|
181 |
}
|
182 |
|
183 |
FLBuilder::render_settings_field( 'list_id', array(
|
184 |
+
'row_class' => 'fl-builder-service-field-row',
|
185 |
+
'class' => 'fl-builder-service-list-select fl-builder-mailchimp-list-select',
|
186 |
+
'type' => 'select',
|
187 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
188 |
+
'options' => $options,
|
189 |
+
'preview' => array(
|
190 |
+
'type' => 'none',
|
191 |
),
|
192 |
), $settings);
|
193 |
|
222 |
}
|
223 |
|
224 |
FLBuilder::render_settings_field( 'groups', array(
|
225 |
+
'row_class' => 'fl-builder-service-field-row',
|
226 |
+
'class' => 'fl-builder-mailchimp-group-select',
|
227 |
+
'type' => 'select',
|
228 |
+
'label' => _x( 'Groups', 'MailChimp list group.', 'fl-builder' ),
|
229 |
+
'multi-select' => true,
|
230 |
+
'options' => $options,
|
231 |
+
'preview' => array(
|
232 |
+
'type' => 'none',
|
233 |
),
|
234 |
), $settings);
|
235 |
|
258 |
} else {
|
259 |
|
260 |
try {
|
261 |
+
$api = $this->get_api( $account_data['api_key'] );
|
262 |
/**
|
263 |
* Use this filter to enable double opt-ins for MailChimp integrations.
|
264 |
* Returning true enables double opt-ins; returning false enables single opt-ins.
|
266 |
* @see fl_builder_mailchimp_double_option
|
267 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
268 |
*/
|
269 |
+
$double = apply_filters( 'fl_builder_mailchimp_double_option', false );
|
270 |
+
$data = array(
|
271 |
'email' => $email,
|
272 |
'double_optin' => (bool) $double,
|
273 |
);
|
309 |
// Get the subgroup names from the API and add to the $data array.
|
310 |
if ( count( $groups ) > 0 ) {
|
311 |
|
312 |
+
$subgroup_ids = array();
|
313 |
$groups_result = $api->interestGroupings( $settings->list_id );
|
314 |
|
315 |
if ( is_array( $groups_result ) && count( $groups_result ) > 0 ) {
|
classes/class-fl-builder-service-mailerlite.php
CHANGED
@@ -65,8 +65,8 @@ final class FLBuilderServiceMailerLite extends FLBuilderService {
|
|
65 |
*/
|
66 |
public function connect( $fields = array() ) {
|
67 |
$response = array(
|
68 |
-
'error'
|
69 |
-
'data'
|
70 |
);
|
71 |
|
72 |
// Make sure we have an API token.
|
@@ -101,13 +101,13 @@ final class FLBuilderServiceMailerLite extends FLBuilderService {
|
|
101 |
ob_start();
|
102 |
|
103 |
FLBuilder::render_settings_field( 'api_key', array(
|
104 |
-
'row_class'
|
105 |
-
'class'
|
106 |
-
'type'
|
107 |
-
'label'
|
108 |
-
'help'
|
109 |
-
'preview'
|
110 |
-
'type'
|
111 |
),
|
112 |
));
|
113 |
|
@@ -126,19 +126,19 @@ final class FLBuilderServiceMailerLite extends FLBuilderService {
|
|
126 |
* }
|
127 |
*/
|
128 |
public function render_fields( $account, $settings ) {
|
129 |
-
$account_data
|
130 |
-
$api
|
131 |
$api->setPath( 'groups' );
|
132 |
$get_lists = json_decode( $api->getAll() );
|
133 |
-
$lists
|
134 |
|
135 |
if ( $get_lists && count( $get_lists ) > 0 ) {
|
136 |
$lists = $get_lists;
|
137 |
}
|
138 |
|
139 |
-
$response
|
140 |
-
'error'
|
141 |
-
'html'
|
142 |
);
|
143 |
|
144 |
return $response;
|
@@ -166,13 +166,13 @@ final class FLBuilderServiceMailerLite extends FLBuilderService {
|
|
166 |
}
|
167 |
|
168 |
FLBuilder::render_settings_field( 'list_id', array(
|
169 |
-
'row_class'
|
170 |
-
'class'
|
171 |
-
'type'
|
172 |
-
'label'
|
173 |
-
'options'
|
174 |
-
'preview'
|
175 |
-
'type'
|
176 |
),
|
177 |
), $settings);
|
178 |
|
@@ -191,8 +191,8 @@ final class FLBuilderServiceMailerLite extends FLBuilderService {
|
|
191 |
* }
|
192 |
*/
|
193 |
public function subscribe( $settings, $email, $name = '' ) {
|
194 |
-
$account_data
|
195 |
-
$response
|
196 |
'error' => false,
|
197 |
);
|
198 |
|
65 |
*/
|
66 |
public function connect( $fields = array() ) {
|
67 |
$response = array(
|
68 |
+
'error' => false,
|
69 |
+
'data' => array(),
|
70 |
);
|
71 |
|
72 |
// Make sure we have an API token.
|
101 |
ob_start();
|
102 |
|
103 |
FLBuilder::render_settings_field( 'api_key', array(
|
104 |
+
'row_class' => 'fl-builder-service-connect-row',
|
105 |
+
'class' => 'fl-builder-service-connect-input',
|
106 |
+
'type' => 'text',
|
107 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
108 |
+
'help' => __( 'Found in your MailerLite account under Integrations > Developer API.', 'fl-builder' ),
|
109 |
+
'preview' => array(
|
110 |
+
'type' => 'none',
|
111 |
),
|
112 |
));
|
113 |
|
126 |
* }
|
127 |
*/
|
128 |
public function render_fields( $account, $settings ) {
|
129 |
+
$account_data = $this->get_account_data( $account );
|
130 |
+
$api = $this->get_api( $account_data['api_key'] );
|
131 |
$api->setPath( 'groups' );
|
132 |
$get_lists = json_decode( $api->getAll() );
|
133 |
+
$lists = array();
|
134 |
|
135 |
if ( $get_lists && count( $get_lists ) > 0 ) {
|
136 |
$lists = $get_lists;
|
137 |
}
|
138 |
|
139 |
+
$response = array(
|
140 |
+
'error' => false,
|
141 |
+
'html' => $this->render_list_field( $lists, $settings ),
|
142 |
);
|
143 |
|
144 |
return $response;
|
166 |
}
|
167 |
|
168 |
FLBuilder::render_settings_field( 'list_id', array(
|
169 |
+
'row_class' => 'fl-builder-service-field-row',
|
170 |
+
'class' => 'fl-builder-service-list-select',
|
171 |
+
'type' => 'select',
|
172 |
+
'label' => _x( 'Group', 'An email list from a third party provider.', 'fl-builder' ),
|
173 |
+
'options' => $options,
|
174 |
+
'preview' => array(
|
175 |
+
'type' => 'none',
|
176 |
),
|
177 |
), $settings);
|
178 |
|
191 |
* }
|
192 |
*/
|
193 |
public function subscribe( $settings, $email, $name = '' ) {
|
194 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
195 |
+
$response = array(
|
196 |
'error' => false,
|
197 |
);
|
198 |
|
classes/class-fl-builder-service-mailpoet.php
CHANGED
@@ -27,8 +27,8 @@ final class FLBuilderServiceMailPoet extends FLBuilderService {
|
|
27 |
*/
|
28 |
public function connect( $fields = array() ) {
|
29 |
$response = array(
|
30 |
-
'error'
|
31 |
-
'data'
|
32 |
);
|
33 |
|
34 |
return $response;
|
@@ -57,36 +57,36 @@ final class FLBuilderServiceMailPoet extends FLBuilderService {
|
|
57 |
*/
|
58 |
public function render_fields( $account, $settings ) {
|
59 |
$response = array(
|
60 |
-
'error'
|
61 |
-
'html'
|
62 |
);
|
63 |
-
$lists
|
64 |
|
65 |
try {
|
66 |
// MailPoet 2+
|
67 |
if ( class_exists( 'WYSIJA' ) ) {
|
68 |
-
$list_model
|
69 |
-
$lists
|
70 |
'is_enabled' => 1,
|
71 |
) );
|
72 |
|
73 |
// MailPoet 3.0
|
74 |
} elseif ( defined( 'MAILPOET_INITIALIZED' ) && true === MAILPOET_INITIALIZED ) {
|
75 |
|
76 |
-
$listing
|
77 |
-
$listing_data = $listing->get();
|
78 |
|
79 |
if ( isset( $listing_data['items'] ) ) {
|
80 |
foreach ( $listing_data['items'] as $segment ) {
|
81 |
$lists[] = array(
|
82 |
-
'list_id'
|
83 |
-
'name'
|
84 |
);
|
85 |
}
|
86 |
}
|
87 |
}
|
88 |
|
89 |
-
$response['html']
|
90 |
} catch ( Exception $e ) {
|
91 |
$response['error'] = __( 'There was an error retrieveing your lists.', 'fl-builder' );
|
92 |
}
|
@@ -115,13 +115,13 @@ final class FLBuilderServiceMailPoet extends FLBuilderService {
|
|
115 |
}
|
116 |
|
117 |
FLBuilder::render_settings_field( 'list_id', array(
|
118 |
-
'row_class'
|
119 |
-
'class'
|
120 |
-
'type'
|
121 |
-
'label'
|
122 |
-
'options'
|
123 |
-
'preview'
|
124 |
-
'type'
|
125 |
),
|
126 |
), $settings);
|
127 |
|
@@ -149,7 +149,7 @@ final class FLBuilderServiceMailPoet extends FLBuilderService {
|
|
149 |
|
150 |
if ( ! class_exists( 'WYSIJA' )
|
151 |
&& ( ! defined( 'MAILPOET_INITIALIZED' ) || ( defined( 'MAILPOET_INITIALIZED' ) && false === MAILPOET_INITIALIZED ) )
|
152 |
-
|
153 |
$response['error'] = __( 'There was an error subscribing. MailPoet is not installed.', 'fl-builder' );
|
154 |
} else {
|
155 |
|
@@ -188,7 +188,7 @@ final class FLBuilderServiceMailPoet extends FLBuilderService {
|
|
188 |
}
|
189 |
|
190 |
$subscribed = $subscriber::subscribe( $user, array( $settings->list_id ) );
|
191 |
-
$errors
|
192 |
|
193 |
if ( false !== $errors ) {
|
194 |
$response['error'] = sprintf( __( 'There was an error subscribing to MailPoet. %s', 'fl-builder' ), $errors[0] );
|
27 |
*/
|
28 |
public function connect( $fields = array() ) {
|
29 |
$response = array(
|
30 |
+
'error' => false,
|
31 |
+
'data' => array(),
|
32 |
);
|
33 |
|
34 |
return $response;
|
57 |
*/
|
58 |
public function render_fields( $account, $settings ) {
|
59 |
$response = array(
|
60 |
+
'error' => false,
|
61 |
+
'html' => '',
|
62 |
);
|
63 |
+
$lists = array();
|
64 |
|
65 |
try {
|
66 |
// MailPoet 2+
|
67 |
if ( class_exists( 'WYSIJA' ) ) {
|
68 |
+
$list_model = WYSIJA::get( 'list', 'model' );
|
69 |
+
$lists = $list_model->get( array( 'name', 'list_id' ), array(
|
70 |
'is_enabled' => 1,
|
71 |
) );
|
72 |
|
73 |
// MailPoet 3.0
|
74 |
} elseif ( defined( 'MAILPOET_INITIALIZED' ) && true === MAILPOET_INITIALIZED ) {
|
75 |
|
76 |
+
$listing = new MailPoet\Listing\Handler();
|
77 |
+
$listing_data = $listing->get( '\MailPoet\Models\Segment', array() );
|
78 |
|
79 |
if ( isset( $listing_data['items'] ) ) {
|
80 |
foreach ( $listing_data['items'] as $segment ) {
|
81 |
$lists[] = array(
|
82 |
+
'list_id' => $segment->id,
|
83 |
+
'name' => $segment->name,
|
84 |
);
|
85 |
}
|
86 |
}
|
87 |
}
|
88 |
|
89 |
+
$response['html'] = self::render_list_field( $lists, $settings );
|
90 |
} catch ( Exception $e ) {
|
91 |
$response['error'] = __( 'There was an error retrieveing your lists.', 'fl-builder' );
|
92 |
}
|
115 |
}
|
116 |
|
117 |
FLBuilder::render_settings_field( 'list_id', array(
|
118 |
+
'row_class' => 'fl-builder-service-field-row',
|
119 |
+
'class' => 'fl-builder-service-list-select',
|
120 |
+
'type' => 'select',
|
121 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
122 |
+
'options' => $options,
|
123 |
+
'preview' => array(
|
124 |
+
'type' => 'none',
|
125 |
),
|
126 |
), $settings);
|
127 |
|
149 |
|
150 |
if ( ! class_exists( 'WYSIJA' )
|
151 |
&& ( ! defined( 'MAILPOET_INITIALIZED' ) || ( defined( 'MAILPOET_INITIALIZED' ) && false === MAILPOET_INITIALIZED ) )
|
152 |
+
) {
|
153 |
$response['error'] = __( 'There was an error subscribing. MailPoet is not installed.', 'fl-builder' );
|
154 |
} else {
|
155 |
|
188 |
}
|
189 |
|
190 |
$subscribed = $subscriber::subscribe( $user, array( $settings->list_id ) );
|
191 |
+
$errors = $subscribed->getErrors();
|
192 |
|
193 |
if ( false !== $errors ) {
|
194 |
$response['error'] = sprintf( __( 'There was an error subscribing to MailPoet. %s', 'fl-builder' ), $errors[0] );
|
classes/class-fl-builder-service-mailrelay.php
CHANGED
@@ -38,10 +38,10 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
38 |
$base_url = preg_replace( '#^https?://#', '', $base_url );
|
39 |
$response = wp_remote_post( 'https://' . $base_url . $this->api_url, array(
|
40 |
'timeout' => 60,
|
41 |
-
'body'
|
42 |
) );
|
43 |
|
44 |
-
if ( is_wp_error( $response ) || (isset( $response->status ) && 0 == $response->status ) ) {
|
45 |
if ( isset( $response->status ) ) {
|
46 |
$data = json_decode( $response, true );
|
47 |
} else {
|
@@ -68,8 +68,8 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
68 |
*/
|
69 |
public function connect( $fields = array() ) {
|
70 |
$response = array(
|
71 |
-
'error'
|
72 |
-
'data'
|
73 |
);
|
74 |
|
75 |
// Make sure we have the Host.
|
@@ -77,20 +77,19 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
77 |
$response['error'] = __( 'Error: You must provide a Host.', 'fl-builder' );
|
78 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
79 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
80 |
-
} // Try to connect and store the connection data.
|
81 |
-
else {
|
82 |
|
83 |
$result = $this->get_api_response( $fields['api_host'], array(
|
84 |
-
'function'
|
85 |
-
'apiKey'
|
86 |
-
'offset'
|
87 |
-
'count'
|
88 |
) );
|
89 |
|
90 |
if ( ! isset( $result['error'] ) ) {
|
91 |
$response['data'] = array(
|
92 |
'api_host' => $fields['api_host'],
|
93 |
-
'api_key'
|
94 |
);
|
95 |
} else {
|
96 |
$response['error'] = sprintf( __( 'Error: Could not connect to Mailrelay. %s', 'fl-builder' ), $result['error'] );
|
@@ -110,24 +109,24 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
110 |
ob_start();
|
111 |
|
112 |
FLBuilder::render_settings_field( 'api_host', array(
|
113 |
-
'row_class'
|
114 |
-
'class'
|
115 |
-
'type'
|
116 |
-
'label'
|
117 |
-
'help'
|
118 |
-
'preview'
|
119 |
-
'type'
|
120 |
),
|
121 |
));
|
122 |
|
123 |
FLBuilder::render_settings_field( 'api_key', array(
|
124 |
-
'row_class'
|
125 |
-
'class'
|
126 |
-
'type'
|
127 |
-
'label'
|
128 |
-
'help'
|
129 |
-
'preview'
|
130 |
-
'type'
|
131 |
),
|
132 |
));
|
133 |
|
@@ -146,15 +145,15 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
146 |
* }
|
147 |
*/
|
148 |
public function render_fields( $account, $settings ) {
|
149 |
-
$account_data
|
150 |
-
$result
|
151 |
-
|
152 |
-
|
153 |
) );
|
154 |
|
155 |
-
$response
|
156 |
-
'error'
|
157 |
-
'html'
|
158 |
);
|
159 |
|
160 |
if ( isset( $result['error'] ) ) {
|
@@ -187,14 +186,14 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
187 |
}
|
188 |
|
189 |
FLBuilder::render_settings_field( 'list_id', array(
|
190 |
-
'row_class'
|
191 |
-
'class'
|
192 |
-
'type'
|
193 |
-
'multi-select'
|
194 |
-
'label'
|
195 |
-
'options'
|
196 |
-
'preview'
|
197 |
-
'type'
|
198 |
),
|
199 |
), $settings);
|
200 |
|
@@ -223,11 +222,11 @@ final class FLBuilderServiceMailrelay extends FLBuilderService {
|
|
223 |
} else {
|
224 |
|
225 |
$result = $this->get_api_response( $account_data['api_host'], array(
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
) );
|
232 |
|
233 |
if ( isset( $result['error'] ) ) {
|
38 |
$base_url = preg_replace( '#^https?://#', '', $base_url );
|
39 |
$response = wp_remote_post( 'https://' . $base_url . $this->api_url, array(
|
40 |
'timeout' => 60,
|
41 |
+
'body' => $params,
|
42 |
) );
|
43 |
|
44 |
+
if ( is_wp_error( $response ) || ( isset( $response->status ) && 0 == $response->status ) ) {
|
45 |
if ( isset( $response->status ) ) {
|
46 |
$data = json_decode( $response, true );
|
47 |
} else {
|
68 |
*/
|
69 |
public function connect( $fields = array() ) {
|
70 |
$response = array(
|
71 |
+
'error' => false,
|
72 |
+
'data' => array(),
|
73 |
);
|
74 |
|
75 |
// Make sure we have the Host.
|
77 |
$response['error'] = __( 'Error: You must provide a Host.', 'fl-builder' );
|
78 |
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
79 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
80 |
+
} else { // Try to connect and store the connection data.
|
|
|
81 |
|
82 |
$result = $this->get_api_response( $fields['api_host'], array(
|
83 |
+
'function' => 'getGroups',
|
84 |
+
'apiKey' => $fields['api_key'],
|
85 |
+
'offset' => 0,
|
86 |
+
'count' => 1,
|
87 |
) );
|
88 |
|
89 |
if ( ! isset( $result['error'] ) ) {
|
90 |
$response['data'] = array(
|
91 |
'api_host' => $fields['api_host'],
|
92 |
+
'api_key' => $fields['api_key'],
|
93 |
);
|
94 |
} else {
|
95 |
$response['error'] = sprintf( __( 'Error: Could not connect to Mailrelay. %s', 'fl-builder' ), $result['error'] );
|
109 |
ob_start();
|
110 |
|
111 |
FLBuilder::render_settings_field( 'api_host', array(
|
112 |
+
'row_class' => 'fl-builder-service-connect-row',
|
113 |
+
'class' => 'fl-builder-service-connect-input',
|
114 |
+
'type' => 'text',
|
115 |
+
'label' => __( 'Host', 'fl-builder' ),
|
116 |
+
'help' => __( 'The host you chose when you signed up for your account. Check your welcome email if you forgot it. Please enter it without the initial http:// (e.g. demo.ip-zone.com).', 'fl-builder' ),
|
117 |
+
'preview' => array(
|
118 |
+
'type' => 'none',
|
119 |
),
|
120 |
));
|
121 |
|
122 |
FLBuilder::render_settings_field( 'api_key', array(
|
123 |
+
'row_class' => 'fl-builder-service-connect-row',
|
124 |
+
'class' => 'fl-builder-service-connect-input',
|
125 |
+
'type' => 'text',
|
126 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
127 |
+
'help' => __( 'Your API key can be found in your Mailrelay account under Menu > Settings > API access.', 'fl-builder' ),
|
128 |
+
'preview' => array(
|
129 |
+
'type' => 'none',
|
130 |
),
|
131 |
));
|
132 |
|
145 |
* }
|
146 |
*/
|
147 |
public function render_fields( $account, $settings ) {
|
148 |
+
$account_data = $this->get_account_data( $account );
|
149 |
+
$result = $this->get_api_response( $account_data['api_host'], array(
|
150 |
+
'function' => 'getGroups',
|
151 |
+
'apiKey' => $account_data['api_key'],
|
152 |
) );
|
153 |
|
154 |
+
$response = array(
|
155 |
+
'error' => false,
|
156 |
+
'html' => '',
|
157 |
);
|
158 |
|
159 |
if ( isset( $result['error'] ) ) {
|
186 |
}
|
187 |
|
188 |
FLBuilder::render_settings_field( 'list_id', array(
|
189 |
+
'row_class' => 'fl-builder-service-field-row',
|
190 |
+
'class' => 'fl-builder-service-list-select',
|
191 |
+
'type' => 'select',
|
192 |
+
'multi-select' => true,
|
193 |
+
'label' => _x( 'Group', 'A list of subscribers group from a Mailrelay account.', 'fl-builder' ),
|
194 |
+
'options' => $options,
|
195 |
+
'preview' => array(
|
196 |
+
'type' => 'none',
|
197 |
),
|
198 |
), $settings);
|
199 |
|
222 |
} else {
|
223 |
|
224 |
$result = $this->get_api_response( $account_data['api_host'], array(
|
225 |
+
'function' => 'addSubscriber',
|
226 |
+
'apiKey' => $account_data['api_key'],
|
227 |
+
'email' => $email,
|
228 |
+
'name' => $name,
|
229 |
+
'groups' => $settings->list_id,
|
230 |
) );
|
231 |
|
232 |
if ( isset( $result['error'] ) ) {
|
classes/class-fl-builder-service-mautic.php
CHANGED
@@ -39,9 +39,9 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
39 |
}
|
40 |
|
41 |
$settings = array(
|
42 |
-
'userName'
|
43 |
-
'password'
|
44 |
-
'apiUrl'
|
45 |
);
|
46 |
|
47 |
$this->api_instance = new MauticApi( $settings );
|
@@ -64,8 +64,8 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
64 |
*/
|
65 |
public function connect( $fields = array() ) {
|
66 |
$response = array(
|
67 |
-
'error'
|
68 |
-
'data'
|
69 |
);
|
70 |
|
71 |
// Make sure we have the Host.
|
@@ -79,26 +79,25 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
79 |
// Make sure we have password
|
80 |
if ( ! isset( $fields['api_password'] ) || empty( $fields['api_password'] ) ) {
|
81 |
$response['error'] = __( 'Error: You must provide your Mautic app user password.', 'fl-builder' );
|
82 |
-
} // Try to connect and store the connection data.
|
83 |
-
else {
|
84 |
|
85 |
$api = $this->get_api( array(
|
86 |
-
'api_host'
|
87 |
'api_username' => $fields['api_username'],
|
88 |
'api_password' => $fields['api_password'],
|
89 |
) );
|
90 |
|
91 |
// Try sending request to verify credentials
|
92 |
-
$get_response
|
93 |
'limit' => 1,
|
94 |
) );
|
95 |
$response_info = $api->getResponseInfo();
|
96 |
|
97 |
if ( in_array( $response_info['http_code'], array( 200, 201 ) ) ) {
|
98 |
-
|
99 |
-
'api_host'
|
100 |
-
'api_username'
|
101 |
-
'api_password'
|
102 |
);
|
103 |
} else {
|
104 |
$error_message = $response_info['http_code'];
|
@@ -106,7 +105,7 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
106 |
$error_message = '[' . $get_response['errors'][0]['code'] . '] ' . $get_response['errors'][0]['message'];
|
107 |
}
|
108 |
|
109 |
-
|
110 |
}
|
111 |
}
|
112 |
|
@@ -123,37 +122,37 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
123 |
ob_start();
|
124 |
|
125 |
FLBuilder::render_settings_field( 'api_host', array(
|
126 |
-
'row_class'
|
127 |
-
'class'
|
128 |
-
'type'
|
129 |
-
'label'
|
130 |
-
'help'
|
131 |
-
'description'
|
132 |
Go to Mautic Configuration / API Settings and set `API enabled` to `Yes`, set `Enable HTTP basic auth` to `Yes` . Save changes.', 'fl-builder' ),
|
133 |
-
'preview'
|
134 |
-
'type'
|
135 |
),
|
136 |
));
|
137 |
|
138 |
FLBuilder::render_settings_field( 'api_username', array(
|
139 |
-
'row_class'
|
140 |
-
'class'
|
141 |
-
'type'
|
142 |
-
'label'
|
143 |
-
'help'
|
144 |
-
'preview'
|
145 |
-
'type'
|
146 |
),
|
147 |
));
|
148 |
|
149 |
FLBuilder::render_settings_field( 'api_password', array(
|
150 |
-
'row_class'
|
151 |
-
'class'
|
152 |
-
'type'
|
153 |
-
'label'
|
154 |
-
'help'
|
155 |
-
'preview'
|
156 |
-
'type'
|
157 |
),
|
158 |
));
|
159 |
|
@@ -172,17 +171,17 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
172 |
* }
|
173 |
*/
|
174 |
public function render_fields( $account, $settings ) {
|
175 |
-
$account_data
|
176 |
-
$api
|
177 |
-
'api_host'
|
178 |
-
'api_username'
|
179 |
-
'api_password'
|
180 |
) );
|
181 |
-
$lists
|
182 |
|
183 |
-
$response
|
184 |
-
'error'
|
185 |
-
'html'
|
186 |
);
|
187 |
|
188 |
if ( ! isset( $lists['lists'] ) ) {
|
@@ -215,13 +214,13 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
215 |
}
|
216 |
|
217 |
FLBuilder::render_settings_field( 'list_id', array(
|
218 |
-
'row_class'
|
219 |
-
'class'
|
220 |
-
'type'
|
221 |
-
'label'
|
222 |
-
'options'
|
223 |
-
'preview'
|
224 |
-
'type'
|
225 |
),
|
226 |
), $settings);
|
227 |
|
@@ -250,13 +249,13 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
250 |
} else {
|
251 |
|
252 |
$api = $this->get_api( array(
|
253 |
-
'api_host'
|
254 |
-
'api_username'
|
255 |
-
'api_password'
|
256 |
) );
|
257 |
|
258 |
$data = array(
|
259 |
-
'email'
|
260 |
'ipAddress' => $_SERVER['REMOTE_ADDR'],
|
261 |
'segmentId' => $settings->list_id,
|
262 |
);
|
@@ -274,7 +273,7 @@ final class FLBuilderServiceMautic extends FLBuilderService {
|
|
274 |
|
275 |
// Add new contact
|
276 |
$get_api_response = $api->subscribe( $data );
|
277 |
-
$response_info
|
278 |
|
279 |
if ( isset( $get_api_response['errors'] ) && count( $get_api_response['errors'] ) > 0 ) {
|
280 |
$response['error'] = sprintf(
|
39 |
}
|
40 |
|
41 |
$settings = array(
|
42 |
+
'userName' => $args['api_username'], // The username - set up a new user for each external site
|
43 |
+
'password' => $args['api_password'], // Make this a Long passPhrase e.g. (Try: !wE4.And.*@ws4.Guess! )
|
44 |
+
'apiUrl' => $args['api_host'], // NOTE: Required for Unit tests; *must* contain a valid url
|
45 |
);
|
46 |
|
47 |
$this->api_instance = new MauticApi( $settings );
|
64 |
*/
|
65 |
public function connect( $fields = array() ) {
|
66 |
$response = array(
|
67 |
+
'error' => false,
|
68 |
+
'data' => array(),
|
69 |
);
|
70 |
|
71 |
// Make sure we have the Host.
|
79 |
// Make sure we have password
|
80 |
if ( ! isset( $fields['api_password'] ) || empty( $fields['api_password'] ) ) {
|
81 |
$response['error'] = __( 'Error: You must provide your Mautic app user password.', 'fl-builder' );
|
82 |
+
} else { // Try to connect and store the connection data.
|
|
|
83 |
|
84 |
$api = $this->get_api( array(
|
85 |
+
'api_host' => $fields['api_host'],
|
86 |
'api_username' => $fields['api_username'],
|
87 |
'api_password' => $fields['api_password'],
|
88 |
) );
|
89 |
|
90 |
// Try sending request to verify credentials
|
91 |
+
$get_response = $api->getSegments( array(
|
92 |
'limit' => 1,
|
93 |
) );
|
94 |
$response_info = $api->getResponseInfo();
|
95 |
|
96 |
if ( in_array( $response_info['http_code'], array( 200, 201 ) ) ) {
|
97 |
+
$response['data'] = array(
|
98 |
+
'api_host' => $fields['api_host'],
|
99 |
+
'api_username' => $fields['api_username'],
|
100 |
+
'api_password' => $fields['api_password'],
|
101 |
);
|
102 |
} else {
|
103 |
$error_message = $response_info['http_code'];
|
105 |
$error_message = '[' . $get_response['errors'][0]['code'] . '] ' . $get_response['errors'][0]['message'];
|
106 |
}
|
107 |
|
108 |
+
$response['error'] = sprintf( __( 'Error: Could not connect to Mautic. %s', 'fl-builder' ), $error_message );
|
109 |
}
|
110 |
}
|
111 |
|
122 |
ob_start();
|
123 |
|
124 |
FLBuilder::render_settings_field( 'api_host', array(
|
125 |
+
'row_class' => 'fl-builder-service-connect-row',
|
126 |
+
'class' => 'fl-builder-service-connect-input',
|
127 |
+
'type' => 'text',
|
128 |
+
'label' => __( 'Installation URL', 'fl-builder' ),
|
129 |
+
'help' => __( 'The URL where your Mautic application is installed (e.g. http://mautic.mywebsite.com).', 'fl-builder' ),
|
130 |
+
'description' => __( 'API should be enabled in your Mautic application.
|
131 |
Go to Mautic Configuration / API Settings and set `API enabled` to `Yes`, set `Enable HTTP basic auth` to `Yes` . Save changes.', 'fl-builder' ),
|
132 |
+
'preview' => array(
|
133 |
+
'type' => 'none',
|
134 |
),
|
135 |
));
|
136 |
|
137 |
FLBuilder::render_settings_field( 'api_username', array(
|
138 |
+
'row_class' => 'fl-builder-service-connect-row',
|
139 |
+
'class' => 'fl-builder-service-connect-input',
|
140 |
+
'type' => 'text',
|
141 |
+
'label' => __( 'Mautic Username', 'fl-builder' ),
|
142 |
+
'help' => __( 'Username from your Mautic application. Make sure it has `Full system access`. Best practice would be to set up a new user for each external site.', 'fl-builder' ),
|
143 |
+
'preview' => array(
|
144 |
+
'type' => 'none',
|
145 |
),
|
146 |
));
|
147 |
|
148 |
FLBuilder::render_settings_field( 'api_password', array(
|
149 |
+
'row_class' => 'fl-builder-service-connect-row',
|
150 |
+
'class' => 'fl-builder-service-connect-input',
|
151 |
+
'type' => 'text',
|
152 |
+
'label' => __( 'Mautic Password', 'fl-builder' ),
|
153 |
+
'help' => __( 'Password associated with the username. Make this a Long passPhrase.', 'fl-builder' ),
|
154 |
+
'preview' => array(
|
155 |
+
'type' => 'none',
|
156 |
),
|
157 |
));
|
158 |
|
171 |
* }
|
172 |
*/
|
173 |
public function render_fields( $account, $settings ) {
|
174 |
+
$account_data = $this->get_account_data( $account );
|
175 |
+
$api = $this->get_api( array(
|
176 |
+
'api_host' => $account_data['api_host'],
|
177 |
+
'api_username' => $account_data['api_username'],
|
178 |
+
'api_password' => $account_data['api_password'],
|
179 |
) );
|
180 |
+
$lists = $api->getSegments();
|
181 |
|
182 |
+
$response = array(
|
183 |
+
'error' => false,
|
184 |
+
'html' => '',
|
185 |
);
|
186 |
|
187 |
if ( ! isset( $lists['lists'] ) ) {
|
214 |
}
|
215 |
|
216 |
FLBuilder::render_settings_field( 'list_id', array(
|
217 |
+
'row_class' => 'fl-builder-service-field-row',
|
218 |
+
'class' => 'fl-builder-service-list-select',
|
219 |
+
'type' => 'select',
|
220 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
221 |
+
'options' => $options,
|
222 |
+
'preview' => array(
|
223 |
+
'type' => 'none',
|
224 |
),
|
225 |
), $settings);
|
226 |
|
249 |
} else {
|
250 |
|
251 |
$api = $this->get_api( array(
|
252 |
+
'api_host' => $account_data['api_host'],
|
253 |
+
'api_username' => $account_data['api_username'],
|
254 |
+
'api_password' => $account_data['api_password'],
|
255 |
) );
|
256 |
|
257 |
$data = array(
|
258 |
+
'email' => $email,
|
259 |
'ipAddress' => $_SERVER['REMOTE_ADDR'],
|
260 |
'segmentId' => $settings->list_id,
|
261 |
);
|
273 |
|
274 |
// Add new contact
|
275 |
$get_api_response = $api->subscribe( $data );
|
276 |
+
$response_info = $api->getResponseInfo();
|
277 |
|
278 |
if ( isset( $get_api_response['errors'] ) && count( $get_api_response['errors'] ) > 0 ) {
|
279 |
$response['error'] = sprintf(
|
classes/class-fl-builder-service-ontraport.php
CHANGED
@@ -59,20 +59,18 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
59 |
*/
|
60 |
public function connect( $fields = array() ) {
|
61 |
$response = array(
|
62 |
-
'error'
|
63 |
-
'data'
|
64 |
);
|
65 |
|
66 |
// Make sure we have an API token.
|
67 |
if ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
68 |
$response['error'] = __( 'Error: You must provide an APP ID.', 'fl-builder' );
|
69 |
-
} // Make sure we have an Account ID.
|
70 |
-
elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
71 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
72 |
-
} // Try to connect and store the connection data.
|
73 |
-
else {
|
74 |
|
75 |
-
$api
|
76 |
|
77 |
// Try to request something to authenticate the validity of APP ID and API Key
|
78 |
$search = json_decode( $api->contact()->retrieveMultiple( array(
|
@@ -84,7 +82,7 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
84 |
if ( 200 === $status_code ) {
|
85 |
$response['data'] = array(
|
86 |
'api_key' => $fields['api_key'],
|
87 |
-
'app_id'
|
88 |
);
|
89 |
} else {
|
90 |
$response['error'] = sprintf(
|
@@ -107,24 +105,24 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
107 |
ob_start();
|
108 |
|
109 |
FLBuilder::render_settings_field( 'app_id', array(
|
110 |
-
'row_class'
|
111 |
-
'class'
|
112 |
-
'type'
|
113 |
-
'label'
|
114 |
-
'help'
|
115 |
-
'preview'
|
116 |
-
'type'
|
117 |
),
|
118 |
));
|
119 |
|
120 |
FLBuilder::render_settings_field( 'api_key', array(
|
121 |
-
'row_class'
|
122 |
-
'class'
|
123 |
-
'type'
|
124 |
-
'label'
|
125 |
-
'help'
|
126 |
-
'preview'
|
127 |
-
'type'
|
128 |
),
|
129 |
));
|
130 |
|
@@ -144,8 +142,8 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
144 |
*/
|
145 |
public function render_fields( $account, $settings ) {
|
146 |
$account_data = $this->get_account_data( $account );
|
147 |
-
$api
|
148 |
-
$campaigns
|
149 |
'listFields' => 'id, name',
|
150 |
'start' => 0,
|
151 |
'range' => 50,
|
@@ -160,9 +158,9 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
160 |
}
|
161 |
}
|
162 |
|
163 |
-
$response
|
164 |
-
'error'
|
165 |
-
'html'
|
166 |
);
|
167 |
|
168 |
return $response;
|
@@ -191,14 +189,14 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
191 |
}
|
192 |
|
193 |
FLBuilder::render_settings_field( 'campaign_id', array(
|
194 |
-
'row_class'
|
195 |
-
'class'
|
196 |
-
'type'
|
197 |
-
'label'
|
198 |
-
'options'
|
199 |
-
'default'
|
200 |
-
'preview'
|
201 |
-
'type'
|
202 |
),
|
203 |
), $settings);
|
204 |
|
@@ -226,9 +224,9 @@ final class FLBuilderServiceOntraport extends FLBuilderService {
|
|
226 |
$response['error'] = __( 'There was an error subscribing to Ontraport. The account is no longer connected.', 'fl-builder' );
|
227 |
} else {
|
228 |
|
229 |
-
$api
|
230 |
$args = array(
|
231 |
-
'email'
|
232 |
'updateCampaign' => $settings->campaign_id,
|
233 |
);
|
234 |
|
59 |
*/
|
60 |
public function connect( $fields = array() ) {
|
61 |
$response = array(
|
62 |
+
'error' => false,
|
63 |
+
'data' => array(),
|
64 |
);
|
65 |
|
66 |
// Make sure we have an API token.
|
67 |
if ( ! isset( $fields['app_id'] ) || empty( $fields['app_id'] ) ) {
|
68 |
$response['error'] = __( 'Error: You must provide an APP ID.', 'fl-builder' );
|
69 |
+
} elseif ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) { // Make sure we have an Account ID.
|
|
|
70 |
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
71 |
+
} else { // Try to connect and store the connection data.
|
|
|
72 |
|
73 |
+
$api = $this->get_api( $fields['app_id'], $fields['api_key'] );
|
74 |
|
75 |
// Try to request something to authenticate the validity of APP ID and API Key
|
76 |
$search = json_decode( $api->contact()->retrieveMultiple( array(
|
82 |
if ( 200 === $status_code ) {
|
83 |
$response['data'] = array(
|
84 |
'api_key' => $fields['api_key'],
|
85 |
+
'app_id' => $fields['app_id'],
|
86 |
);
|
87 |
} else {
|
88 |
$response['error'] = sprintf(
|
105 |
ob_start();
|
106 |
|
107 |
FLBuilder::render_settings_field( 'app_id', array(
|
108 |
+
'row_class' => 'fl-builder-service-connect-row',
|
109 |
+
'class' => 'fl-builder-service-connect-input',
|
110 |
+
'type' => 'text',
|
111 |
+
'label' => __( 'APP ID', 'fl-builder' ),
|
112 |
+
'help' => __( 'Your APP ID can be found in your Ontraport account.', 'fl-builder' ),
|
113 |
+
'preview' => array(
|
114 |
+
'type' => 'none',
|
115 |
),
|
116 |
));
|
117 |
|
118 |
FLBuilder::render_settings_field( 'api_key', array(
|
119 |
+
'row_class' => 'fl-builder-service-connect-row',
|
120 |
+
'class' => 'fl-builder-service-connect-input',
|
121 |
+
'type' => 'text',
|
122 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
123 |
+
'help' => __( 'Your API key can be found in your Ontraport account.', 'fl-builder' ),
|
124 |
+
'preview' => array(
|
125 |
+
'type' => 'none',
|
126 |
),
|
127 |
));
|
128 |
|
142 |
*/
|
143 |
public function render_fields( $account, $settings ) {
|
144 |
$account_data = $this->get_account_data( $account );
|
145 |
+
$api = $this->get_api( $account_data['app_id'], $account_data['api_key'] );
|
146 |
+
$campaigns = json_decode( $api->campaignbuilder()->retrieveMultiplePaginated( array(
|
147 |
'listFields' => 'id, name',
|
148 |
'start' => 0,
|
149 |
'range' => 50,
|
158 |
}
|
159 |
}
|
160 |
|
161 |
+
$response = array(
|
162 |
+
'error' => false,
|
163 |
+
'html' => $this->render_campaigns_field( $campaigns_list, $settings ),
|
164 |
);
|
165 |
|
166 |
return $response;
|
189 |
}
|
190 |
|
191 |
FLBuilder::render_settings_field( 'campaign_id', array(
|
192 |
+
'row_class' => 'fl-builder-service-field-row',
|
193 |
+
'class' => 'fl-builder-service-list-select',
|
194 |
+
'type' => 'select',
|
195 |
+
'label' => _x( 'Campaign', 'An email campaign from your Ontraport account.', 'fl-builder' ),
|
196 |
+
'options' => $options,
|
197 |
+
'default' => 0,
|
198 |
+
'preview' => array(
|
199 |
+
'type' => 'none',
|
200 |
),
|
201 |
), $settings);
|
202 |
|
224 |
$response['error'] = __( 'There was an error subscribing to Ontraport. The account is no longer connected.', 'fl-builder' );
|
225 |
} else {
|
226 |
|
227 |
+
$api = $this->get_api( $account_data['app_id'], $account_data['api_key'] );
|
228 |
$args = array(
|
229 |
+
'email' => $email,
|
230 |
'updateCampaign' => $settings->campaign_id,
|
231 |
);
|
232 |
|
classes/class-fl-builder-service-sendinblue.php
CHANGED
@@ -56,8 +56,8 @@ final class FLBuilderServiceSendinBlue extends FLBuilderService {
|
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
-
'error'
|
60 |
-
'data'
|
61 |
);
|
62 |
|
63 |
// Make sure we have an access key.
|
@@ -92,13 +92,13 @@ final class FLBuilderServiceSendinBlue extends FLBuilderService {
|
|
92 |
ob_start();
|
93 |
|
94 |
FLBuilder::render_settings_field( 'access_key', array(
|
95 |
-
'row_class'
|
96 |
-
'class'
|
97 |
-
'type'
|
98 |
-
'label'
|
99 |
-
'help'
|
100 |
-
'preview'
|
101 |
-
'type'
|
102 |
),
|
103 |
));
|
104 |
|
@@ -117,11 +117,11 @@ final class FLBuilderServiceSendinBlue extends FLBuilderService {
|
|
117 |
* }
|
118 |
*/
|
119 |
public function render_fields( $account, $settings ) {
|
120 |
-
$account_data
|
121 |
-
$api
|
122 |
-
$response
|
123 |
-
'error'
|
124 |
-
'html'
|
125 |
);
|
126 |
|
127 |
$result = $api->get_lists( 1, 50 );
|
@@ -158,13 +158,13 @@ final class FLBuilderServiceSendinBlue extends FLBuilderService {
|
|
158 |
}
|
159 |
|
160 |
FLBuilder::render_settings_field( 'list_id', array(
|
161 |
-
'row_class'
|
162 |
-
'class'
|
163 |
-
'type'
|
164 |
-
'label'
|
165 |
-
'options'
|
166 |
-
'preview'
|
167 |
-
'type'
|
168 |
),
|
169 |
), $settings);
|
170 |
|
56 |
*/
|
57 |
public function connect( $fields = array() ) {
|
58 |
$response = array(
|
59 |
+
'error' => false,
|
60 |
+
'data' => array(),
|
61 |
);
|
62 |
|
63 |
// Make sure we have an access key.
|
92 |
ob_start();
|
93 |
|
94 |
FLBuilder::render_settings_field( 'access_key', array(
|
95 |
+
'row_class' => 'fl-builder-service-connect-row',
|
96 |
+
'class' => 'fl-builder-service-connect-input',
|
97 |
+
'type' => 'text',
|
98 |
+
'label' => __( 'Access Key', 'fl-builder' ),
|
99 |
+
'help' => __( 'Your Access Key can be found in your SendinBlue account under API & Integration > Manager Your Keys > Version 2.0 > Access Key.', 'fl-builder' ),
|
100 |
+
'preview' => array(
|
101 |
+
'type' => 'none',
|
102 |
),
|
103 |
));
|
104 |
|
117 |
* }
|
118 |
*/
|
119 |
public function render_fields( $account, $settings ) {
|
120 |
+
$account_data = $this->get_account_data( $account );
|
121 |
+
$api = $this->get_api( $account_data['access_key'] );
|
122 |
+
$response = array(
|
123 |
+
'error' => false,
|
124 |
+
'html' => '',
|
125 |
);
|
126 |
|
127 |
$result = $api->get_lists( 1, 50 );
|
158 |
}
|
159 |
|
160 |
FLBuilder::render_settings_field( 'list_id', array(
|
161 |
+
'row_class' => 'fl-builder-service-field-row',
|
162 |
+
'class' => 'fl-builder-service-list-select',
|
163 |
+
'type' => 'select',
|
164 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
165 |
+
'options' => $options,
|
166 |
+
'preview' => array(
|
167 |
+
'type' => 'none',
|
168 |
),
|
169 |
), $settings);
|
170 |
|
classes/class-fl-builder-service-sendy.php
CHANGED
@@ -57,8 +57,8 @@ final class FLBuilderServiceSendy extends FLBuilderService {
|
|
57 |
*/
|
58 |
public function connect( $fields = array() ) {
|
59 |
$response = array(
|
60 |
-
'error'
|
61 |
-
'data'
|
62 |
);
|
63 |
|
64 |
// Make sure we have the Host.
|
@@ -76,8 +76,8 @@ final class FLBuilderServiceSendy extends FLBuilderService {
|
|
76 |
|
77 |
$api = $this->get_api( array(
|
78 |
'installation_url' => $fields['api_host'],
|
79 |
-
'api_key'
|
80 |
-
'list_id'
|
81 |
) );
|
82 |
|
83 |
// Send request for list ID validation
|
@@ -86,8 +86,8 @@ final class FLBuilderServiceSendy extends FLBuilderService {
|
|
86 |
if ( true === $get_api_response['status'] ) {
|
87 |
$response['data'] = array(
|
88 |
'api_host' => $fields['api_host'],
|
89 |
-
'api_key'
|
90 |
-
'list_id'
|
91 |
);
|
92 |
} else {
|
93 |
$response['error'] = sprintf( __( 'Error: Could not connect to Sendy. %s', 'fl-builder' ), $get_api_response['message'] );
|
@@ -107,35 +107,35 @@ final class FLBuilderServiceSendy extends FLBuilderService {
|
|
107 |
ob_start();
|
108 |
|
109 |
FLBuilder::render_settings_field( 'api_host', array(
|
110 |
-
'row_class'
|
111 |
-
'class'
|
112 |
-
'type'
|
113 |
-
'label'
|
114 |
-
'help'
|
115 |
-
'preview'
|
116 |
-
'type'
|
117 |
),
|
118 |
));
|
119 |
|
120 |
FLBuilder::render_settings_field( 'api_key', array(
|
121 |
-
'row_class'
|
122 |
-
'class'
|
123 |
-
'type'
|
124 |
-
'label'
|
125 |
-
'help'
|
126 |
-
'preview'
|
127 |
-
'type'
|
128 |
),
|
129 |
));
|
130 |
|
131 |
FLBuilder::render_settings_field( 'list_id', array(
|
132 |
-
'row_class'
|
133 |
-
'class'
|
134 |
-
'type'
|
135 |
-
'label'
|
136 |
-
'help'
|
137 |
-
'preview'
|
138 |
-
'type'
|
139 |
),
|
140 |
));
|
141 |
|
@@ -155,9 +155,9 @@ final class FLBuilderServiceSendy extends FLBuilderService {
|
|
155 |
*/
|
156 |
public function render_fields( $account, $settings ) {
|
157 |
|
158 |
-
$response
|
159 |
-
'error'
|
160 |
-
'html'
|
161 |
);
|
162 |
|
163 |
return $response;
|
@@ -186,13 +186,13 @@ final class FLBuilderServiceSendy extends FLBuilderService {
|
|
186 |
|
187 |
$api = $this->get_api( array(
|
188 |
'installation_url' => $account_data['api_host'],
|
189 |
-
'api_key'
|
190 |
-
'list_id'
|
191 |
) );
|
192 |
|
193 |
// Send request for list ID validation
|
194 |
$get_api_response = $api->subscribe( array(
|
195 |
-
'name'
|
196 |
'email' => $email,
|
197 |
) );
|
198 |
|
57 |
*/
|
58 |
public function connect( $fields = array() ) {
|
59 |
$response = array(
|
60 |
+
'error' => false,
|
61 |
+
'data' => array(),
|
62 |
);
|
63 |
|
64 |
// Make sure we have the Host.
|
76 |
|
77 |
$api = $this->get_api( array(
|
78 |
'installation_url' => $fields['api_host'],
|
79 |
+
'api_key' => $fields['api_key'],
|
80 |
+
'list_id' => $fields['list_id'],
|
81 |
) );
|
82 |
|
83 |
// Send request for list ID validation
|
86 |
if ( true === $get_api_response['status'] ) {
|
87 |
$response['data'] = array(
|
88 |
'api_host' => $fields['api_host'],
|
89 |
+
'api_key' => $fields['api_key'],
|
90 |
+
'list_id' => $fields['list_id'],
|
91 |
);
|
92 |
} else {
|
93 |
$response['error'] = sprintf( __( 'Error: Could not connect to Sendy. %s', 'fl-builder' ), $get_api_response['message'] );
|
107 |
ob_start();
|
108 |
|
109 |
FLBuilder::render_settings_field( 'api_host', array(
|
110 |
+
'row_class' => 'fl-builder-service-connect-row',
|
111 |
+
'class' => 'fl-builder-service-connect-input',
|
112 |
+
'type' => 'text',
|
113 |
+
'label' => __( 'Installation URL', 'fl-builder' ),
|
114 |
+
'help' => __( 'The URL where your Sendy application is installed (e.g. http://mywebsite.com/sendy).', 'fl-builder' ),
|
115 |
+
'preview' => array(
|
116 |
+
'type' => 'none',
|
117 |
),
|
118 |
));
|
119 |
|
120 |
FLBuilder::render_settings_field( 'api_key', array(
|
121 |
+
'row_class' => 'fl-builder-service-connect-row',
|
122 |
+
'class' => 'fl-builder-service-connect-input',
|
123 |
+
'type' => 'text',
|
124 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
125 |
+
'help' => __( 'Found in your Sendy application under Settings.', 'fl-builder' ),
|
126 |
+
'preview' => array(
|
127 |
+
'type' => 'none',
|
128 |
),
|
129 |
));
|
130 |
|
131 |
FLBuilder::render_settings_field( 'list_id', array(
|
132 |
+
'row_class' => 'fl-builder-service-connect-row',
|
133 |
+
'class' => 'fl-builder-service-connect-input',
|
134 |
+
'type' => 'text',
|
135 |
+
'label' => __( 'List ID', 'fl-builder' ),
|
136 |
+
'help' => __( 'The ID of the list you would like users to subscribe to. The ID of a list can be found under "View all lists" in the section named ID.', 'fl-builder' ),
|
137 |
+
'preview' => array(
|
138 |
+
'type' => 'none',
|
139 |
),
|
140 |
));
|
141 |
|
155 |
*/
|
156 |
public function render_fields( $account, $settings ) {
|
157 |
|
158 |
+
$response = array(
|
159 |
+
'error' => false,
|
160 |
+
'html' => '',
|
161 |
);
|
162 |
|
163 |
return $response;
|
186 |
|
187 |
$api = $this->get_api( array(
|
188 |
'installation_url' => $account_data['api_host'],
|
189 |
+
'api_key' => $account_data['api_key'],
|
190 |
+
'list_id' => $account_data['list_id'],
|
191 |
) );
|
192 |
|
193 |
// Send request for list ID validation
|
194 |
$get_api_response = $api->subscribe( array(
|
195 |
+
'name' => $name,
|
196 |
'email' => $email,
|
197 |
) );
|
198 |
|
classes/class-fl-builder-services.php
CHANGED
@@ -15,127 +15,127 @@ final class FLBuilderServices {
|
|
15 |
* @var array $services_data
|
16 |
*/
|
17 |
static private $services_data = array(
|
18 |
-
'activecampaign'
|
19 |
-
'type'
|
20 |
-
'name'
|
21 |
-
'class'
|
22 |
),
|
23 |
-
'aweber'
|
24 |
-
'type'
|
25 |
-
'name'
|
26 |
-
'class'
|
27 |
),
|
28 |
-
'campaign-monitor'
|
29 |
-
'type'
|
30 |
-
'name'
|
31 |
-
'class'
|
32 |
),
|
33 |
-
'campayn'
|
34 |
-
'type'
|
35 |
-
'name'
|
36 |
-
'class'
|
37 |
),
|
38 |
-
'constant-contact'
|
39 |
-
'type'
|
40 |
-
'name'
|
41 |
-
'class'
|
42 |
),
|
43 |
-
'convertkit'
|
44 |
-
'type'
|
45 |
-
'name'
|
46 |
-
'class'
|
47 |
),
|
48 |
-
'drip'
|
49 |
-
'type'
|
50 |
-
'name'
|
51 |
-
'class'
|
52 |
),
|
53 |
-
'email-address'
|
54 |
-
'type'
|
55 |
-
'name'
|
56 |
-
'class'
|
57 |
),
|
58 |
-
'enormail'
|
59 |
-
'type'
|
60 |
-
'name'
|
61 |
-
'class'
|
62 |
),
|
63 |
-
'getresponse'
|
64 |
-
'type'
|
65 |
-
'name'
|
66 |
-
'class'
|
67 |
),
|
68 |
'godaddy-email-marketing' => array(
|
69 |
-
'type'
|
70 |
-
'name'
|
71 |
-
'class'
|
72 |
),
|
73 |
-
'hatchbuck'
|
74 |
-
'type'
|
75 |
-
'name'
|
76 |
-
'class'
|
77 |
),
|
78 |
-
'icontact'
|
79 |
-
'type'
|
80 |
-
'name'
|
81 |
-
'class'
|
82 |
),
|
83 |
-
'icontact-pro'
|
84 |
-
'type'
|
85 |
-
'name'
|
86 |
-
'class'
|
87 |
),
|
88 |
-
'infusionsoft'
|
89 |
-
'type'
|
90 |
-
'name'
|
91 |
-
'class'
|
92 |
),
|
93 |
-
'madmimi'
|
94 |
-
'type'
|
95 |
-
'name'
|
96 |
-
'class'
|
97 |
),
|
98 |
-
'mailchimp'
|
99 |
-
'type'
|
100 |
-
'name'
|
101 |
-
'class'
|
102 |
),
|
103 |
-
'mailerlite'
|
104 |
-
'type'
|
105 |
-
'name'
|
106 |
-
'class'
|
107 |
),
|
108 |
-
'mailpoet'
|
109 |
-
'type'
|
110 |
-
'name'
|
111 |
-
'class'
|
112 |
),
|
113 |
-
'mailrelay'
|
114 |
-
'type'
|
115 |
-
'name'
|
116 |
-
'class'
|
117 |
),
|
118 |
-
'mautic'
|
119 |
-
'type'
|
120 |
-
'name'
|
121 |
-
'class'
|
122 |
),
|
123 |
-
'ontraport'
|
124 |
-
'type'
|
125 |
-
'name'
|
126 |
-
'class'
|
127 |
-
'namespace'
|
128 |
),
|
129 |
-
'sendinblue'
|
130 |
-
'type'
|
131 |
-
'name'
|
132 |
-
'class'
|
133 |
),
|
134 |
-
'sendy'
|
135 |
-
'type'
|
136 |
-
'name'
|
137 |
-
'class'
|
138 |
-
'namespace'
|
139 |
),
|
140 |
);
|
141 |
|
@@ -216,8 +216,8 @@ final class FLBuilderServices {
|
|
216 |
$saved_services = FLBuilderModel::get_services();
|
217 |
$post_data = FLBuilderModel::get_post_data();
|
218 |
$response = array(
|
219 |
-
'error'
|
220 |
-
'html'
|
221 |
);
|
222 |
|
223 |
// Validate the service data.
|
@@ -271,21 +271,21 @@ final class FLBuilderServices {
|
|
271 |
* @return array The response array.
|
272 |
*/
|
273 |
static public function render_settings() {
|
274 |
-
$post_data
|
275 |
-
$saved_services
|
276 |
-
$module
|
277 |
-
$settings
|
278 |
-
$service
|
279 |
-
$response
|
280 |
-
'error'
|
281 |
-
'html'
|
282 |
);
|
283 |
|
284 |
// Render the settings to connect a new account.
|
285 |
if ( isset( $post_data['add_new'] ) || ! isset( $saved_services[ $service ] ) ) {
|
286 |
$response['html'] = self::render_connect_settings( $service );
|
287 |
} else {
|
288 |
-
$account
|
289 |
$response['html'] = self::render_account_settings( $service, $account );
|
290 |
}
|
291 |
|
@@ -303,13 +303,13 @@ final class FLBuilderServices {
|
|
303 |
ob_start();
|
304 |
|
305 |
FLBuilder::render_settings_field( 'service_account', array(
|
306 |
-
'row_class'
|
307 |
-
'class'
|
308 |
-
'type'
|
309 |
-
'label'
|
310 |
-
'help'
|
311 |
-
'preview'
|
312 |
-
'type'
|
313 |
),
|
314 |
));
|
315 |
|
@@ -317,10 +317,10 @@ final class FLBuilderServices {
|
|
317 |
echo $instance->render_connect_settings();
|
318 |
|
319 |
FLBuilder::render_settings_field( 'service_connect_button', array(
|
320 |
-
'row_class'
|
321 |
-
'class'
|
322 |
-
'type'
|
323 |
-
'label'
|
324 |
));
|
325 |
|
326 |
return ob_get_clean();
|
@@ -337,10 +337,10 @@ final class FLBuilderServices {
|
|
337 |
static public function render_account_settings( $service, $active = '' ) {
|
338 |
ob_start();
|
339 |
|
340 |
-
$saved_services
|
341 |
-
$settings
|
342 |
-
$settings->service_account
|
343 |
-
$options
|
344 |
'' => __( 'Choose...', 'fl-builder' ),
|
345 |
);
|
346 |
|
@@ -353,23 +353,23 @@ final class FLBuilderServices {
|
|
353 |
|
354 |
// Render the account select.
|
355 |
FLBuilder::render_settings_field( 'service_account', array(
|
356 |
-
'row_class'
|
357 |
-
'class'
|
358 |
-
'type'
|
359 |
-
'label'
|
360 |
-
'options'
|
361 |
-
'preview'
|
362 |
-
'type'
|
363 |
),
|
364 |
), $settings);
|
365 |
|
366 |
// Render additional service fields if we have a saved account.
|
367 |
if ( ! empty( $active ) && isset( $saved_services[ $service ][ $active ] ) ) {
|
368 |
|
369 |
-
$post_data
|
370 |
-
$module
|
371 |
-
$instance
|
372 |
-
$response
|
373 |
|
374 |
if ( ! $response['error'] ) {
|
375 |
echo $response['html'];
|
@@ -388,10 +388,10 @@ final class FLBuilderServices {
|
|
388 |
* @return array The response array.
|
389 |
*/
|
390 |
static public function render_fields() {
|
391 |
-
$post_data
|
392 |
-
$module
|
393 |
-
$instance
|
394 |
-
$response
|
395 |
|
396 |
return $response;
|
397 |
}
|
15 |
* @var array $services_data
|
16 |
*/
|
17 |
static private $services_data = array(
|
18 |
+
'activecampaign' => array(
|
19 |
+
'type' => 'autoresponder',
|
20 |
+
'name' => 'ActiveCampaign',
|
21 |
+
'class' => 'FLBuilderServiceActiveCampaign',
|
22 |
),
|
23 |
+
'aweber' => array(
|
24 |
+
'type' => 'autoresponder',
|
25 |
+
'name' => 'AWeber',
|
26 |
+
'class' => 'FLBuilderServiceAWeber',
|
27 |
),
|
28 |
+
'campaign-monitor' => array(
|
29 |
+
'type' => 'autoresponder',
|
30 |
+
'name' => 'Campaign Monitor',
|
31 |
+
'class' => 'FLBuilderServiceCampaignMonitor',
|
32 |
),
|
33 |
+
'campayn' => array(
|
34 |
+
'type' => 'autoresponder',
|
35 |
+
'name' => 'Campayn',
|
36 |
+
'class' => 'FLBuilderServiceCampayn',
|
37 |
),
|
38 |
+
'constant-contact' => array(
|
39 |
+
'type' => 'autoresponder',
|
40 |
+
'name' => 'Constant Contact',
|
41 |
+
'class' => 'FLBuilderServiceConstantContact',
|
42 |
),
|
43 |
+
'convertkit' => array(
|
44 |
+
'type' => 'autoresponder',
|
45 |
+
'name' => 'ConvertKit',
|
46 |
+
'class' => 'FLBuilderServiceConvertKit',
|
47 |
),
|
48 |
+
'drip' => array(
|
49 |
+
'type' => 'autoresponder',
|
50 |
+
'name' => 'Drip',
|
51 |
+
'class' => 'FLBuilderServiceDrip',
|
52 |
),
|
53 |
+
'email-address' => array(
|
54 |
+
'type' => 'autoresponder',
|
55 |
+
'name' => 'Email Address',
|
56 |
+
'class' => 'FLBuilderServiceEmailAddress',
|
57 |
),
|
58 |
+
'enormail' => array(
|
59 |
+
'type' => 'autoresponder',
|
60 |
+
'name' => 'Enormail',
|
61 |
+
'class' => 'FLBuilderServiceEnormail',
|
62 |
),
|
63 |
+
'getresponse' => array(
|
64 |
+
'type' => 'autoresponder',
|
65 |
+
'name' => 'GetResponse',
|
66 |
+
'class' => 'FLBuilderServiceGetResponse',
|
67 |
),
|
68 |
'godaddy-email-marketing' => array(
|
69 |
+
'type' => 'autoresponder',
|
70 |
+
'name' => 'GoDaddy Email Marketing',
|
71 |
+
'class' => 'FLBuilderServiceGoDaddyEmailMarketing',
|
72 |
),
|
73 |
+
'hatchbuck' => array(
|
74 |
+
'type' => 'autoresponder',
|
75 |
+
'name' => 'Hatchbuck',
|
76 |
+
'class' => 'FLBuilderServiceHatchbuck',
|
77 |
),
|
78 |
+
'icontact' => array(
|
79 |
+
'type' => 'autoresponder',
|
80 |
+
'name' => 'iContact',
|
81 |
+
'class' => 'FLBuilderServiceIContact',
|
82 |
),
|
83 |
+
'icontact-pro' => array(
|
84 |
+
'type' => 'autoresponder',
|
85 |
+
'name' => 'iContact Pro',
|
86 |
+
'class' => 'FLBuilderServiceIContactPro',
|
87 |
),
|
88 |
+
'infusionsoft' => array(
|
89 |
+
'type' => 'autoresponder',
|
90 |
+
'name' => 'Infusionsoft',
|
91 |
+
'class' => 'FLBuilderServiceInfusionsoft',
|
92 |
),
|
93 |
+
'madmimi' => array(
|
94 |
+
'type' => 'autoresponder',
|
95 |
+
'name' => 'Mad Mimi',
|
96 |
+
'class' => 'FLBuilderServiceMadMimi',
|
97 |
),
|
98 |
+
'mailchimp' => array(
|
99 |
+
'type' => 'autoresponder',
|
100 |
+
'name' => 'MailChimp',
|
101 |
+
'class' => 'FLBuilderServiceMailChimp',
|
102 |
),
|
103 |
+
'mailerlite' => array(
|
104 |
+
'type' => 'autoresponder',
|
105 |
+
'name' => 'MailerLite',
|
106 |
+
'class' => 'FLBuilderServiceMailerLite',
|
107 |
),
|
108 |
+
'mailpoet' => array(
|
109 |
+
'type' => 'autoresponder',
|
110 |
+
'name' => 'MailPoet',
|
111 |
+
'class' => 'FLBuilderServiceMailPoet',
|
112 |
),
|
113 |
+
'mailrelay' => array(
|
114 |
+
'type' => 'autoresponder',
|
115 |
+
'name' => 'Mailrelay',
|
116 |
+
'class' => 'FLBuilderServiceMailrelay',
|
117 |
),
|
118 |
+
'mautic' => array(
|
119 |
+
'type' => 'autoresponder',
|
120 |
+
'name' => 'Mautic',
|
121 |
+
'class' => 'FLBuilderServiceMautic',
|
122 |
),
|
123 |
+
'ontraport' => array(
|
124 |
+
'type' => 'autoresponder',
|
125 |
+
'name' => 'Ontraport',
|
126 |
+
'class' => 'FLBuilderServiceOntraport',
|
127 |
+
'namespace' => true,
|
128 |
),
|
129 |
+
'sendinblue' => array(
|
130 |
+
'type' => 'autoresponder',
|
131 |
+
'name' => 'SendinBlue',
|
132 |
+
'class' => 'FLBuilderServiceSendinBlue',
|
133 |
),
|
134 |
+
'sendy' => array(
|
135 |
+
'type' => 'autoresponder',
|
136 |
+
'name' => 'Sendy',
|
137 |
+
'class' => 'FLBuilderServiceSendy',
|
138 |
+
'namespace' => true,
|
139 |
),
|
140 |
);
|
141 |
|
216 |
$saved_services = FLBuilderModel::get_services();
|
217 |
$post_data = FLBuilderModel::get_post_data();
|
218 |
$response = array(
|
219 |
+
'error' => false,
|
220 |
+
'html' => '',
|
221 |
);
|
222 |
|
223 |
// Validate the service data.
|
271 |
* @return array The response array.
|
272 |
*/
|
273 |
static public function render_settings() {
|
274 |
+
$post_data = FLBuilderModel::get_post_data();
|
275 |
+
$saved_services = FLBuilderModel::get_services();
|
276 |
+
$module = FLBuilderModel::get_module( $post_data['node_id'] );
|
277 |
+
$settings = $module->settings;
|
278 |
+
$service = $post_data['service'];
|
279 |
+
$response = array(
|
280 |
+
'error' => false,
|
281 |
+
'html' => '',
|
282 |
);
|
283 |
|
284 |
// Render the settings to connect a new account.
|
285 |
if ( isset( $post_data['add_new'] ) || ! isset( $saved_services[ $service ] ) ) {
|
286 |
$response['html'] = self::render_connect_settings( $service );
|
287 |
} else {
|
288 |
+
$account = isset( $settings->service_account ) ? $settings->service_account : '';
|
289 |
$response['html'] = self::render_account_settings( $service, $account );
|
290 |
}
|
291 |
|
303 |
ob_start();
|
304 |
|
305 |
FLBuilder::render_settings_field( 'service_account', array(
|
306 |
+
'row_class' => 'fl-builder-service-connect-row',
|
307 |
+
'class' => 'fl-builder-service-connect-input',
|
308 |
+
'type' => 'text',
|
309 |
+
'label' => __( 'Account Name', 'fl-builder' ),
|
310 |
+
'help' => __( 'Used to identify this connection within the accounts list and can be anything you like.', 'fl-builder' ),
|
311 |
+
'preview' => array(
|
312 |
+
'type' => 'none',
|
313 |
),
|
314 |
));
|
315 |
|
317 |
echo $instance->render_connect_settings();
|
318 |
|
319 |
FLBuilder::render_settings_field( 'service_connect_button', array(
|
320 |
+
'row_class' => 'fl-builder-service-connect-row',
|
321 |
+
'class' => 'fl-builder-service-connect-button',
|
322 |
+
'type' => 'button',
|
323 |
+
'label' => __( 'Connect', 'fl-builder' ),
|
324 |
));
|
325 |
|
326 |
return ob_get_clean();
|
337 |
static public function render_account_settings( $service, $active = '' ) {
|
338 |
ob_start();
|
339 |
|
340 |
+
$saved_services = FLBuilderModel::get_services();
|
341 |
+
$settings = new stdClass();
|
342 |
+
$settings->service_account = $active;
|
343 |
+
$options = array(
|
344 |
'' => __( 'Choose...', 'fl-builder' ),
|
345 |
);
|
346 |
|
353 |
|
354 |
// Render the account select.
|
355 |
FLBuilder::render_settings_field( 'service_account', array(
|
356 |
+
'row_class' => 'fl-builder-service-account-row',
|
357 |
+
'class' => 'fl-builder-service-account-select',
|
358 |
+
'type' => 'select',
|
359 |
+
'label' => __( 'Account', 'fl-builder' ),
|
360 |
+
'options' => $options,
|
361 |
+
'preview' => array(
|
362 |
+
'type' => 'none',
|
363 |
),
|
364 |
), $settings);
|
365 |
|
366 |
// Render additional service fields if we have a saved account.
|
367 |
if ( ! empty( $active ) && isset( $saved_services[ $service ][ $active ] ) ) {
|
368 |
|
369 |
+
$post_data = FLBuilderModel::get_post_data();
|
370 |
+
$module = FLBuilderModel::get_module( $post_data['node_id'] );
|
371 |
+
$instance = self::get_service_instance( $service );
|
372 |
+
$response = $instance->render_fields( $active, $module->settings );
|
373 |
|
374 |
if ( ! $response['error'] ) {
|
375 |
echo $response['html'];
|
388 |
* @return array The response array.
|
389 |
*/
|
390 |
static public function render_fields() {
|
391 |
+
$post_data = FLBuilderModel::get_post_data();
|
392 |
+
$module = FLBuilderModel::get_module( $post_data['node_id'] );
|
393 |
+
$instance = self::get_service_instance( $post_data['service'] );
|
394 |
+
$response = $instance->render_fields( $post_data['account'], $module->settings );
|
395 |
|
396 |
return $response;
|
397 |
}
|
classes/class-fl-builder-settings-compat-helper.php
CHANGED
@@ -81,10 +81,10 @@ class FLBuilderSettingsCompatHelper {
|
|
81 |
}
|
82 |
|
83 |
$keys = array(
|
84 |
-
'slide-left'
|
85 |
'slide-right' => 'fade-left',
|
86 |
-
'slide-up'
|
87 |
-
'slide-down'
|
88 |
);
|
89 |
|
90 |
if ( isset( $keys[ $settings->animation ] ) ) {
|
@@ -145,10 +145,10 @@ class FLBuilderSettingsCompatHelper {
|
|
145 |
'style' => isset( $settings->{ "border_type$breakpoint" } ) ? $settings->{ "border_type$breakpoint" } : '',
|
146 |
'color' => isset( $settings->{ "border_color$breakpoint" } ) ? $settings->{ "border_color$breakpoint" } : '',
|
147 |
'width' => array(
|
148 |
-
'top'
|
149 |
-
'right'
|
150 |
'bottom' => $settings->{ "border_bottom$breakpoint" },
|
151 |
-
'left'
|
152 |
),
|
153 |
);
|
154 |
|
81 |
}
|
82 |
|
83 |
$keys = array(
|
84 |
+
'slide-left' => 'fade-right',
|
85 |
'slide-right' => 'fade-left',
|
86 |
+
'slide-up' => 'fade-up',
|
87 |
+
'slide-down' => 'fade-down',
|
88 |
);
|
89 |
|
90 |
if ( isset( $keys[ $settings->animation ] ) ) {
|
145 |
'style' => isset( $settings->{ "border_type$breakpoint" } ) ? $settings->{ "border_type$breakpoint" } : '',
|
146 |
'color' => isset( $settings->{ "border_color$breakpoint" } ) ? $settings->{ "border_color$breakpoint" } : '',
|
147 |
'width' => array(
|
148 |
+
'top' => $settings->{ "border_top$breakpoint" },
|
149 |
+
'right' => $settings->{ "border_right$breakpoint" },
|
150 |
'bottom' => $settings->{ "border_bottom$breakpoint" },
|
151 |
+
'left' => $settings->{ "border_left$breakpoint" },
|
152 |
),
|
153 |
);
|
154 |
|
classes/class-fl-builder-settings-compat.php
CHANGED
@@ -90,7 +90,7 @@ final class FLBuilderSettingsCompat {
|
|
90 |
|
91 |
// Filter with a module specific helper if one is available.
|
92 |
if ( 'module' === $type && isset( FLBuilderModel::$modules[ $settings->type ] ) ) {
|
93 |
-
$module
|
94 |
$settings = $module->filter_settings( $settings, self::$helpers['module'] );
|
95 |
}
|
96 |
|
90 |
|
91 |
// Filter with a module specific helper if one is available.
|
92 |
if ( 'module' === $type && isset( FLBuilderModel::$modules[ $settings->type ] ) ) {
|
93 |
+
$module = FLBuilderModel::$modules[ $settings->type ];
|
94 |
$settings = $module->filter_settings( $settings, self::$helpers['module'] );
|
95 |
}
|
96 |
|
classes/class-fl-builder-settings-presets.php
CHANGED
@@ -8,6 +8,10 @@ class FLBuilderSettingsPresets {
|
|
8 |
add_filter( 'fl_builder_shared_option_sets', 'FLBuilderSettingsPresets::filter_shared_option_sets' );
|
9 |
add_filter( 'fl_builder_register_settings_form', 'FLBuilderSettingsPresets::filter_settings_form' );
|
10 |
|
|
|
|
|
|
|
|
|
11 |
do_action( 'fl_register_presets' );
|
12 |
}
|
13 |
|
@@ -19,15 +23,15 @@ class FLBuilderSettingsPresets {
|
|
19 |
* @return void
|
20 |
*/
|
21 |
static public function register( $type = '', $args = array() ) {
|
22 |
-
$defaults
|
23 |
-
'name'
|
24 |
-
'label'
|
25 |
-
'type'
|
26 |
'settings' => array(), /* the settings to set when preset is selected */
|
27 |
-
'data'
|
28 |
);
|
29 |
-
$args
|
30 |
-
$name
|
31 |
self::$presets[ $type ][ $name ] = $args;
|
32 |
}
|
33 |
|
@@ -53,8 +57,8 @@ class FLBuilderSettingsPresets {
|
|
53 |
if ( $type ) {
|
54 |
$presets = self::$presets[ $type ];
|
55 |
foreach ( $presets as $preset ) {
|
56 |
-
$handle
|
57 |
-
$label
|
58 |
$options[ $handle ] = $label;
|
59 |
}
|
60 |
}
|
@@ -85,10 +89,16 @@ class FLBuilderSettingsPresets {
|
|
85 |
|
86 |
if ( isset( $form['tabs'] ) ) {
|
87 |
foreach ( $form['tabs'] as $i => $tab ) {
|
|
|
|
|
|
|
88 |
|
89 |
foreach ( $tab['sections'] as $j => $section ) {
|
90 |
-
|
|
|
|
|
91 |
|
|
|
92 |
if ( 'preset' === $field['type'] ) {
|
93 |
$form['tabs'][ $i ]['sections'][ $j ]['fields'][ $k ]['preview'] = array(
|
94 |
'type' => 'none',
|
8 |
add_filter( 'fl_builder_shared_option_sets', 'FLBuilderSettingsPresets::filter_shared_option_sets' );
|
9 |
add_filter( 'fl_builder_register_settings_form', 'FLBuilderSettingsPresets::filter_settings_form' );
|
10 |
|
11 |
+
/**
|
12 |
+
* Register presets action.
|
13 |
+
* @see fl_register_presets
|
14 |
+
*/
|
15 |
do_action( 'fl_register_presets' );
|
16 |
}
|
17 |
|
23 |
* @return void
|
24 |
*/
|
25 |
static public function register( $type = '', $args = array() ) {
|
26 |
+
$defaults = array(
|
27 |
+
'name' => '',
|
28 |
+
'label' => __( 'Untitled Preset', 'fl-builder' ),
|
29 |
+
'type' => $type,
|
30 |
'settings' => array(), /* the settings to set when preset is selected */
|
31 |
+
'data' => array(), /* arbitrary data to pass along to the frontend */
|
32 |
);
|
33 |
+
$args = wp_parse_args( $args, $defaults );
|
34 |
+
$name = $args['name'];
|
35 |
self::$presets[ $type ][ $name ] = $args;
|
36 |
}
|
37 |
|
57 |
if ( $type ) {
|
58 |
$presets = self::$presets[ $type ];
|
59 |
foreach ( $presets as $preset ) {
|
60 |
+
$handle = $preset['name'];
|
61 |
+
$label = $preset['label'];
|
62 |
$options[ $handle ] = $label;
|
63 |
}
|
64 |
}
|
89 |
|
90 |
if ( isset( $form['tabs'] ) ) {
|
91 |
foreach ( $form['tabs'] as $i => $tab ) {
|
92 |
+
if ( ! isset( $tab['sections'] ) ) {
|
93 |
+
continue;
|
94 |
+
}
|
95 |
|
96 |
foreach ( $tab['sections'] as $j => $section ) {
|
97 |
+
if ( ! isset( $section['fields'] ) ) {
|
98 |
+
continue;
|
99 |
+
}
|
100 |
|
101 |
+
foreach ( $section['fields'] as $k => $field ) {
|
102 |
if ( 'preset' === $field['type'] ) {
|
103 |
$form['tabs'][ $i ]['sections'][ $j ]['fields'][ $k ]['preview'] = array(
|
104 |
'type' => 'none',
|
classes/class-fl-builder-shortcodes.php
CHANGED
@@ -27,17 +27,17 @@ final class FLBuilderShortcodes {
|
|
27 |
*/
|
28 |
static public function insert_layout( $attrs ) {
|
29 |
$builder_active = in_the_loop() && FLBuilderModel::is_builder_active();
|
30 |
-
$post_type
|
31 |
$site_id = isset( $attrs['site'] ) ? absint( $attrs['site'] ) : null;
|
32 |
-
$args
|
33 |
-
'post_type'
|
34 |
'posts_per_page' => -1,
|
35 |
);
|
36 |
|
37 |
// Build the args array.
|
38 |
if ( isset( $attrs['id'] ) ) {
|
39 |
|
40 |
-
$args['orderby']
|
41 |
$args['ignore_sticky_posts'] = true;
|
42 |
|
43 |
if ( is_numeric( $attrs['id'] ) ) {
|
@@ -47,7 +47,7 @@ final class FLBuilderShortcodes {
|
|
47 |
}
|
48 |
} elseif ( isset( $attrs['slug'] ) ) {
|
49 |
$args['orderby'] = 'name';
|
50 |
-
$args['name']
|
51 |
} else {
|
52 |
return;
|
53 |
}
|
27 |
*/
|
28 |
static public function insert_layout( $attrs ) {
|
29 |
$builder_active = in_the_loop() && FLBuilderModel::is_builder_active();
|
30 |
+
$post_type = isset( $attrs['type'] ) ? $attrs['type'] : get_post_types();
|
31 |
$site_id = isset( $attrs['site'] ) ? absint( $attrs['site'] ) : null;
|
32 |
+
$args = array(
|
33 |
+
'post_type' => $post_type,
|
34 |
'posts_per_page' => -1,
|
35 |
);
|
36 |
|
37 |
// Build the args array.
|
38 |
if ( isset( $attrs['id'] ) ) {
|
39 |
|
40 |
+
$args['orderby'] = 'post__in';
|
41 |
$args['ignore_sticky_posts'] = true;
|
42 |
|
43 |
if ( is_numeric( $attrs['id'] ) ) {
|
47 |
}
|
48 |
} elseif ( isset( $attrs['slug'] ) ) {
|
49 |
$args['orderby'] = 'name';
|
50 |
+
$args['name'] = $attrs['slug'];
|
51 |
} else {
|
52 |
return;
|
53 |
}
|
classes/class-fl-builder-ui-content-panel.php
CHANGED
@@ -27,10 +27,10 @@ class FLBuilderUIContentPanel {
|
|
27 |
|
28 |
$modules_data = self::get_modules_tab_data();
|
29 |
if ( $modules_data['should_display'] ) {
|
30 |
-
$modules_tab
|
31 |
-
'handle'
|
32 |
-
'name'
|
33 |
-
'views'
|
34 |
'isSearchEnabled' => true,
|
35 |
);
|
36 |
$data['tabs']['modules'] = $modules_tab;
|
@@ -38,20 +38,20 @@ class FLBuilderUIContentPanel {
|
|
38 |
|
39 |
$rows_data = self::get_rows_tab_data();
|
40 |
if ( $rows_data['should_display'] ) {
|
41 |
-
$rows_tab
|
42 |
'handle' => 'rows',
|
43 |
-
'name'
|
44 |
-
'views'
|
45 |
);
|
46 |
$data['tabs']['rows'] = $rows_tab;
|
47 |
}
|
48 |
|
49 |
$templates_data = self::get_templates_tab_data();
|
50 |
if ( $templates_data['should_display'] ) {
|
51 |
-
$templates_tab
|
52 |
'handle' => 'templates',
|
53 |
-
'name'
|
54 |
-
'views'
|
55 |
);
|
56 |
$data['tabs']['templates'] = $templates_tab;
|
57 |
}
|
@@ -77,17 +77,17 @@ class FLBuilderUIContentPanel {
|
|
77 |
|
78 |
$data = array(
|
79 |
'should_display' => ! FLBuilderModel::is_post_user_template( 'module' ),
|
80 |
-
'views'
|
81 |
);
|
82 |
|
83 |
// Standard Modules View
|
84 |
$data['views'][] = array(
|
85 |
-
'handle'
|
86 |
-
'name'
|
87 |
-
'query'
|
88 |
-
'kind'
|
89 |
'categorized' => true,
|
90 |
-
'group'
|
91 |
),
|
92 |
'orderedSectionNames' => array_keys( FLBuilderModel::get_module_categories() ),
|
93 |
);
|
@@ -102,14 +102,14 @@ class FLBuilderUIContentPanel {
|
|
102 |
|
103 |
foreach ( $groups as $slug => $name ) {
|
104 |
$data['views'][] = array(
|
105 |
-
'handle'
|
106 |
-
'name'
|
107 |
-
'query'
|
108 |
-
'kind'
|
109 |
-
'content'
|
110 |
-
'type'
|
111 |
'categorized' => true,
|
112 |
-
'group'
|
113 |
),
|
114 |
'templateName' => 'fl-content-panel-modules-view',
|
115 |
);
|
@@ -130,22 +130,22 @@ class FLBuilderUIContentPanel {
|
|
130 |
|
131 |
$data = array(
|
132 |
'should_display' => true, /* rows tab shows even if row template */
|
133 |
-
'views'
|
134 |
);
|
135 |
|
136 |
// Columns View
|
137 |
$data['views'][] = array(
|
138 |
-
'handle'
|
139 |
-
'name'
|
140 |
-
'query'
|
141 |
'kind' => 'colGroup',
|
142 |
),
|
143 |
'templateName' => 'fl-content-panel-col-groups-view',
|
144 |
);
|
145 |
|
146 |
// Row Templates View
|
147 |
-
$templates
|
148 |
-
$is_row_template
|
149 |
$is_column_template = FLBuilderModel::is_post_user_template( 'column' );
|
150 |
|
151 |
if ( ! $is_row_template && ! $is_column_template && isset( $templates['groups'] ) && ! empty( $templates['groups'] ) ) {
|
@@ -157,14 +157,14 @@ class FLBuilderUIContentPanel {
|
|
157 |
foreach ( $templates['groups'] as $slug => $group ) {
|
158 |
|
159 |
$data['views'][] = array(
|
160 |
-
'handle'
|
161 |
-
'name'
|
162 |
'hasChildren' => count( $group['categories'] ) > 1,
|
163 |
-
'query'
|
164 |
-
'kind'
|
165 |
-
'type'
|
166 |
-
'group'
|
167 |
-
'content'
|
168 |
'categorized' => true,
|
169 |
),
|
170 |
);
|
@@ -175,16 +175,16 @@ class FLBuilderUIContentPanel {
|
|
175 |
|
176 |
foreach ( $group['categories'] as $cat_slug => $category ) {
|
177 |
$data['views'][] = array(
|
178 |
-
'handle'
|
179 |
-
'name'
|
180 |
'isSubItem' => true,
|
181 |
-
'parent'
|
182 |
-
'query'
|
183 |
-
'kind'
|
184 |
-
'type'
|
185 |
-
'content'
|
186 |
-
'group'
|
187 |
-
'category'
|
188 |
'categorized' => true,
|
189 |
),
|
190 |
);
|
@@ -203,13 +203,13 @@ class FLBuilderUIContentPanel {
|
|
203 |
* @return array
|
204 |
*/
|
205 |
private static function get_templates_tab_data() {
|
206 |
-
$enabled
|
207 |
$is_module_template = FLBuilderModel::is_post_user_template( 'module' );
|
208 |
$is_column_template = FLBuilderModel::is_post_user_template( 'column' );
|
209 |
-
$is_row_template
|
210 |
-
$data
|
211 |
'should_display' => ( ! $is_module_template && ! $is_column_template && ! $is_row_template && 'disabled' !== $enabled ),
|
212 |
-
'views'
|
213 |
);
|
214 |
|
215 |
$templates = FLBuilderModel::get_template_selector_data();
|
@@ -218,8 +218,8 @@ class FLBuilderUIContentPanel {
|
|
218 |
|
219 |
if ( true === FL_BUILDER_LITE ) {
|
220 |
$data['views'][] = array(
|
221 |
-
'handle'
|
222 |
-
'name'
|
223 |
'templateName' => 'fl-content-lite-templates-upgrade-view',
|
224 |
);
|
225 |
}
|
@@ -230,14 +230,14 @@ class FLBuilderUIContentPanel {
|
|
230 |
foreach ( $templates['groups'] as $slug => $group ) {
|
231 |
|
232 |
$data['views'][] = array(
|
233 |
-
'handle'
|
234 |
-
'name'
|
235 |
'hasChildren' => count( $group['categories'] ) > 1,
|
236 |
-
'query'
|
237 |
-
'kind'
|
238 |
-
'type'
|
239 |
-
'content'
|
240 |
-
'group'
|
241 |
'categorized' => true,
|
242 |
),
|
243 |
);
|
@@ -248,16 +248,16 @@ class FLBuilderUIContentPanel {
|
|
248 |
|
249 |
foreach ( $group['categories'] as $cat_slug => $category ) {
|
250 |
$data['views'][] = array(
|
251 |
-
'handle'
|
252 |
-
'name'
|
253 |
'isSubItem' => true,
|
254 |
-
'parent'
|
255 |
-
'query'
|
256 |
-
'kind'
|
257 |
-
'type'
|
258 |
-
'content'
|
259 |
-
'group'
|
260 |
-
'category'
|
261 |
'categorized' => true,
|
262 |
),
|
263 |
);
|
@@ -279,7 +279,7 @@ class FLBuilderUIContentPanel {
|
|
279 |
$data = array(
|
280 |
|
281 |
/* Get all modules */
|
282 |
-
'module'
|
283 |
|
284 |
/* Get all column groups */
|
285 |
'colGroup' => FLBuilderModel::get_column_groups(),
|
@@ -287,21 +287,21 @@ class FLBuilderUIContentPanel {
|
|
287 |
'template' => array(),
|
288 |
);
|
289 |
|
290 |
-
$static_modules
|
291 |
$module_templates = $static_modules['templates'];
|
292 |
|
293 |
foreach ( $module_templates as $template ) {
|
294 |
$data['template'][] = $template;
|
295 |
}
|
296 |
|
297 |
-
$static_columns
|
298 |
$column_templates = $static_columns['templates'];
|
299 |
|
300 |
foreach ( $column_templates as $template ) {
|
301 |
$data['template'][] = $template;
|
302 |
}
|
303 |
|
304 |
-
$static_rows
|
305 |
$row_templates = $static_rows['templates'];
|
306 |
|
307 |
foreach ( $row_templates as $template ) {
|
27 |
|
28 |
$modules_data = self::get_modules_tab_data();
|
29 |
if ( $modules_data['should_display'] ) {
|
30 |
+
$modules_tab = array(
|
31 |
+
'handle' => 'modules',
|
32 |
+
'name' => __( 'Modules', 'fl-builder' ),
|
33 |
+
'views' => $modules_data['views'],
|
34 |
'isSearchEnabled' => true,
|
35 |
);
|
36 |
$data['tabs']['modules'] = $modules_tab;
|
38 |
|
39 |
$rows_data = self::get_rows_tab_data();
|
40 |
if ( $rows_data['should_display'] ) {
|
41 |
+
$rows_tab = array(
|
42 |
'handle' => 'rows',
|
43 |
+
'name' => __( 'Rows', 'fl-builder' ),
|
44 |
+
'views' => $rows_data['views'],
|
45 |
);
|
46 |
$data['tabs']['rows'] = $rows_tab;
|
47 |
}
|
48 |
|
49 |
$templates_data = self::get_templates_tab_data();
|
50 |
if ( $templates_data['should_display'] ) {
|
51 |
+
$templates_tab = array(
|
52 |
'handle' => 'templates',
|
53 |
+
'name' => __( 'Templates', 'fl-builder' ),
|
54 |
+
'views' => $templates_data['views'],
|
55 |
);
|
56 |
$data['tabs']['templates'] = $templates_tab;
|
57 |
}
|
77 |
|
78 |
$data = array(
|
79 |
'should_display' => ! FLBuilderModel::is_post_user_template( 'module' ),
|
80 |
+
'views' => array(),
|
81 |
);
|
82 |
|
83 |
// Standard Modules View
|
84 |
$data['views'][] = array(
|
85 |
+
'handle' => 'standard',
|
86 |
+
'name' => __( 'Standard Modules', 'fl-builder' ),
|
87 |
+
'query' => array(
|
88 |
+
'kind' => 'module',
|
89 |
'categorized' => true,
|
90 |
+
'group' => 'standard',
|
91 |
),
|
92 |
'orderedSectionNames' => array_keys( FLBuilderModel::get_module_categories() ),
|
93 |
);
|
102 |
|
103 |
foreach ( $groups as $slug => $name ) {
|
104 |
$data['views'][] = array(
|
105 |
+
'handle' => $slug,
|
106 |
+
'name' => $name,
|
107 |
+
'query' => array(
|
108 |
+
'kind' => array( 'module', 'template' ),
|
109 |
+
'content' => 'module',
|
110 |
+
'type' => 'core',
|
111 |
'categorized' => true,
|
112 |
+
'group' => $slug,
|
113 |
),
|
114 |
'templateName' => 'fl-content-panel-modules-view',
|
115 |
);
|
130 |
|
131 |
$data = array(
|
132 |
'should_display' => true, /* rows tab shows even if row template */
|
133 |
+
'views' => array(),
|
134 |
);
|
135 |
|
136 |
// Columns View
|
137 |
$data['views'][] = array(
|
138 |
+
'handle' => 'columns',
|
139 |
+
'name' => __( 'Columns', 'fl-builder' ),
|
140 |
+
'query' => array(
|
141 |
'kind' => 'colGroup',
|
142 |
),
|
143 |
'templateName' => 'fl-content-panel-col-groups-view',
|
144 |
);
|
145 |
|
146 |
// Row Templates View
|
147 |
+
$templates = FLBuilderModel::get_row_templates_data();
|
148 |
+
$is_row_template = FLBuilderModel::is_post_user_template( 'row' );
|
149 |
$is_column_template = FLBuilderModel::is_post_user_template( 'column' );
|
150 |
|
151 |
if ( ! $is_row_template && ! $is_column_template && isset( $templates['groups'] ) && ! empty( $templates['groups'] ) ) {
|
157 |
foreach ( $templates['groups'] as $slug => $group ) {
|
158 |
|
159 |
$data['views'][] = array(
|
160 |
+
'handle' => $slug,
|
161 |
+
'name' => $group['name'],
|
162 |
'hasChildren' => count( $group['categories'] ) > 1,
|
163 |
+
'query' => array(
|
164 |
+
'kind' => 'template',
|
165 |
+
'type' => 'core',
|
166 |
+
'group' => $slug,
|
167 |
+
'content' => 'row',
|
168 |
'categorized' => true,
|
169 |
),
|
170 |
);
|
175 |
|
176 |
foreach ( $group['categories'] as $cat_slug => $category ) {
|
177 |
$data['views'][] = array(
|
178 |
+
'handle' => $cat_slug,
|
179 |
+
'name' => $category['name'],
|
180 |
'isSubItem' => true,
|
181 |
+
'parent' => $slug,
|
182 |
+
'query' => array(
|
183 |
+
'kind' => 'template',
|
184 |
+
'type' => 'core',
|
185 |
+
'content' => 'row',
|
186 |
+
'group' => $slug,
|
187 |
+
'category' => $cat_slug,
|
188 |
'categorized' => true,
|
189 |
),
|
190 |
);
|
203 |
* @return array
|
204 |
*/
|
205 |
private static function get_templates_tab_data() {
|
206 |
+
$enabled = FLBuilderModel::get_enabled_templates();
|
207 |
$is_module_template = FLBuilderModel::is_post_user_template( 'module' );
|
208 |
$is_column_template = FLBuilderModel::is_post_user_template( 'column' );
|
209 |
+
$is_row_template = FLBuilderModel::is_post_user_template( 'row' );
|
210 |
+
$data = array(
|
211 |
'should_display' => ( ! $is_module_template && ! $is_column_template && ! $is_row_template && 'disabled' !== $enabled ),
|
212 |
+
'views' => array(),
|
213 |
);
|
214 |
|
215 |
$templates = FLBuilderModel::get_template_selector_data();
|
218 |
|
219 |
if ( true === FL_BUILDER_LITE ) {
|
220 |
$data['views'][] = array(
|
221 |
+
'handle' => 'standard',
|
222 |
+
'name' => __( 'Upgrade', 'fl-builder' ),
|
223 |
'templateName' => 'fl-content-lite-templates-upgrade-view',
|
224 |
);
|
225 |
}
|
230 |
foreach ( $templates['groups'] as $slug => $group ) {
|
231 |
|
232 |
$data['views'][] = array(
|
233 |
+
'handle' => $slug,
|
234 |
+
'name' => $group['name'],
|
235 |
'hasChildren' => count( $group['categories'] ) > 1,
|
236 |
+
'query' => array(
|
237 |
+
'kind' => 'template',
|
238 |
+
'type' => 'core',
|
239 |
+
'content' => 'layout',
|
240 |
+
'group' => $slug,
|
241 |
'categorized' => true,
|
242 |
),
|
243 |
);
|
248 |
|
249 |
foreach ( $group['categories'] as $cat_slug => $category ) {
|
250 |
$data['views'][] = array(
|
251 |
+
'handle' => $cat_slug,
|
252 |
+
'name' => $category['name'],
|
253 |
'isSubItem' => true,
|
254 |
+
'parent' => $slug,
|
255 |
+
'query' => array(
|
256 |
+
'kind' => 'template',
|
257 |
+
'type' => 'core',
|
258 |
+
'content' => 'layout',
|
259 |
+
'group' => $slug,
|
260 |
+
'category' => $cat_slug,
|
261 |
'categorized' => true,
|
262 |
),
|
263 |
);
|
279 |
$data = array(
|
280 |
|
281 |
/* Get all modules */
|
282 |
+
'module' => FLBuilderModel::get_uncategorized_modules(),
|
283 |
|
284 |
/* Get all column groups */
|
285 |
'colGroup' => FLBuilderModel::get_column_groups(),
|
287 |
'template' => array(),
|
288 |
);
|
289 |
|
290 |
+
$static_modules = FLBuilderModel::get_module_templates_data();
|
291 |
$module_templates = $static_modules['templates'];
|
292 |
|
293 |
foreach ( $module_templates as $template ) {
|
294 |
$data['template'][] = $template;
|
295 |
}
|
296 |
|
297 |
+
$static_columns = FLBuilderModel::get_column_templates_data();
|
298 |
$column_templates = $static_columns['templates'];
|
299 |
|
300 |
foreach ( $column_templates as $template ) {
|
301 |
$data['template'][] = $template;
|
302 |
}
|
303 |
|
304 |
+
$static_rows = FLBuilderModel::get_row_templates_data();
|
305 |
$row_templates = $static_rows['templates'];
|
306 |
|
307 |
foreach ( $row_templates as $template ) {
|
classes/class-fl-builder-ui-settings-forms.php
CHANGED
@@ -66,7 +66,7 @@ class FLBuilderUISettingsForms {
|
|
66 |
wp_raise_memory_limit( 'bb-plugin' );
|
67 |
}
|
68 |
|
69 |
-
$type
|
70 |
$handler = 'FLBuilderUISettingsForms::compress_settings_config';
|
71 |
|
72 |
if ( 'modules' === $type ) {
|
@@ -128,19 +128,19 @@ class FLBuilderUISettingsForms {
|
|
128 |
*/
|
129 |
static public function get_js_config() {
|
130 |
return array(
|
131 |
-
'forms'
|
132 |
-
'editables'
|
133 |
-
'nodes'
|
134 |
-
'attachments'
|
135 |
-
'settings'
|
136 |
-
'global'
|
137 |
-
'layout'
|
138 |
),
|
139 |
-
'defaults'
|
140 |
-
'row'
|
141 |
-
'column'
|
142 |
-
'modules'
|
143 |
-
'forms'
|
144 |
),
|
145 |
);
|
146 |
}
|
@@ -165,8 +165,8 @@ class FLBuilderUISettingsForms {
|
|
165 |
*/
|
166 |
static public function get_node_js_config() {
|
167 |
return array(
|
168 |
-
'nodes'
|
169 |
-
'attachments'
|
170 |
);
|
171 |
}
|
172 |
|
@@ -219,8 +219,8 @@ class FLBuilderUISettingsForms {
|
|
219 |
|
220 |
if ( isset( $section['file'] ) && FL_BUILDER_DIR . 'includes/service-settings.php' === $section['file'] ) {
|
221 |
$section['template'] = array(
|
222 |
-
'id'
|
223 |
-
'file'
|
224 |
);
|
225 |
unset( $section['file'] );
|
226 |
}
|
@@ -299,9 +299,9 @@ class FLBuilderUISettingsForms {
|
|
299 |
$js = '';
|
300 |
|
301 |
$css_file_path = apply_filters( "fl_builder_module_settings_css_file_path_{$module->slug}", "{$module->dir}css/settings.css", $module );
|
302 |
-
$css_file_uri
|
303 |
-
$js_file_path
|
304 |
-
$js_file_uri
|
305 |
|
306 |
if ( file_exists( $css_file_path ) ) {
|
307 |
$css .= '<link class="fl-builder-settings-css" rel="stylesheet" href="' . $css_file_uri . '" />';
|
@@ -314,8 +314,8 @@ class FLBuilderUISettingsForms {
|
|
314 |
'title' => $module->name,
|
315 |
'tabs' => $module->form,
|
316 |
'assets' => array(
|
317 |
-
'css'
|
318 |
-
'js'
|
319 |
),
|
320 |
);
|
321 |
}
|
@@ -363,10 +363,10 @@ class FLBuilderUISettingsForms {
|
|
363 |
|
364 |
$editables[ $module->slug ][ $key ] = array(
|
365 |
'selector' => $field['preview']['selector'],
|
366 |
-
'field'
|
367 |
-
'name'
|
368 |
-
'type'
|
369 |
-
'toolbar'
|
370 |
),
|
371 |
);
|
372 |
}
|
@@ -487,16 +487,16 @@ class FLBuilderUISettingsForms {
|
|
487 |
return false;
|
488 |
}
|
489 |
|
490 |
-
$post
|
491 |
-
$filename
|
492 |
-
$base_url
|
493 |
-
$meta
|
494 |
-
$sizes
|
495 |
$possible_sizes = apply_filters( 'image_size_names_choose', array(
|
496 |
-
'thumbnail'
|
497 |
-
'medium'
|
498 |
-
'large'
|
499 |
-
'full'
|
500 |
) );
|
501 |
|
502 |
if ( isset( $meta['sizes'] ) ) {
|
@@ -523,11 +523,11 @@ class FLBuilderUISettingsForms {
|
|
523 |
}
|
524 |
|
525 |
return array(
|
526 |
-
'id'
|
527 |
-
'url'
|
528 |
-
'filename'
|
529 |
-
'caption'
|
530 |
-
'sizes'
|
531 |
);
|
532 |
}
|
533 |
|
@@ -581,12 +581,12 @@ class FLBuilderUISettingsForms {
|
|
581 |
* @return array
|
582 |
*/
|
583 |
static public function pre_render_legacy_module_settings( $type, $settings ) {
|
584 |
-
$data
|
585 |
-
'tabs'
|
586 |
-
'sections'
|
587 |
-
'fields'
|
588 |
-
'settings'
|
589 |
-
'node_id'
|
590 |
);
|
591 |
$custom = apply_filters( 'fl_builder_custom_fields', array() );
|
592 |
|
@@ -603,7 +603,7 @@ class FLBuilderUISettingsForms {
|
|
603 |
|
604 |
if ( isset( $section['file'] ) ) {
|
605 |
$data['sections'][] = array(
|
606 |
-
'tab'
|
607 |
'section' => $section_id,
|
608 |
);
|
609 |
}
|
@@ -613,7 +613,7 @@ class FLBuilderUISettingsForms {
|
|
613 |
|
614 |
foreach ( $section['fields'] as $field_id => $field ) {
|
615 |
|
616 |
-
$is_core
|
617 |
$is_custom = isset( $custom[ $field['type'] ] );
|
618 |
|
619 |
if ( ! $is_core && ! $is_custom ) {
|
@@ -638,11 +638,11 @@ class FLBuilderUISettingsForms {
|
|
638 |
*/
|
639 |
static public function render_legacy_settings( $data, $form, $group, $lightbox ) {
|
640 |
$response = array(
|
641 |
-
'lightbox'
|
642 |
-
'tabs'
|
643 |
-
'sections'
|
644 |
-
'fields'
|
645 |
-
'extras'
|
646 |
);
|
647 |
|
648 |
// Get the form tabs.
|
@@ -658,7 +658,7 @@ class FLBuilderUISettingsForms {
|
|
658 |
// Get the settings.
|
659 |
if ( $data['node_id'] ) {
|
660 |
$layout_data = FLBuilderModel::get_layout_data();
|
661 |
-
$settings
|
662 |
} else {
|
663 |
$settings = isset( $data['settings'] ) ? (object) $data['settings'] : new stdClass();
|
664 |
}
|
@@ -682,12 +682,12 @@ class FLBuilderUISettingsForms {
|
|
682 |
continue;
|
683 |
}
|
684 |
|
685 |
-
$value
|
686 |
$is_multiple = isset( $field['multiple'] ) ? $field['multiple'] : false;
|
687 |
|
688 |
if ( $is_multiple && is_array( $value ) ) {
|
689 |
$before = array();
|
690 |
-
$after
|
691 |
foreach ( $value as $repeater_item_value ) {
|
692 |
ob_start();
|
693 |
do_action( 'fl_builder_before_control', $name, $repeater_item_value, $field, $settings );
|
@@ -714,8 +714,8 @@ class FLBuilderUISettingsForms {
|
|
714 |
if ( ! empty( $before ) || ! empty( $after ) ) {
|
715 |
$response['extras'][ $name ] = array(
|
716 |
'multiple' => $is_multiple,
|
717 |
-
'before'
|
718 |
-
'after'
|
719 |
);
|
720 |
}
|
721 |
}
|
@@ -768,16 +768,19 @@ class FLBuilderUISettingsForms {
|
|
768 |
*/
|
769 |
static public function render_settings( $form = array(), $settings ) {
|
770 |
$defaults = array(
|
771 |
-
'class'
|
772 |
-
'attrs'
|
773 |
-
'title'
|
774 |
-
'badges'
|
775 |
-
'tabs'
|
776 |
-
'buttons'
|
777 |
-
'settings'
|
778 |
);
|
779 |
|
780 |
-
|
|
|
|
|
|
|
781 |
$form = apply_filters( 'fl_builder_settings_form_config', array_merge( $defaults, $form ) );
|
782 |
|
783 |
// Setup the class var to be safe in JS.
|
@@ -825,8 +828,8 @@ class FLBuilderUISettingsForms {
|
|
825 |
}
|
826 |
|
827 |
return self::render_settings(array(
|
828 |
-
'title'
|
829 |
-
'tabs'
|
830 |
), $settings);
|
831 |
}
|
832 |
|
@@ -850,25 +853,25 @@ class FLBuilderUISettingsForms {
|
|
850 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
851 |
* @since 2.0
|
852 |
*/
|
853 |
-
$field
|
854 |
|
855 |
if ( ! isset( $field['type'] ) ) {
|
856 |
return;
|
857 |
}
|
858 |
|
859 |
-
$i
|
860 |
-
$is_multiple
|
861 |
-
$supports_multiple
|
862 |
-
$settings
|
863 |
-
$preview
|
864 |
'type' => 'refresh',
|
865 |
) );
|
866 |
-
$row_class
|
867 |
-
$responsive
|
868 |
-
$responsive_fields
|
869 |
-
$root_name
|
870 |
-
$global_settings
|
871 |
-
$value
|
872 |
|
873 |
// Use a default value if not set in the settings.
|
874 |
if ( ! isset( $settings->$name ) && isset( $field['default'] ) ) {
|
@@ -890,9 +893,9 @@ class FLBuilderUISettingsForms {
|
|
890 |
// Render old calls to *custom* fields with PHP.
|
891 |
if ( $is_multiple && $supports_multiple ) {
|
892 |
|
893 |
-
$values
|
894 |
-
$arr_name
|
895 |
-
$name
|
896 |
|
897 |
echo '<tbody id="fl-field-' . $root_name . '" class="fl-field fl-builder-field-multiples" data-type="form" data-preview=\'' . $preview . '\'>';
|
898 |
|
66 |
wp_raise_memory_limit( 'bb-plugin' );
|
67 |
}
|
68 |
|
69 |
+
$type = sanitize_key( $_GET['fl_builder_load_settings_config'] );
|
70 |
$handler = 'FLBuilderUISettingsForms::compress_settings_config';
|
71 |
|
72 |
if ( 'modules' === $type ) {
|
128 |
*/
|
129 |
static public function get_js_config() {
|
130 |
return array(
|
131 |
+
'forms' => self::prep_forms_for_js_config( FLBuilderModel::$settings_forms ),
|
132 |
+
'editables' => self::prep_editables_for_js_config(),
|
133 |
+
'nodes' => self::prep_node_settings_for_js_config(),
|
134 |
+
'attachments' => self::prep_attachments_for_js_config(),
|
135 |
+
'settings' => array(
|
136 |
+
'global' => FLBuilderModel::get_global_settings(),
|
137 |
+
'layout' => FLBuilderModel::get_layout_settings(),
|
138 |
),
|
139 |
+
'defaults' => array(
|
140 |
+
'row' => FLBuilderModel::get_row_defaults(),
|
141 |
+
'column' => FLBuilderModel::get_col_defaults(),
|
142 |
+
'modules' => FLBuilderModel::get_module_defaults(),
|
143 |
+
'forms' => self::prep_form_defaults_for_js_config( FLBuilderModel::$settings_forms ),
|
144 |
),
|
145 |
);
|
146 |
}
|
165 |
*/
|
166 |
static public function get_node_js_config() {
|
167 |
return array(
|
168 |
+
'nodes' => self::prep_node_settings_for_js_config(),
|
169 |
+
'attachments' => self::prep_attachments_for_js_config(),
|
170 |
);
|
171 |
}
|
172 |
|
219 |
|
220 |
if ( isset( $section['file'] ) && FL_BUILDER_DIR . 'includes/service-settings.php' === $section['file'] ) {
|
221 |
$section['template'] = array(
|
222 |
+
'id' => 'fl-builder-service-settings',
|
223 |
+
'file' => FL_BUILDER_DIR . 'includes/ui-service-settings.php',
|
224 |
);
|
225 |
unset( $section['file'] );
|
226 |
}
|
299 |
$js = '';
|
300 |
|
301 |
$css_file_path = apply_filters( "fl_builder_module_settings_css_file_path_{$module->slug}", "{$module->dir}css/settings.css", $module );
|
302 |
+
$css_file_uri = apply_filters( "fl_builder_module_settings_css_file_uri_{$module->slug}", "{$module->url}css/settings.css", $module );
|
303 |
+
$js_file_path = apply_filters( "fl_builder_module_settings_js_file_path_{$module->slug}", "{$module->dir}js/settings.js", $module );
|
304 |
+
$js_file_uri = apply_filters( "fl_builder_module_settings_js_file_uri_{$module->slug}", "{$module->url}js/settings.js", $module );
|
305 |
|
306 |
if ( file_exists( $css_file_path ) ) {
|
307 |
$css .= '<link class="fl-builder-settings-css" rel="stylesheet" href="' . $css_file_uri . '" />';
|
314 |
'title' => $module->name,
|
315 |
'tabs' => $module->form,
|
316 |
'assets' => array(
|
317 |
+
'css' => $css,
|
318 |
+
'js' => $js,
|
319 |
),
|
320 |
);
|
321 |
}
|
363 |
|
364 |
$editables[ $module->slug ][ $key ] = array(
|
365 |
'selector' => $field['preview']['selector'],
|
366 |
+
'field' => array(
|
367 |
+
'name' => $key,
|
368 |
+
'type' => $field['type'],
|
369 |
+
'toolbar' => isset( $field['inline_editor'] ) ? $field['inline_editor'] : null,
|
370 |
),
|
371 |
);
|
372 |
}
|
487 |
return false;
|
488 |
}
|
489 |
|
490 |
+
$post = get_post( $id );
|
491 |
+
$filename = wp_basename( $url );
|
492 |
+
$base_url = str_replace( $filename, '', $url );
|
493 |
+
$meta = wp_get_attachment_metadata( $id );
|
494 |
+
$sizes = array();
|
495 |
$possible_sizes = apply_filters( 'image_size_names_choose', array(
|
496 |
+
'thumbnail' => __( 'Thumbnail' ),
|
497 |
+
'medium' => __( 'Medium' ),
|
498 |
+
'large' => __( 'Large' ),
|
499 |
+
'full' => __( 'Full Size' ),
|
500 |
) );
|
501 |
|
502 |
if ( isset( $meta['sizes'] ) ) {
|
523 |
}
|
524 |
|
525 |
return array(
|
526 |
+
'id' => $id,
|
527 |
+
'url' => $url,
|
528 |
+
'filename' => $filename,
|
529 |
+
'caption' => $post->post_excerpt,
|
530 |
+
'sizes' => apply_filters( 'fl_builder_photo_sizes_select', $sizes ),
|
531 |
);
|
532 |
}
|
533 |
|
581 |
* @return array
|
582 |
*/
|
583 |
static public function pre_render_legacy_module_settings( $type, $settings ) {
|
584 |
+
$data = array(
|
585 |
+
'tabs' => array(),
|
586 |
+
'sections' => array(),
|
587 |
+
'fields' => array(),
|
588 |
+
'settings' => $settings,
|
589 |
+
'node_id' => null,
|
590 |
);
|
591 |
$custom = apply_filters( 'fl_builder_custom_fields', array() );
|
592 |
|
603 |
|
604 |
if ( isset( $section['file'] ) ) {
|
605 |
$data['sections'][] = array(
|
606 |
+
'tab' => $tab_id,
|
607 |
'section' => $section_id,
|
608 |
);
|
609 |
}
|
613 |
|
614 |
foreach ( $section['fields'] as $field_id => $field ) {
|
615 |
|
616 |
+
$is_core = file_exists( FL_BUILDER_DIR . 'includes/ui-field-' . $field['type'] . '.php' );
|
617 |
$is_custom = isset( $custom[ $field['type'] ] );
|
618 |
|
619 |
if ( ! $is_core && ! $is_custom ) {
|
638 |
*/
|
639 |
static public function render_legacy_settings( $data, $form, $group, $lightbox ) {
|
640 |
$response = array(
|
641 |
+
'lightbox' => $lightbox,
|
642 |
+
'tabs' => array(),
|
643 |
+
'sections' => array(),
|
644 |
+
'fields' => array(),
|
645 |
+
'extras' => array(),
|
646 |
);
|
647 |
|
648 |
// Get the form tabs.
|
658 |
// Get the settings.
|
659 |
if ( $data['node_id'] ) {
|
660 |
$layout_data = FLBuilderModel::get_layout_data();
|
661 |
+
$settings = $layout_data[ $data['node_id'] ]->settings;
|
662 |
} else {
|
663 |
$settings = isset( $data['settings'] ) ? (object) $data['settings'] : new stdClass();
|
664 |
}
|
682 |
continue;
|
683 |
}
|
684 |
|
685 |
+
$value = isset( $settings->$name ) ? $settings->$name : '';
|
686 |
$is_multiple = isset( $field['multiple'] ) ? $field['multiple'] : false;
|
687 |
|
688 |
if ( $is_multiple && is_array( $value ) ) {
|
689 |
$before = array();
|
690 |
+
$after = array();
|
691 |
foreach ( $value as $repeater_item_value ) {
|
692 |
ob_start();
|
693 |
do_action( 'fl_builder_before_control', $name, $repeater_item_value, $field, $settings );
|
714 |
if ( ! empty( $before ) || ! empty( $after ) ) {
|
715 |
$response['extras'][ $name ] = array(
|
716 |
'multiple' => $is_multiple,
|
717 |
+
'before' => $before,
|
718 |
+
'after' => $after,
|
719 |
);
|
720 |
}
|
721 |
}
|
768 |
*/
|
769 |
static public function render_settings( $form = array(), $settings ) {
|
770 |
$defaults = array(
|
771 |
+
'class' => '',
|
772 |
+
'attrs' => '',
|
773 |
+
'title' => '',
|
774 |
+
'badges' => array(),
|
775 |
+
'tabs' => array(),
|
776 |
+
'buttons' => array(),
|
777 |
+
'settings' => $settings,
|
778 |
);
|
779 |
|
780 |
+
/**
|
781 |
+
* Legacy filter for the config.
|
782 |
+
* @see fl_builder_settings_form_config
|
783 |
+
*/
|
784 |
$form = apply_filters( 'fl_builder_settings_form_config', array_merge( $defaults, $form ) );
|
785 |
|
786 |
// Setup the class var to be safe in JS.
|
828 |
}
|
829 |
|
830 |
return self::render_settings(array(
|
831 |
+
'title' => $form['title'],
|
832 |
+
'tabs' => $form['tabs'],
|
833 |
), $settings);
|
834 |
}
|
835 |
|
853 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
854 |
* @since 2.0
|
855 |
*/
|
856 |
+
$field = apply_filters( 'fl_builder_render_settings_field', $field, $name, $settings ); // Allow field settings filtering first
|
857 |
|
858 |
if ( ! isset( $field['type'] ) ) {
|
859 |
return;
|
860 |
}
|
861 |
|
862 |
+
$i = null;
|
863 |
+
$is_multiple = isset( $field['multiple'] ) && true === (bool) $field['multiple'];
|
864 |
+
$supports_multiple = 'editor' != $field['type'] && 'service' != $field['type'];
|
865 |
+
$settings = ! $settings ? new stdClass() : $settings;
|
866 |
+
$preview = isset( $field['preview'] ) ? json_encode( $field['preview'] ) : json_encode( array(
|
867 |
'type' => 'refresh',
|
868 |
) );
|
869 |
+
$row_class = isset( $field['row_class'] ) ? ' ' . $field['row_class'] : '';
|
870 |
+
$responsive = false;
|
871 |
+
$responsive_fields = array( 'unit' );
|
872 |
+
$root_name = $name;
|
873 |
+
$global_settings = FLBuilderModel::get_global_settings();
|
874 |
+
$value = isset( $settings->$name ) ? $settings->$name : '';
|
875 |
|
876 |
// Use a default value if not set in the settings.
|
877 |
if ( ! isset( $settings->$name ) && isset( $field['default'] ) ) {
|
893 |
// Render old calls to *custom* fields with PHP.
|
894 |
if ( $is_multiple && $supports_multiple ) {
|
895 |
|
896 |
+
$values = $value;
|
897 |
+
$arr_name = $name;
|
898 |
+
$name .= '[]';
|
899 |
|
900 |
echo '<tbody id="fl-field-' . $root_name . '" class="fl-field fl-builder-field-multiples" data-type="form" data-preview=\'' . $preview . '\'>';
|
901 |
|
classes/class-fl-builder-update.php
CHANGED
@@ -51,6 +51,8 @@ final class FLBuilderUpdate {
|
|
51 |
self::run( $saved_version );
|
52 |
}
|
53 |
|
|
|
|
|
54 |
update_site_option( '_fl_builder_version', FL_BUILDER_VERSION );
|
55 |
|
56 |
update_site_option( '_fl_builder_update_info', array(
|
@@ -185,10 +187,10 @@ final class FLBuilderUpdate {
|
|
185 |
$meta = $wpdb->get_results( "SELECT * FROM {$wpdb->postmeta} WHERE meta_key = '_fl_builder_layout'" );
|
186 |
|
187 |
// Build the export object.
|
188 |
-
$data
|
189 |
-
$data->version
|
190 |
-
$data->nodes
|
191 |
-
$data->meta
|
192 |
|
193 |
// Save the backup.
|
194 |
fl_builder_filesystem()->file_put_contents( $cache_dir['path'] . 'backup.dat', serialize( $data ) );
|
@@ -269,12 +271,12 @@ final class FLBuilderUpdate {
|
|
269 |
foreach ( $metas as $meta ) {
|
270 |
|
271 |
// Get the old layout nodes from the database.
|
272 |
-
$published
|
273 |
-
$draft
|
274 |
|
275 |
// Convert the old nodes to new ones.
|
276 |
-
$published
|
277 |
-
$draft
|
278 |
|
279 |
// Add the new layout post meta.
|
280 |
update_post_meta( $meta->post_id, '_fl_builder_data', $published );
|
@@ -349,7 +351,7 @@ final class FLBuilderUpdate {
|
|
349 |
$node->parent = null;
|
350 |
}
|
351 |
|
352 |
-
$node->settings
|
353 |
$new_nodes[ $node->node ] = $node;
|
354 |
}
|
355 |
|
@@ -410,8 +412,8 @@ final class FLBuilderUpdate {
|
|
410 |
*/
|
411 |
static private function v_1_4_6() {
|
412 |
// Remove the old fl-builder uploads folder.
|
413 |
-
$upload_dir
|
414 |
-
$path
|
415 |
|
416 |
if ( file_exists( $path ) ) {
|
417 |
fl_builder_filesystem()->rmdir( $path, true );
|
@@ -427,7 +429,7 @@ final class FLBuilderUpdate {
|
|
427 |
*/
|
428 |
static private function v_1_6_3() {
|
429 |
$posts = get_posts( array(
|
430 |
-
'post_type'
|
431 |
'posts_per_page' => '-1',
|
432 |
) );
|
433 |
|
51 |
self::run( $saved_version );
|
52 |
}
|
53 |
|
54 |
+
do_action( 'fl_builder_cache_cleared' );
|
55 |
+
|
56 |
update_site_option( '_fl_builder_version', FL_BUILDER_VERSION );
|
57 |
|
58 |
update_site_option( '_fl_builder_update_info', array(
|
187 |
$meta = $wpdb->get_results( "SELECT * FROM {$wpdb->postmeta} WHERE meta_key = '_fl_builder_layout'" );
|
188 |
|
189 |
// Build the export object.
|
190 |
+
$data = new StdClass();
|
191 |
+
$data->version = FL_BUILDER_VERSION;
|
192 |
+
$data->nodes = $nodes;
|
193 |
+
$data->meta = $meta;
|
194 |
|
195 |
// Save the backup.
|
196 |
fl_builder_filesystem()->file_put_contents( $cache_dir['path'] . 'backup.dat', serialize( $data ) );
|
271 |
foreach ( $metas as $meta ) {
|
272 |
|
273 |
// Get the old layout nodes from the database.
|
274 |
+
$published = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %s WHERE layout = %s AND status = 'published'", $table, $meta->meta_value ) );
|
275 |
+
$draft = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM %s WHERE layout = %s AND status = 'draft'", $table, $meta->meta_value ) );
|
276 |
|
277 |
// Convert the old nodes to new ones.
|
278 |
+
$published = self::v_1_2_8_convert_nodes( $published );
|
279 |
+
$draft = self::v_1_2_8_convert_nodes( $draft );
|
280 |
|
281 |
// Add the new layout post meta.
|
282 |
update_post_meta( $meta->post_id, '_fl_builder_data', $published );
|
351 |
$node->parent = null;
|
352 |
}
|
353 |
|
354 |
+
$node->settings = self::v_1_2_8_json_decode_settings( $node->settings );
|
355 |
$new_nodes[ $node->node ] = $node;
|
356 |
}
|
357 |
|
412 |
*/
|
413 |
static private function v_1_4_6() {
|
414 |
// Remove the old fl-builder uploads folder.
|
415 |
+
$upload_dir = wp_upload_dir( null, false );
|
416 |
+
$path = trailingslashit( $upload_dir['basedir'] ) . 'fl-builder';
|
417 |
|
418 |
if ( file_exists( $path ) ) {
|
419 |
fl_builder_filesystem()->rmdir( $path, true );
|
429 |
*/
|
430 |
static private function v_1_6_3() {
|
431 |
$posts = get_posts( array(
|
432 |
+
'post_type' => 'fl-builder-template',
|
433 |
'posts_per_page' => '-1',
|
434 |
) );
|
435 |
|
classes/class-fl-builder-usage.php
CHANGED
@@ -16,9 +16,9 @@ final class FLBuilderUsage {
|
|
16 |
add_action( 'admin_init', array( 'FLBuilderUsage', 'enable_disable' ) );
|
17 |
add_action( 'init', array( 'FLBuilderUsage', 'set_schedule' ) );
|
18 |
add_action( $hook, array( 'FLBuilderUsage', 'render_notification' ) );
|
19 |
-
add_action( 'admin_enqueue_scripts', array( 'FLBuilderUsage', 'scripts' ) );
|
20 |
add_action( 'fl_builder_usage_event', array( 'FLBuilderUsage', 'send_stats' ) );
|
21 |
add_action( 'wp_ajax_fl_usage_toggle', array( 'FLBuilderUsage', 'callback' ) );
|
|
|
22 |
}
|
23 |
|
24 |
public static function callback() {
|
@@ -39,7 +39,6 @@ final class FLBuilderUsage {
|
|
39 |
}
|
40 |
|
41 |
public static function scripts() {
|
42 |
-
|
43 |
wp_enqueue_style( 'fl-builder-admin-usage', FL_BUILDER_URL . 'css/fl-builder-admin-usage.css', array(), FL_BUILDER_VERSION );
|
44 |
wp_enqueue_script( 'fl-builder-admin-usage', FL_BUILDER_URL . 'js/fl-builder-admin-usage.js', array( 'jquery' ), FL_BUILDER_VERSION );
|
45 |
}
|
@@ -93,8 +92,6 @@ final class FLBuilderUsage {
|
|
93 |
return false;
|
94 |
}
|
95 |
|
96 |
-
wp_enqueue_script( 'jquery' );
|
97 |
-
|
98 |
$btn = sprintf( '<div class="buttons"><span class="button button-primary enable-stats">%s</span> <span class="button disable-stats">%s</span>%s</div>',
|
99 |
__( "Sure, I'll help", 'fl-builder' ),
|
100 |
__( 'No, Thank You', 'fl-builder' ),
|
@@ -183,6 +180,8 @@ final class FLBuilderUsage {
|
|
183 |
*/
|
184 |
public static function data_demo() {
|
185 |
|
|
|
|
|
186 |
$data = self::get_data( true );
|
187 |
$output = '';
|
188 |
$txt = '';
|
@@ -247,26 +246,26 @@ final class FLBuilderUsage {
|
|
247 |
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
248 |
}
|
249 |
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
|
271 |
foreach ( (array) $plugins_data as $plugin_slug => $plugin ) {
|
272 |
if ( is_plugin_active( $plugin_slug ) ) {
|
@@ -274,135 +273,138 @@ final class FLBuilderUsage {
|
|
274 |
}
|
275 |
}
|
276 |
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
'
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
if (
|
329 |
-
$data['modules'][ $node->settings->type ]
|
330 |
-
|
331 |
-
|
|
|
|
|
332 |
}
|
333 |
}
|
334 |
}
|
335 |
}
|
336 |
-
}
|
337 |
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
|
|
356 |
}
|
357 |
}
|
358 |
}
|
359 |
-
}
|
360 |
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
|
376 |
-
|
377 |
-
'meta_key' => 'fl_builder_browser_stats',
|
378 |
-
'meta_value' => 'null',
|
379 |
-
'meta_compare' => '!=',
|
380 |
-
);
|
381 |
-
$query = new WP_User_Query( $args );
|
382 |
|
383 |
-
|
|
|
|
|
|
|
|
|
|
|
384 |
|
385 |
-
|
386 |
-
|
387 |
-
$
|
|
|
|
|
|
|
|
|
388 |
}
|
389 |
|
390 |
/**
|
391 |
* General data
|
392 |
*/
|
393 |
-
$data['server']
|
394 |
-
$data['database']
|
395 |
-
$data['multisite']
|
396 |
-
$data['subsites']
|
397 |
-
$data['locale']
|
398 |
-
$data['users']
|
399 |
-
$data['php']
|
400 |
-
$data['wp']
|
401 |
-
$data['fl-builder']
|
402 |
-
$data['fl-theme']
|
403 |
-
$data['fl-themer']
|
404 |
-
$data['browsers'] = $browsers;
|
405 |
-
$data['user_settings'] = $user_settings;
|
406 |
|
407 |
$settings_orig = FLBuilderModel::get_global_settings();
|
408 |
|
16 |
add_action( 'admin_init', array( 'FLBuilderUsage', 'enable_disable' ) );
|
17 |
add_action( 'init', array( 'FLBuilderUsage', 'set_schedule' ) );
|
18 |
add_action( $hook, array( 'FLBuilderUsage', 'render_notification' ) );
|
|
|
19 |
add_action( 'fl_builder_usage_event', array( 'FLBuilderUsage', 'send_stats' ) );
|
20 |
add_action( 'wp_ajax_fl_usage_toggle', array( 'FLBuilderUsage', 'callback' ) );
|
21 |
+
|
22 |
}
|
23 |
|
24 |
public static function callback() {
|
39 |
}
|
40 |
|
41 |
public static function scripts() {
|
|
|
42 |
wp_enqueue_style( 'fl-builder-admin-usage', FL_BUILDER_URL . 'css/fl-builder-admin-usage.css', array(), FL_BUILDER_VERSION );
|
43 |
wp_enqueue_script( 'fl-builder-admin-usage', FL_BUILDER_URL . 'js/fl-builder-admin-usage.js', array( 'jquery' ), FL_BUILDER_VERSION );
|
44 |
}
|
92 |
return false;
|
93 |
}
|
94 |
|
|
|
|
|
95 |
$btn = sprintf( '<div class="buttons"><span class="button button-primary enable-stats">%s</span> <span class="button disable-stats">%s</span>%s</div>',
|
96 |
__( "Sure, I'll help", 'fl-builder' ),
|
97 |
__( 'No, Thank You', 'fl-builder' ),
|
180 |
*/
|
181 |
public static function data_demo() {
|
182 |
|
183 |
+
self::scripts();
|
184 |
+
|
185 |
$data = self::get_data( true );
|
186 |
$output = '';
|
187 |
$txt = '';
|
246 |
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
247 |
}
|
248 |
|
249 |
+
$data = array(
|
250 |
+
'modules' => array(),
|
251 |
+
'license' => array(),
|
252 |
+
'themer' => array(
|
253 |
+
'header' => 0,
|
254 |
+
'footer' => 0,
|
255 |
+
'part' => 0,
|
256 |
+
'404' => 0,
|
257 |
+
'singular' => 0,
|
258 |
+
),
|
259 |
+
'pinned' => array(
|
260 |
+
'left' => 0,
|
261 |
+
'right' => 0,
|
262 |
+
'unpinned' => 0,
|
263 |
+
),
|
264 |
+
);
|
265 |
+
$users = count_users();
|
266 |
+
$plugins_data = get_plugins();
|
267 |
+
$data['plugins'] = count( $plugins_data );
|
268 |
+
$data['plugins_active'] = 0;
|
269 |
|
270 |
foreach ( (array) $plugins_data as $plugin_slug => $plugin ) {
|
271 |
if ( is_plugin_active( $plugin_slug ) ) {
|
273 |
}
|
274 |
}
|
275 |
|
276 |
+
if ( false === $demo ) {
|
277 |
+
/**
|
278 |
+
* Setup an array of post types to query
|
279 |
+
*/
|
280 |
+
$post_types = get_post_types( array(
|
281 |
+
'public' => true,
|
282 |
+
'_builtin' => true,
|
283 |
+
) );
|
284 |
+
|
285 |
+
if ( isset( $post_types['attachment'] ) ) {
|
286 |
+
unset( $post_types['attachment'] );
|
287 |
+
}
|
288 |
+
// $post_types['fl-builder-template'] = 'fl-builder-template';
|
289 |
+
|
290 |
+
/**
|
291 |
+
* Get a count of all posts/pages that are *not* builder enabled.
|
292 |
+
*/
|
293 |
+
$args = array(
|
294 |
+
'post_type' => $post_types,
|
295 |
+
'post_status' => 'publish',
|
296 |
+
'meta_query' => array(
|
297 |
+
'key' => '_fl_builder_enabled',
|
298 |
+
'value' => '1',
|
299 |
+
'compare' => '!=',
|
300 |
+
),
|
301 |
+
'posts_per_page' => -1,
|
302 |
+
);
|
303 |
+
$query = new WP_Query( $args );
|
304 |
+
$data['not-enabled'] = count( $query->posts );
|
305 |
+
|
306 |
+
/**
|
307 |
+
* Get a count of all posts pages that are using the builder.
|
308 |
+
*/
|
309 |
+
$args = array(
|
310 |
+
'post_type' => $post_types,
|
311 |
+
'post_status' => 'publish',
|
312 |
+
'meta_key' => '_fl_builder_enabled',
|
313 |
+
'meta_value' => '1',
|
314 |
+
'posts_per_page' => -1,
|
315 |
+
);
|
316 |
+
|
317 |
+
$query = new WP_Query( $args );
|
318 |
+
$data['enabled'] = count( $query->posts );
|
319 |
+
|
320 |
+
/**
|
321 |
+
* Using the array of pages/posts using builder get a list of all used modules
|
322 |
+
*/
|
323 |
+
if ( is_array( $query->posts ) && ! empty( $query->posts ) ) {
|
324 |
+
foreach ( $query->posts as $post ) {
|
325 |
+
$meta = get_post_meta( $post->ID, '_fl_builder_data', true );
|
326 |
+
foreach ( (array) $meta as $node_id => $node ) {
|
327 |
+
if ( @isset( $node->type ) && 'module' == $node->type ) { // @codingStandardsIgnoreLine
|
328 |
+
if ( ! isset( $data['modules'][ $node->settings->type ] ) ) {
|
329 |
+
$data['modules'][ $node->settings->type ] = 1;
|
330 |
+
} else {
|
331 |
+
$data['modules'][ $node->settings->type ] ++;
|
332 |
+
}
|
333 |
}
|
334 |
}
|
335 |
}
|
336 |
}
|
|
|
337 |
|
338 |
+
// themer settings.
|
339 |
+
$args = array(
|
340 |
+
'post_type' => 'fl-theme-layout',
|
341 |
+
'post_status' => 'publish',
|
342 |
+
'meta_key' => '_fl_builder_enabled',
|
343 |
+
'meta_value' => '1',
|
344 |
+
'posts_per_page' => -1,
|
345 |
+
);
|
346 |
+
$query = new WP_Query( $args );
|
347 |
+
$data['themer']['total'] = count( $query->posts );
|
348 |
+
if ( is_array( $query->posts ) && ! empty( $query->posts ) ) {
|
349 |
+
foreach ( $query->posts as $post ) {
|
350 |
+
$meta = get_post_meta( $post->ID );
|
351 |
+
if ( isset( $meta['_fl_theme_layout_type'] ) ) {
|
352 |
+
if ( ! isset( $data['themer'][ $meta['_fl_theme_layout_type'][0] ] ) ) {
|
353 |
+
$data['themer'][ $meta['_fl_theme_layout_type'][0] ] = 1;
|
354 |
+
} else {
|
355 |
+
$data['themer'][ $meta['_fl_theme_layout_type'][0] ] ++;
|
356 |
+
}
|
357 |
}
|
358 |
}
|
359 |
}
|
|
|
360 |
|
361 |
+
/**
|
362 |
+
* Find all users that are using the builder.
|
363 |
+
*/
|
364 |
+
$args = array(
|
365 |
+
'meta_key' => 'fl_builder_user_settings',
|
366 |
+
'meta_value' => 'null',
|
367 |
+
'meta_compare' => '!=',
|
368 |
+
);
|
369 |
+
$query = new WP_User_Query( $args );
|
370 |
+
$user_settings = array();
|
371 |
+
foreach ( $query->results as $user ) {
|
372 |
+
$meta = get_user_meta( $user->ID, 'fl_builder_user_settings', true );
|
373 |
+
$user_settings[ $user->ID ] = $meta;
|
374 |
+
}
|
375 |
|
376 |
+
$data['user_settings'] = $user_settings;
|
|
|
|
|
|
|
|
|
|
|
377 |
|
378 |
+
$args = array(
|
379 |
+
'meta_key' => 'fl_builder_browser_stats',
|
380 |
+
'meta_value' => 'null',
|
381 |
+
'meta_compare' => '!=',
|
382 |
+
);
|
383 |
+
$query = new WP_User_Query( $args );
|
384 |
|
385 |
+
$browsers = array();
|
386 |
+
|
387 |
+
foreach ( $query->results as $user ) {
|
388 |
+
$meta = get_user_meta( $user->ID, 'fl_builder_browser_stats', true );
|
389 |
+
$browsers[ $user->ID ] = $meta;
|
390 |
+
}
|
391 |
+
$data['browsers'] = $browsers;
|
392 |
}
|
393 |
|
394 |
/**
|
395 |
* General data
|
396 |
*/
|
397 |
+
$data['server'] = $_SERVER['SERVER_SOFTWARE'];
|
398 |
+
$data['database'] = ( ! empty( $wpdb->is_mysql ) ? $wpdb->db_version() : 'Unknown' );
|
399 |
+
$data['multisite'] = is_multisite() ? 'Yes' : 'No';
|
400 |
+
$data['subsites'] = is_multisite() ? get_blog_count() : '';
|
401 |
+
$data['locale'] = get_locale();
|
402 |
+
$data['users'] = $users['total_users'];
|
403 |
+
$data['php'] = phpversion();
|
404 |
+
$data['wp'] = $wp_version;
|
405 |
+
$data['fl-builder'] = FL_BUILDER_VERSION;
|
406 |
+
$data['fl-theme'] = ( defined( 'FL_THEME_VERSION' ) ) ? FL_THEME_VERSION : false;
|
407 |
+
$data['fl-themer'] = ( defined( 'FL_THEME_BUILDER_VERSION' ) ) ? FL_THEME_BUILDER_VERSION : false;
|
|
|
|
|
408 |
|
409 |
$settings_orig = FLBuilderModel::get_global_settings();
|
410 |
|
classes/class-fl-builder-user-access.php
CHANGED
@@ -52,7 +52,7 @@ final class FLBuilderUserAccess {
|
|
52 |
$data['order'] = '10';
|
53 |
}
|
54 |
self::$registered_settings[ $key ] = $data;
|
55 |
-
self::$settings
|
56 |
}
|
57 |
|
58 |
/**
|
@@ -219,8 +219,8 @@ final class FLBuilderUserAccess {
|
|
219 |
}
|
220 |
|
221 |
$editable_roles = get_editable_roles();
|
222 |
-
$roles
|
223 |
-
$caps
|
224 |
|
225 |
foreach ( $editable_roles as $role => $data ) {
|
226 |
foreach ( $caps as $cap ) {
|
@@ -243,7 +243,7 @@ final class FLBuilderUserAccess {
|
|
243 |
* @return bool
|
244 |
*/
|
245 |
static public function current_user_can( $key ) {
|
246 |
-
$user
|
247 |
$settings = self::get_saved_settings();
|
248 |
|
249 |
// Return false if no settings saved.
|
52 |
$data['order'] = '10';
|
53 |
}
|
54 |
self::$registered_settings[ $key ] = $data;
|
55 |
+
self::$settings = null; // must bust the settings cache.
|
56 |
}
|
57 |
|
58 |
/**
|
219 |
}
|
220 |
|
221 |
$editable_roles = get_editable_roles();
|
222 |
+
$roles = array();
|
223 |
+
$caps = apply_filters( 'fl_builder_user_access_capabilities', array( 'edit_posts' ) );
|
224 |
|
225 |
foreach ( $editable_roles as $role => $data ) {
|
226 |
foreach ( $caps as $cap ) {
|
243 |
* @return bool
|
244 |
*/
|
245 |
static public function current_user_can( $key ) {
|
246 |
+
$user = wp_get_current_user();
|
247 |
$settings = self::get_saved_settings();
|
248 |
|
249 |
// Return false if no settings saved.
|
classes/class-fl-builder-user-settings.php
CHANGED
@@ -24,8 +24,8 @@ class FLBuilderUserSettings {
|
|
24 |
static public function get() {
|
25 |
$meta = get_user_meta( get_current_user_id(), 'fl_builder_user_settings', true );
|
26 |
$defaults = array(
|
27 |
-
'skin'
|
28 |
-
'lightbox'
|
29 |
);
|
30 |
|
31 |
if ( ! $meta ) {
|
@@ -52,7 +52,7 @@ class FLBuilderUserSettings {
|
|
52 |
* @return array
|
53 |
*/
|
54 |
static public function save_ui_skin( $name ) {
|
55 |
-
$settings
|
56 |
$settings['skin'] = $name;
|
57 |
|
58 |
return array(
|
@@ -69,7 +69,7 @@ class FLBuilderUserSettings {
|
|
69 |
* @return array
|
70 |
*/
|
71 |
static public function save_lightbox_position( $data ) {
|
72 |
-
$settings
|
73 |
$settings['lightbox'] = $data;
|
74 |
|
75 |
return self::update( $settings );
|
24 |
static public function get() {
|
25 |
$meta = get_user_meta( get_current_user_id(), 'fl_builder_user_settings', true );
|
26 |
$defaults = array(
|
27 |
+
'skin' => 'light',
|
28 |
+
'lightbox' => null,
|
29 |
);
|
30 |
|
31 |
if ( ! $meta ) {
|
52 |
* @return array
|
53 |
*/
|
54 |
static public function save_ui_skin( $name ) {
|
55 |
+
$settings = self::get();
|
56 |
$settings['skin'] = $name;
|
57 |
|
58 |
return array(
|
69 |
* @return array
|
70 |
*/
|
71 |
static public function save_lightbox_position( $data ) {
|
72 |
+
$settings = self::get();
|
73 |
$settings['lightbox'] = $data;
|
74 |
|
75 |
return self::update( $settings );
|
classes/class-fl-builder-utils.php
CHANGED
@@ -49,26 +49,26 @@ final class FLBuilderUtils {
|
|
49 |
|
50 |
if ( $txtl > $length ) {
|
51 |
|
52 |
-
for ( $i = 1;' ' != $text[ $length -$i ];$i++ ) {
|
53 |
|
54 |
if ( $i == $length ) {
|
55 |
|
56 |
if ( function_exists( 'mb_substr' ) ) {
|
57 |
-
return mb_substr( $text,0
|
58 |
}
|
59 |
|
60 |
-
return substr( $text,0
|
61 |
}
|
62 |
}
|
63 |
|
64 |
-
for ( ;',' == $text[ $length -$i ] || '.' == $text[ $length -$i ] || ' ' == $text[ $length -$i ];
|
65 |
-
$i++ ) {;}
|
66 |
|
67 |
if ( function_exists( 'mb_substr' ) ) {
|
68 |
-
return mb_substr( $text,0,$length -$i + 1 ) . $tail;
|
69 |
}
|
70 |
|
71 |
-
return substr( $text,0,$length -$i + 1 ) . $tail;
|
72 |
}
|
73 |
|
74 |
return $text;
|
@@ -150,8 +150,8 @@ final class FLBuilderUtils {
|
|
150 |
* Get video type and ID from a given URL
|
151 |
*
|
152 |
* @since 1.9
|
153 |
-
* @param string $url
|
154 |
-
* @param string $type
|
155 |
* @return array
|
156 |
*/
|
157 |
static public function get_video_data( $url, $type = '' ) {
|
@@ -159,12 +159,12 @@ final class FLBuilderUtils {
|
|
159 |
return false;
|
160 |
}
|
161 |
|
162 |
-
$y_matches
|
163 |
$vm_matches = array();
|
164 |
$yt_pattern = '/^(?:(?:(?:https?:)?\/\/)?(?:www.)?(?:youtu(?:be.com|.be))\/(?:watch\?v\=|v\/|embed\/)?([\w\-]+))/is';
|
165 |
$vm_pattern = '#(?:https?://)?(?:www.)?(?:player.)?vimeo.com/(?:[a-z]*/)*([0-9]{6,11})[?]?.*#';
|
166 |
$video_data = array(
|
167 |
-
'type'
|
168 |
'video_id' => '',
|
169 |
);
|
170 |
|
@@ -172,7 +172,7 @@ final class FLBuilderUtils {
|
|
172 |
preg_match( $vm_pattern, $url, $vm_matches );
|
173 |
|
174 |
if ( isset( $yt_matches[1] ) ) {
|
175 |
-
$video_data['type']
|
176 |
$video_data['video_id'] = $yt_matches[1];
|
177 |
|
178 |
parse_str( parse_url( $url, PHP_URL_QUERY ), $yt_params );
|
@@ -180,8 +180,8 @@ final class FLBuilderUtils {
|
|
180 |
|
181 |
// If start time is specified, make sure to convert it into seconds.
|
182 |
if ( isset( $yt_params['t'] ) ) {
|
183 |
-
$minutes
|
184 |
-
$seconds
|
185 |
$time_in_seconds = 0;
|
186 |
|
187 |
// Check for minutes.
|
@@ -214,7 +214,7 @@ final class FLBuilderUtils {
|
|
214 |
$video_data['params'] = $yt_params;
|
215 |
}
|
216 |
} elseif ( isset( $vm_matches[1] ) ) {
|
217 |
-
$video_data['type']
|
218 |
$video_data['video_id'] = $vm_matches[1];
|
219 |
}
|
220 |
|
@@ -264,7 +264,7 @@ final class FLBuilderUtils {
|
|
264 |
return $value;
|
265 |
}
|
266 |
|
267 |
-
|
268 |
}
|
269 |
|
270 |
}
|
49 |
|
50 |
if ( $txtl > $length ) {
|
51 |
|
52 |
+
for ( $i = 1;' ' != $text[ $length -$i ];$i++ ) { // @codingStandardsIgnoreLine
|
53 |
|
54 |
if ( $i == $length ) {
|
55 |
|
56 |
if ( function_exists( 'mb_substr' ) ) {
|
57 |
+
return mb_substr( $text, 0, $length ) . $tail;
|
58 |
}
|
59 |
|
60 |
+
return substr( $text, 0, $length ) . $tail;
|
61 |
}
|
62 |
}
|
63 |
|
64 |
+
for ( ;',' == $text[ $length -$i ] || '.' == $text[ $length -$i ] || ' ' == $text[ $length -$i ]; // @codingStandardsIgnoreLine
|
65 |
+
$i++ ) {;} // @codingStandardsIgnoreLine
|
66 |
|
67 |
if ( function_exists( 'mb_substr' ) ) {
|
68 |
+
return mb_substr( $text,0,$length -$i + 1 ) . $tail; // @codingStandardsIgnoreLine
|
69 |
}
|
70 |
|
71 |
+
return substr( $text,0,$length -$i + 1 ) . $tail; // @codingStandardsIgnoreLine
|
72 |
}
|
73 |
|
74 |
return $text;
|
150 |
* Get video type and ID from a given URL
|
151 |
*
|
152 |
* @since 1.9
|
153 |
+
* @param string $url The URL to check for video type
|
154 |
+
* @param string $type The type of video to check
|
155 |
* @return array
|
156 |
*/
|
157 |
static public function get_video_data( $url, $type = '' ) {
|
159 |
return false;
|
160 |
}
|
161 |
|
162 |
+
$y_matches = array();
|
163 |
$vm_matches = array();
|
164 |
$yt_pattern = '/^(?:(?:(?:https?:)?\/\/)?(?:www.)?(?:youtu(?:be.com|.be))\/(?:watch\?v\=|v\/|embed\/)?([\w\-]+))/is';
|
165 |
$vm_pattern = '#(?:https?://)?(?:www.)?(?:player.)?vimeo.com/(?:[a-z]*/)*([0-9]{6,11})[?]?.*#';
|
166 |
$video_data = array(
|
167 |
+
'type' => 'mp4',
|
168 |
'video_id' => '',
|
169 |
);
|
170 |
|
172 |
preg_match( $vm_pattern, $url, $vm_matches );
|
173 |
|
174 |
if ( isset( $yt_matches[1] ) ) {
|
175 |
+
$video_data['type'] = 'youtube';
|
176 |
$video_data['video_id'] = $yt_matches[1];
|
177 |
|
178 |
parse_str( parse_url( $url, PHP_URL_QUERY ), $yt_params );
|
180 |
|
181 |
// If start time is specified, make sure to convert it into seconds.
|
182 |
if ( isset( $yt_params['t'] ) ) {
|
183 |
+
$minutes = 0;
|
184 |
+
$seconds = 0;
|
185 |
$time_in_seconds = 0;
|
186 |
|
187 |
// Check for minutes.
|
214 |
$video_data['params'] = $yt_params;
|
215 |
}
|
216 |
} elseif ( isset( $vm_matches[1] ) ) {
|
217 |
+
$video_data['type'] = 'vimeo';
|
218 |
$video_data['video_id'] = $vm_matches[1];
|
219 |
}
|
220 |
|
264 |
return $value;
|
265 |
}
|
266 |
|
267 |
+
return 0;
|
268 |
}
|
269 |
|
270 |
}
|
classes/class-fl-builder-wp-blocks-layout.php
CHANGED
@@ -13,13 +13,13 @@ final class FLBuilderWPBlocksLayout {
|
|
13 |
*/
|
14 |
static public function init() {
|
15 |
// Actions
|
16 |
-
add_action( 'current_screen',
|
17 |
-
add_action( 'pre_post_update',
|
18 |
|
19 |
// Filters
|
20 |
-
add_action( 'block_editor_preload_paths',
|
21 |
-
add_filter( 'fl_builder_editor_content',
|
22 |
-
add_filter( 'fl_builder_migrated_post_content',
|
23 |
}
|
24 |
|
25 |
/**
|
@@ -33,11 +33,11 @@ final class FLBuilderWPBlocksLayout {
|
|
33 |
global $pagenow;
|
34 |
|
35 |
if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
|
36 |
-
$post_id
|
37 |
$render_ui = apply_filters( 'fl_builder_render_admin_edit_ui', true );
|
38 |
$post_types = FLBuilderModel::get_post_types();
|
39 |
-
$screen
|
40 |
-
$enabled
|
41 |
$user_access = FLBuilderUserAccess::current_user_can( 'builder_access' );
|
42 |
$unrestricted = FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
43 |
|
@@ -76,14 +76,14 @@ final class FLBuilderWPBlocksLayout {
|
|
76 |
$blocks = preg_match( '/<!-- wp:(.*) \/?-->/', $post->post_content );
|
77 |
|
78 |
if ( $enabled && ! $blocks ) {
|
79 |
-
$block
|
80 |
-
$block
|
81 |
-
$block
|
82 |
|
83 |
$post->post_content = $block;
|
84 |
|
85 |
wp_update_post( array(
|
86 |
-
'ID'
|
87 |
'post_content' => $block,
|
88 |
) );
|
89 |
}
|
@@ -100,9 +100,9 @@ final class FLBuilderWPBlocksLayout {
|
|
100 |
* @return void
|
101 |
*/
|
102 |
static public function disable_builder_on_post_update( $post_id, $new_post ) {
|
103 |
-
$new_post
|
104 |
-
$old_post
|
105 |
-
$post_types
|
106 |
|
107 |
if ( ! $old_post || ! in_array( $old_post->post_type, $post_types ) ) {
|
108 |
return;
|
@@ -128,11 +128,11 @@ final class FLBuilderWPBlocksLayout {
|
|
128 |
*/
|
129 |
static public function filter_editor_content( $content ) {
|
130 |
$post_id = FLBuilderModel::get_post_id();
|
131 |
-
$post
|
132 |
|
133 |
-
$block
|
134 |
-
$block
|
135 |
-
$block
|
136 |
|
137 |
return $block;
|
138 |
}
|
13 |
*/
|
14 |
static public function init() {
|
15 |
// Actions
|
16 |
+
add_action( 'current_screen', __CLASS__ . '::init_template' );
|
17 |
+
add_action( 'pre_post_update', __CLASS__ . '::disable_builder_on_post_update', 10, 2 );
|
18 |
|
19 |
// Filters
|
20 |
+
add_action( 'block_editor_preload_paths', __CLASS__ . '::update_legacy_post', 10, 2 );
|
21 |
+
add_filter( 'fl_builder_editor_content', __CLASS__ . '::filter_editor_content' );
|
22 |
+
add_filter( 'fl_builder_migrated_post_content', __CLASS__ . '::filter_migrated_post_content' );
|
23 |
}
|
24 |
|
25 |
/**
|
33 |
global $pagenow;
|
34 |
|
35 |
if ( in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
|
36 |
+
$post_id = isset( $_GET['post'] ) ? absint( $_GET['post'] ) : null;
|
37 |
$render_ui = apply_filters( 'fl_builder_render_admin_edit_ui', true );
|
38 |
$post_types = FLBuilderModel::get_post_types();
|
39 |
+
$screen = get_current_screen();
|
40 |
+
$enabled = ! $post_id ? false : FLBuilderModel::is_builder_enabled( $post_id );
|
41 |
$user_access = FLBuilderUserAccess::current_user_can( 'builder_access' );
|
42 |
$unrestricted = FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
43 |
|
76 |
$blocks = preg_match( '/<!-- wp:(.*) \/?-->/', $post->post_content );
|
77 |
|
78 |
if ( $enabled && ! $blocks ) {
|
79 |
+
$block = '<!-- wp:fl-builder/layout -->';
|
80 |
+
$block .= self::remove_broken_p_tags( $post->post_content );
|
81 |
+
$block .= '<!-- /wp:fl-builder/layout -->';
|
82 |
|
83 |
$post->post_content = $block;
|
84 |
|
85 |
wp_update_post( array(
|
86 |
+
'ID' => $post->ID,
|
87 |
'post_content' => $block,
|
88 |
) );
|
89 |
}
|
100 |
* @return void
|
101 |
*/
|
102 |
static public function disable_builder_on_post_update( $post_id, $new_post ) {
|
103 |
+
$new_post = (object) $new_post;
|
104 |
+
$old_post = get_post( $post_id );
|
105 |
+
$post_types = FLBuilderModel::get_post_types();
|
106 |
|
107 |
if ( ! $old_post || ! in_array( $old_post->post_type, $post_types ) ) {
|
108 |
return;
|
128 |
*/
|
129 |
static public function filter_editor_content( $content ) {
|
130 |
$post_id = FLBuilderModel::get_post_id();
|
131 |
+
$post = get_post( $post_id );
|
132 |
|
133 |
+
$block = '<!-- wp:fl-builder/layout -->';
|
134 |
+
$block .= self::remove_broken_p_tags( $content );
|
135 |
+
$block .= '<!-- /wp:fl-builder/layout -->';
|
136 |
|
137 |
return $block;
|
138 |
}
|
classes/class-fl-builder-wp-blocks.php
CHANGED
@@ -25,7 +25,7 @@ final class FLBuilderWPBlocks {
|
|
25 |
}
|
26 |
|
27 |
// Actions
|
28 |
-
add_action( 'enqueue_block_editor_assets',
|
29 |
|
30 |
// Filters
|
31 |
add_filter( 'excerpt_allowed_blocks', __CLASS__ . '::excerpt_allowed_blocks' );
|
@@ -49,10 +49,10 @@ final class FLBuilderWPBlocks {
|
|
49 |
return;
|
50 |
}
|
51 |
|
52 |
-
$branding
|
53 |
$post_type_object = get_post_type_object( $post->post_type );
|
54 |
-
$post_type_name
|
55 |
-
$min
|
56 |
|
57 |
wp_enqueue_style(
|
58 |
'fl-builder-wp-editor',
|
@@ -70,25 +70,25 @@ final class FLBuilderWPBlocks {
|
|
70 |
|
71 |
wp_localize_script( 'fl-builder-wp-editor', 'FLBuilderConfig', array(
|
72 |
'builder' => array(
|
73 |
-
'access'
|
74 |
-
'enabled'
|
75 |
-
'nonce'
|
76 |
'unrestricted' => FLBuilderUserAccess::current_user_can( 'unrestricted_editing' ),
|
77 |
),
|
78 |
-
'post'
|
79 |
'id' => $post->ID,
|
80 |
),
|
81 |
'strings' => array(
|
82 |
-
'active'
|
83 |
-
'convert'
|
84 |
'description' => sprintf( _x( '%s lets you drag and drop your layout on the frontend.', '%s branded builder name.', 'fl-builder' ), $branding ),
|
85 |
-
'editor'
|
86 |
-
'launch'
|
87 |
-
'title'
|
88 |
-
'view'
|
89 |
-
'warning'
|
90 |
),
|
91 |
-
'urls'
|
92 |
'edit' => FLBuilderModel::get_edit_url( $post->ID ),
|
93 |
'view' => get_permalink( $post->ID ),
|
94 |
),
|
25 |
}
|
26 |
|
27 |
// Actions
|
28 |
+
add_action( 'enqueue_block_editor_assets', __CLASS__ . '::enqueue_block_editor_assets' );
|
29 |
|
30 |
// Filters
|
31 |
add_filter( 'excerpt_allowed_blocks', __CLASS__ . '::excerpt_allowed_blocks' );
|
49 |
return;
|
50 |
}
|
51 |
|
52 |
+
$branding = FLBuilderModel::get_branding();
|
53 |
$post_type_object = get_post_type_object( $post->post_type );
|
54 |
+
$post_type_name = $post_type_object->labels->singular_name;
|
55 |
+
$min = ( ! FLBuilder::is_debug() ) ? '.min' : '';
|
56 |
|
57 |
wp_enqueue_style(
|
58 |
'fl-builder-wp-editor',
|
70 |
|
71 |
wp_localize_script( 'fl-builder-wp-editor', 'FLBuilderConfig', array(
|
72 |
'builder' => array(
|
73 |
+
'access' => FLBuilderUserAccess::current_user_can( 'builder_access' ),
|
74 |
+
'enabled' => FLBuilderModel::is_builder_enabled( $post->ID ),
|
75 |
+
'nonce' => wp_create_nonce( 'fl_ajax_update' ),
|
76 |
'unrestricted' => FLBuilderUserAccess::current_user_can( 'unrestricted_editing' ),
|
77 |
),
|
78 |
+
'post' => array(
|
79 |
'id' => $post->ID,
|
80 |
),
|
81 |
'strings' => array(
|
82 |
+
'active' => sprintf( _x( '%1$s is currently active for this %2$s.', '%1$s branded builder name. %2$s post type name.', 'fl-builder' ), $branding, strtolower( $post_type_name ) ),
|
83 |
+
'convert' => sprintf( _x( 'Convert to %s', '%s branded builder name.', 'fl-builder' ), $branding ),
|
84 |
'description' => sprintf( _x( '%s lets you drag and drop your layout on the frontend.', '%s branded builder name.', 'fl-builder' ), $branding ),
|
85 |
+
'editor' => __( 'Use Standard Editor', 'fl-builder' ),
|
86 |
+
'launch' => sprintf( _x( 'Launch %s', '%s branded builder name.', 'fl-builder' ), $branding ),
|
87 |
+
'title' => $branding,
|
88 |
+
'view' => sprintf( _x( 'View %s', '%s post type name.', 'fl-builder' ), $post_type_name ),
|
89 |
+
'warning' => __( 'Switching to the native WordPress editor will disable your Beaver Builder layout until it is enabled again. Any edits made in the WordPress editor will not be converted to your Page Builded layout. Do you want to continue?', 'fl-builder' ),
|
90 |
),
|
91 |
+
'urls' => array(
|
92 |
'edit' => FLBuilderModel::get_edit_url( $post->ID ),
|
93 |
'view' => get_permalink( $post->ID ),
|
94 |
),
|
classes/class-fl-builder-wpcli-command.php
CHANGED
@@ -19,9 +19,9 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
|
|
19 |
* ## EXAMPLES
|
20 |
*
|
21 |
* 1. wp beaver clearcache
|
22 |
-
*
|
23 |
* 2. wp beaver clearcache --network
|
24 |
-
*
|
25 |
*/
|
26 |
public function clearcache( $args, $assoc_args ) {
|
27 |
|
@@ -77,6 +77,10 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
|
|
77 |
WP_CLI::success( __( 'Rebuilt the theme cache', 'fl-builder' ) );
|
78 |
}
|
79 |
}
|
|
|
|
|
|
|
|
|
80 |
do_action( 'fl_builder_cache_cleared' );
|
81 |
}
|
82 |
}
|
@@ -96,9 +100,9 @@ class FLbuilder_WPCLI_Command extends WP_CLI_Command {
|
|
96 |
* ## EXAMPLES
|
97 |
*
|
98 |
* 1. wp beaver register --license=01234567890
|
99 |
-
*
|
100 |
* 2. wp beaver register --deactivate
|
101 |
-
*
|
102 |
* 3. wp beaver register
|
103 |
* - If license is defined in wp-config.php using FL_LICENSE_KEY global.
|
104 |
*/
|
19 |
* ## EXAMPLES
|
20 |
*
|
21 |
* 1. wp beaver clearcache
|
22 |
+
* - Clears the page builder cache for all the posts on the site.
|
23 |
* 2. wp beaver clearcache --network
|
24 |
+
* - Clears the page builder cache for all the posts on a network.
|
25 |
*/
|
26 |
public function clearcache( $args, $assoc_args ) {
|
27 |
|
77 |
WP_CLI::success( __( 'Rebuilt the theme cache', 'fl-builder' ) );
|
78 |
}
|
79 |
}
|
80 |
+
/**
|
81 |
+
* After cache is cleared.
|
82 |
+
* @see fl_builder_cache_cleared
|
83 |
+
*/
|
84 |
do_action( 'fl_builder_cache_cleared' );
|
85 |
}
|
86 |
}
|
100 |
* ## EXAMPLES
|
101 |
*
|
102 |
* 1. wp beaver register --license=01234567890
|
103 |
+
* - Register this domain using license 01234567890
|
104 |
* 2. wp beaver register --deactivate
|
105 |
+
* - Removes domain from domain manager and clears saved license info.
|
106 |
* 3. wp beaver register
|
107 |
* - If license is defined in wp-config.php using FL_LICENSE_KEY global.
|
108 |
*/
|
classes/class-fl-builder-wpml.php
CHANGED
@@ -16,9 +16,9 @@ final class FLBuilderWPML {
|
|
16 |
return;
|
17 |
}
|
18 |
|
19 |
-
add_filter( 'fl_get_wp_widgets_exclude',
|
20 |
-
add_filter( 'fl_builder_node_template_post_id',
|
21 |
-
add_filter( 'fl_builder_parent_template_node_id',
|
22 |
}
|
23 |
|
24 |
/**
|
@@ -45,11 +45,11 @@ final class FLBuilderWPML {
|
|
45 |
static public function filter_node_template_post_id( $post_id ) {
|
46 |
global $sitepress;
|
47 |
|
48 |
-
$post_type
|
49 |
-
$lang
|
50 |
-
$wpml_post
|
51 |
-
$trid
|
52 |
-
$translations
|
53 |
|
54 |
if ( is_array( $translations ) && isset( $translations[ $lang ] ) ) {
|
55 |
$post_id = $translations[ $lang ]->element_id;
|
@@ -69,6 +69,10 @@ final class FLBuilderWPML {
|
|
69 |
* @return string
|
70 |
*/
|
71 |
static public function filter_parent_template_node_id( $template_node_id, $parent, $layout_data ) {
|
|
|
|
|
|
|
|
|
72 |
$root = FLBuilderModel::get_node_template_root( $parent->type, $layout_data );
|
73 |
|
74 |
if ( $root && isset( $root->template_root_node ) && isset( $root->template_node_id ) && ! empty( $root->template_node_id ) ) {
|
16 |
return;
|
17 |
}
|
18 |
|
19 |
+
add_filter( 'fl_get_wp_widgets_exclude', __CLASS__ . '::filter_wp_widgets_exclude' );
|
20 |
+
add_filter( 'fl_builder_node_template_post_id', __CLASS__ . '::filter_node_template_post_id' );
|
21 |
+
add_filter( 'fl_builder_parent_template_node_id', __CLASS__ . '::filter_parent_template_node_id', 10, 3 );
|
22 |
}
|
23 |
|
24 |
/**
|
45 |
static public function filter_node_template_post_id( $post_id ) {
|
46 |
global $sitepress;
|
47 |
|
48 |
+
$post_type = get_post_type( $post_id );
|
49 |
+
$lang = $sitepress->get_current_language();
|
50 |
+
$wpml_post = new WPML_Post_Element( $post_id, $sitepress );
|
51 |
+
$trid = $sitepress->get_element_trid( $post_id, "post_$post_type" );
|
52 |
+
$translations = $sitepress->get_element_translations( $trid, "post_$post_type" );
|
53 |
|
54 |
if ( is_array( $translations ) && isset( $translations[ $lang ] ) ) {
|
55 |
$post_id = $translations[ $lang ]->element_id;
|
69 |
* @return string
|
70 |
*/
|
71 |
static public function filter_parent_template_node_id( $template_node_id, $parent, $layout_data ) {
|
72 |
+
if ( ! isset( $parent->template_root_node ) ) {
|
73 |
+
return $template_node_id;
|
74 |
+
}
|
75 |
+
|
76 |
$root = FLBuilderModel::get_node_template_root( $parent->type, $layout_data );
|
77 |
|
78 |
if ( $root && isset( $root->template_root_node ) && isset( $root->template_node_id ) && ! empty( $root->template_node_id ) ) {
|
classes/class-fl-builder.php
CHANGED
@@ -67,8 +67,8 @@ final class FLBuilder {
|
|
67 |
* Font awesome urls.
|
68 |
* @since 2.1
|
69 |
*/
|
70 |
-
static public $fa4_url
|
71 |
-
static public $fa5_pro_url = 'https://pro.fontawesome.com/releases/v5.
|
72 |
|
73 |
/**
|
74 |
* Initializes hooks.
|
@@ -78,28 +78,28 @@ final class FLBuilder {
|
|
78 |
*/
|
79 |
static public function init() {
|
80 |
/* Actions */
|
81 |
-
add_action( 'plugins_loaded',
|
82 |
-
add_action( 'send_headers',
|
83 |
-
add_action( 'wp',
|
84 |
-
add_action( 'wp',
|
85 |
-
add_action( 'wp_enqueue_scripts',
|
86 |
-
add_action( 'wp_enqueue_scripts',
|
87 |
-
add_action( 'wp_enqueue_scripts',
|
88 |
-
add_action( 'wp_head',
|
89 |
-
add_action( 'admin_bar_menu',
|
90 |
-
add_action( 'wp_footer',
|
91 |
|
92 |
/* Filters */
|
93 |
-
add_filter( 'fl_builder_render_css',
|
94 |
-
add_filter( 'body_class',
|
95 |
-
add_filter( 'wp_default_editor',
|
96 |
-
add_filter( 'mce_css',
|
97 |
-
add_filter( 'mce_buttons',
|
98 |
-
add_filter( 'mce_buttons_2',
|
99 |
-
add_filter( 'mce_external_plugins',
|
100 |
-
add_filter( 'tiny_mce_before_init',
|
101 |
-
add_filter( 'the_content',
|
102 |
-
add_filter( 'wp_handle_upload_prefilter',
|
103 |
}
|
104 |
|
105 |
/**
|
@@ -383,30 +383,30 @@ final class FLBuilder {
|
|
383 |
$min = ( self::is_debug() ) ? '' : '.min';
|
384 |
|
385 |
// Register additional CSS
|
386 |
-
wp_register_style( 'fl-slideshow',
|
387 |
-
wp_register_style( 'jquery-bxslider',
|
388 |
-
wp_register_style( 'jquery-magnificpopup',
|
389 |
-
wp_register_style( 'yui3',
|
390 |
|
391 |
// Register icon CDN CSS
|
392 |
-
wp_register_style( 'font-awesome',
|
393 |
-
wp_register_style( 'font-awesome-5',
|
394 |
-
wp_register_style( 'foundation-icons',
|
395 |
|
396 |
// Register additional JS
|
397 |
-
wp_register_script( 'fl-slideshow',
|
398 |
-
wp_register_script( 'fl-gallery-grid',
|
399 |
-
wp_register_script( 'jquery-bxslider',
|
400 |
-
wp_register_script( 'jquery-easing',
|
401 |
-
wp_register_script( 'jquery-fitvids',
|
402 |
wp_register_script( 'jquery-infinitescroll', $js_url . 'jquery.infinitescroll.min.js', array( 'jquery' ), $ver, true );
|
403 |
-
wp_register_script( 'jquery-magnificpopup',
|
404 |
-
wp_register_script( 'jquery-mosaicflow',
|
405 |
-
wp_register_script( 'jquery-waypoints',
|
406 |
-
wp_register_script( 'jquery-wookmark',
|
407 |
-
wp_register_script( 'yui3',
|
408 |
-
wp_register_script( 'youtube-player',
|
409 |
-
wp_register_script( 'vimeo-player',
|
410 |
wp_deregister_script( 'imagesloaded' );
|
411 |
wp_register_script( 'imagesloaded', includes_url( 'js/imagesloaded.min.js' ), array( 'jquery' ) );
|
412 |
}
|
@@ -423,7 +423,7 @@ final class FLBuilder {
|
|
423 |
global $post;
|
424 |
|
425 |
$original_post = $post;
|
426 |
-
$is_archive
|
427 |
|
428 |
// Enqueue assets for posts in the main query.
|
429 |
if ( ! $is_archive && isset( $wp_query->posts ) ) {
|
@@ -438,9 +438,9 @@ final class FLBuilder {
|
|
438 |
if ( count( $post_ids ) > 0 ) {
|
439 |
|
440 |
$posts = get_posts(array(
|
441 |
-
'post__in'
|
442 |
-
'post_type'
|
443 |
-
'posts_per_page'
|
444 |
));
|
445 |
|
446 |
foreach ( $posts as $post ) {
|
@@ -552,26 +552,26 @@ final class FLBuilder {
|
|
552 |
$post_id = FLBuilderModel::get_post_id();
|
553 |
$asset_info = FLBuilderModel::get_asset_info();
|
554 |
$asset_ver = FLBuilderModel::get_asset_version();
|
555 |
-
$active
|
556 |
-
$preview
|
557 |
-
$handle
|
558 |
/**
|
559 |
* Use this filter to add dependencies to the dependency array when the main builder layout CSS file is enqueued using wp_enqueue_style.
|
560 |
* @see fl_builder_layout_style_dependencies
|
561 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
562 |
*/
|
563 |
-
$css_deps
|
564 |
-
$css_media
|
565 |
|
566 |
// Enqueue with the global code included?
|
567 |
if ( in_array( 'global-' . $type, self::$enqueued_global_assets ) ) {
|
568 |
-
$path
|
569 |
-
$url
|
570 |
$global = false;
|
571 |
} else {
|
572 |
-
$path
|
573 |
-
$url
|
574 |
-
$global
|
575 |
self::$enqueued_global_assets[] = 'global-' . $type;
|
576 |
}
|
577 |
|
@@ -599,7 +599,7 @@ final class FLBuilder {
|
|
599 |
} else {
|
600 |
|
601 |
// Render if the file doesn't exist.
|
602 |
-
if ( ! in_array( $path, self::$rendered_assets ) && ( ! fl_builder_filesystem()->file_exists( $path ) || $rerender || $preview
|
603 |
call_user_func_array( array( 'FLBuilder', 'render_' . $type ), array( $global ) );
|
604 |
self::$rendered_assets[] = $path;
|
605 |
}
|
@@ -667,24 +667,24 @@ final class FLBuilder {
|
|
667 |
}
|
668 |
wp_enqueue_style( 'font-awesome-5' );
|
669 |
wp_enqueue_style( 'foundation-icons' );
|
670 |
-
wp_enqueue_style( 'jquery-nanoscroller',
|
671 |
-
wp_enqueue_style( 'jquery-autosuggest',
|
672 |
-
wp_enqueue_style( 'jquery-tiptip',
|
673 |
-
wp_enqueue_style( 'bootstrap-tour',
|
674 |
|
675 |
// Enqueue individual builder styles if WP_DEBUG is on.
|
676 |
if ( self::is_debug() ) {
|
677 |
-
wp_enqueue_style( 'fl-color-picker',
|
678 |
-
wp_enqueue_style( 'fl-lightbox',
|
679 |
-
wp_enqueue_style( 'fl-icon-selector',
|
680 |
-
wp_enqueue_style( 'fl-builder',
|
681 |
|
682 |
// skins need to come after default ui styles
|
683 |
wp_enqueue_style( 'fl-builder-ui-skin-dark', $css_url . 'fl-builder-ui-skin-dark.css', array(), $ver );
|
684 |
|
685 |
wp_enqueue_style( 'fl-builder-bundle', $css_url . 'build/builder.bundle.css', array(), $ver );
|
686 |
} else {
|
687 |
-
wp_enqueue_style( 'fl-builder-min',
|
688 |
wp_enqueue_style( 'fl-builder-bundle', $css_url . 'build/builder.bundle.min.css', array(), $ver );
|
689 |
}
|
690 |
|
@@ -693,7 +693,7 @@ final class FLBuilder {
|
|
693 |
|
694 |
/* RTL Support */
|
695 |
if ( is_rtl() ) {
|
696 |
-
wp_enqueue_style( 'fl-builder-rtl',
|
697 |
}
|
698 |
|
699 |
/* We have a custom version of sortable that fixes a bug. */
|
@@ -714,46 +714,50 @@ final class FLBuilder {
|
|
714 |
wp_enqueue_script( 'jquery-ui-widget' );
|
715 |
wp_enqueue_script( 'jquery-ui-position' );
|
716 |
|
|
|
|
|
|
|
|
|
717 |
do_action( 'fl_before_sortable_enqueue' );
|
718 |
|
719 |
-
wp_enqueue_script( 'jquery-ui-sortable',
|
720 |
-
wp_enqueue_script( 'jquery-nanoscroller',
|
721 |
-
wp_enqueue_script( 'jquery-autosuggest',
|
722 |
-
wp_enqueue_script( 'jquery-tiptip',
|
723 |
wp_enqueue_script( 'jquery-showhideevents', $js_url . 'jquery.showhideevents.js', array(), $ver );
|
724 |
-
wp_enqueue_script( 'jquery-simulate',
|
725 |
-
wp_enqueue_script( 'jquery-validate',
|
726 |
-
wp_enqueue_script( 'bootstrap-tour',
|
727 |
-
wp_enqueue_script( 'ace',
|
728 |
-
wp_enqueue_script( 'ace-language-tools',
|
729 |
-
wp_enqueue_script( 'mousetrap',
|
730 |
|
731 |
// Enqueue individual builder scripts if WP_DEBUG is on.
|
732 |
if ( self::is_debug() ) {
|
733 |
-
wp_enqueue_script( 'fl-color-picker',
|
734 |
-
wp_enqueue_script( 'fl-lightbox',
|
735 |
-
wp_enqueue_script( 'fl-icon-selector',
|
736 |
-
wp_enqueue_script( 'fl-stylesheet',
|
737 |
-
wp_enqueue_script( 'fl-builder',
|
738 |
-
wp_enqueue_script( 'fl-builder-ajax-layout',
|
739 |
-
wp_enqueue_script( 'fl-builder-preview',
|
740 |
-
wp_enqueue_script( 'fl-builder-simulate-media-query',
|
741 |
-
wp_enqueue_script( 'fl-builder-responsive-editing',
|
742 |
-
wp_enqueue_script( 'fl-builder-responsive-preview',
|
743 |
-
wp_enqueue_script( 'fl-builder-services',
|
744 |
-
wp_enqueue_script( 'fl-builder-tour',
|
745 |
-
wp_enqueue_script( 'fl-builder-ui',
|
746 |
-
wp_enqueue_script( 'fl-builder-ui-main-menu',
|
747 |
-
wp_enqueue_script( 'fl-builder-ui-panel-content',
|
748 |
-
wp_enqueue_script( 'fl-builder-ui-settings-forms',
|
749 |
-
wp_enqueue_script( 'fl-builder-ui-pinned',
|
750 |
-
wp_enqueue_script( 'fl-builder-revisions',
|
751 |
-
wp_enqueue_script( 'fl-builder-search',
|
752 |
-
wp_enqueue_script( 'fl-builder-save-manager',
|
753 |
-
wp_enqueue_script( 'fl-builder-bundle',
|
754 |
} else {
|
755 |
-
wp_enqueue_script( 'fl-builder-min',
|
756 |
-
wp_enqueue_script( 'fl-builder-bundle',
|
757 |
}
|
758 |
|
759 |
/* Additional module styles and scripts */
|
@@ -780,8 +784,8 @@ final class FLBuilder {
|
|
780 |
* @return array
|
781 |
*/
|
782 |
static public function body_class( $classes ) {
|
783 |
-
$do_render
|
784 |
-
$simple_ui
|
785 |
$template_type = FLBuilderModel::get_user_template_type();
|
786 |
|
787 |
if ( $do_render && FLBuilderModel::is_builder_enabled() && ! is_archive() ) {
|
@@ -807,7 +811,7 @@ final class FLBuilder {
|
|
807 |
|
808 |
// Skin
|
809 |
$user_settings = FLBuilderUserSettings::get();
|
810 |
-
$classes[]
|
811 |
|
812 |
// Draft changes
|
813 |
if ( FLBuilderModel::layout_has_drafted_changes() ) {
|
@@ -844,7 +848,7 @@ final class FLBuilder {
|
|
844 |
if ( FLBuilderModel::is_post_editable() && is_object( $wp_the_query->post ) ) {
|
845 |
|
846 |
$enabled = get_post_meta( $wp_the_query->post->ID, '_fl_builder_enabled', true );
|
847 |
-
$dot
|
848 |
|
849 |
$wp_admin_bar->add_node( array(
|
850 |
'id' => 'fl-builder-frontend-edit-link',
|
@@ -856,8 +860,8 @@ final class FLBuilder {
|
|
856 |
|
857 |
static public function locate_template_file( $template_base, $slug ) {
|
858 |
$specific_template = $template_base . '-' . $slug . '.php';
|
859 |
-
$general_template
|
860 |
-
$default_dir
|
861 |
|
862 |
// Try to find the specific template, then repeat the same process for general.
|
863 |
|
@@ -929,10 +933,10 @@ final class FLBuilder {
|
|
929 |
|
930 |
if ( FLBuilderModel::is_builder_active() ) {
|
931 |
|
932 |
-
$post_id
|
933 |
-
$unrestricted
|
934 |
-
$simple_ui
|
935 |
-
$global_settings
|
936 |
|
937 |
include FL_BUILDER_DIR . 'includes/ui-extras.php';
|
938 |
include FL_BUILDER_DIR . 'includes/ui-js-templates.php';
|
@@ -949,31 +953,31 @@ final class FLBuilder {
|
|
949 |
static function get_main_menu_data() {
|
950 |
global $post;
|
951 |
|
952 |
-
$views
|
953 |
$is_lite = true === FL_BUILDER_LITE; // @codingStandardsIgnoreLine
|
954 |
-
$is_user_template
|
955 |
$enabled_templates = FLBuilderModel::get_enabled_templates();
|
956 |
-
$is_simple_ui
|
957 |
-
$key_shortcuts
|
958 |
-
$help
|
959 |
-
$default_view
|
960 |
-
'name'
|
961 |
-
'isShowing'
|
962 |
'isRootView' => false,
|
963 |
-
'items'
|
964 |
);
|
965 |
|
966 |
// Tools
|
967 |
$tools_view = array(
|
968 |
-
'name'
|
969 |
-
'isShowing'
|
970 |
'isRootView' => true,
|
971 |
-
'items'
|
972 |
);
|
973 |
|
974 |
$tools_view['items'][04] = array(
|
975 |
-
'label'
|
976 |
-
'type'
|
977 |
'eventName' => 'publishAndRemain',
|
978 |
'accessory' => $key_shortcuts['publishAndRemain']['keyLabel'],
|
979 |
);
|
@@ -984,29 +988,29 @@ final class FLBuilder {
|
|
984 |
|
985 |
if ( ! $is_lite && ! $is_user_template && ( 'enabled' == $enabled_templates || 'user' == $enabled_templates ) ) {
|
986 |
$tools_view['items'][10] = array(
|
987 |
-
'label'
|
988 |
-
'type'
|
989 |
'eventName' => 'saveTemplate',
|
990 |
'accessory' => $key_shortcuts['saveTemplate']['keyLabel'],
|
991 |
);
|
992 |
}
|
993 |
|
994 |
$tools_view['items'][20] = array(
|
995 |
-
'label'
|
996 |
-
'type'
|
997 |
'eventName' => 'duplicateLayout',
|
998 |
);
|
999 |
|
1000 |
$tools_view['items'][30] = array(
|
1001 |
-
'label'
|
1002 |
-
'type'
|
1003 |
'eventName' => 'previewLayout',
|
1004 |
'accessory' => $key_shortcuts['previewLayout']['keyLabel'],
|
1005 |
);
|
1006 |
|
1007 |
$tools_view['items'][31] = array(
|
1008 |
-
'label'
|
1009 |
-
'type'
|
1010 |
'eventName' => 'responsiveEditing',
|
1011 |
'accessory' => $key_shortcuts['responsiveEditing']['keyLabel'],
|
1012 |
);
|
@@ -1016,15 +1020,15 @@ final class FLBuilder {
|
|
1016 |
);
|
1017 |
|
1018 |
$tools_view['items'][50] = array(
|
1019 |
-
'label'
|
1020 |
-
'type'
|
1021 |
'eventName' => 'showLayoutSettings',
|
1022 |
'accessory' => $key_shortcuts['showLayoutSettings']['keyLabel'],
|
1023 |
);
|
1024 |
|
1025 |
$tools_view['items'][60] = array(
|
1026 |
-
'label'
|
1027 |
-
'type'
|
1028 |
'eventName' => 'showGlobalSettings',
|
1029 |
'accessory' => $key_shortcuts['showGlobalSettings']['keyLabel'],
|
1030 |
);
|
@@ -1034,29 +1038,29 @@ final class FLBuilder {
|
|
1034 |
);
|
1035 |
|
1036 |
$tools_view['items'][80] = array(
|
1037 |
-
'label'
|
1038 |
-
'type'
|
1039 |
'eventName' => 'toggleUISkin',
|
1040 |
'accessory' => $key_shortcuts['toggleUISkin']['keyLabel'],
|
1041 |
);
|
1042 |
|
1043 |
$tools_view['items'][100] = array(
|
1044 |
'label' => __( 'WordPress Admin', 'fl-builder' ),
|
1045 |
-
'type'
|
1046 |
-
'view'
|
1047 |
);
|
1048 |
|
1049 |
if ( $help['enabled'] && ! $is_simple_ui ) {
|
1050 |
$tools_view['items'][110] = array(
|
1051 |
'label' => __( 'Help', 'fl-builder' ),
|
1052 |
-
'type'
|
1053 |
-
'view'
|
1054 |
);
|
1055 |
}
|
1056 |
|
1057 |
$tools_view['items'][120] = array(
|
1058 |
-
'label'
|
1059 |
-
'type'
|
1060 |
'eventName' => 'showKeyboardShortcuts',
|
1061 |
);
|
1062 |
|
@@ -1064,17 +1068,17 @@ final class FLBuilder {
|
|
1064 |
|
1065 |
// Admin
|
1066 |
$admin_view = array(
|
1067 |
-
'name'
|
1068 |
'items' => array(),
|
1069 |
);
|
1070 |
|
1071 |
// Edit current post/page/cpt
|
1072 |
if ( is_single( $post->ID ) || is_page( $post->ID ) ) {
|
1073 |
-
$edit_label
|
1074 |
$admin_view['items'][10] = array(
|
1075 |
'label' => $edit_label,
|
1076 |
-
'type'
|
1077 |
-
'url'
|
1078 |
);
|
1079 |
}
|
1080 |
|
@@ -1085,8 +1089,8 @@ final class FLBuilder {
|
|
1085 |
// Dashboard
|
1086 |
$admin_view['items'][17] = array(
|
1087 |
'label' => _x( 'Dashboard', 'label for the WordPress Dashboard link', 'fl-builder' ),
|
1088 |
-
'type'
|
1089 |
-
'url'
|
1090 |
);
|
1091 |
|
1092 |
$templates_enabled = FLBuilderUserAccess::current_user_can( 'builder_admin' );
|
@@ -1094,8 +1098,8 @@ final class FLBuilder {
|
|
1094 |
if ( $templates_enabled ) {
|
1095 |
$admin_view['items'][20] = array(
|
1096 |
'label' => __( 'Manage Templates', 'fl-builder' ),
|
1097 |
-
'type'
|
1098 |
-
'url'
|
1099 |
);
|
1100 |
}
|
1101 |
|
@@ -1108,8 +1112,8 @@ final class FLBuilder {
|
|
1108 |
}
|
1109 |
$admin_view['items'][30] = array(
|
1110 |
'label' => __( 'Customize Theme', 'fl-builder' ),
|
1111 |
-
'type'
|
1112 |
-
'url'
|
1113 |
);
|
1114 |
}
|
1115 |
|
@@ -1118,7 +1122,7 @@ final class FLBuilder {
|
|
1118 |
// Help
|
1119 |
if ( $help['enabled'] && ! $is_simple_ui ) {
|
1120 |
$help_view = array(
|
1121 |
-
'name'
|
1122 |
'items' => array(),
|
1123 |
);
|
1124 |
|
@@ -1130,15 +1134,15 @@ final class FLBuilder {
|
|
1130 |
$help['video_embed'] = str_replace( 'height="315"', 'height="173"', $help['video_embed'] );
|
1131 |
|
1132 |
$help_view['items'][10] = array(
|
1133 |
-
'type'
|
1134 |
'embed' => $help['video_embed'],
|
1135 |
);
|
1136 |
}
|
1137 |
|
1138 |
if ( $help['tour'] ) {
|
1139 |
$help_view['items'][20] = array(
|
1140 |
-
'label'
|
1141 |
-
'type'
|
1142 |
'eventName' => 'beginTour',
|
1143 |
);
|
1144 |
}
|
@@ -1146,16 +1150,16 @@ final class FLBuilder {
|
|
1146 |
if ( $help['knowledge_base'] && isset( $help['knowledge_base_url'] ) ) {
|
1147 |
$help_view['items'][30] = array(
|
1148 |
'label' => __( 'View Knowledge Base', 'fl-builder' ),
|
1149 |
-
'type'
|
1150 |
-
'url'
|
1151 |
);
|
1152 |
}
|
1153 |
|
1154 |
if ( $help['forums'] && isset( $help['forums_url'] ) ) {
|
1155 |
$help_view['items'][40] = array(
|
1156 |
'label' => __( 'Contact Support', 'fl-builder' ),
|
1157 |
-
'type'
|
1158 |
-
'url'
|
1159 |
);
|
1160 |
}
|
1161 |
|
@@ -1174,73 +1178,73 @@ final class FLBuilder {
|
|
1174 |
*/
|
1175 |
static function get_keyboard_shortcuts() {
|
1176 |
$default_action = array(
|
1177 |
-
'label'
|
1178 |
-
'keyCode'
|
1179 |
'keyLabel' => '',
|
1180 |
'isGlobal' => false,
|
1181 |
-
'enabled'
|
1182 |
);
|
1183 |
-
$data
|
1184 |
-
'showModules'
|
1185 |
-
'label'
|
1186 |
'keyCode' => 'j',
|
1187 |
),
|
1188 |
-
'showRows'
|
1189 |
-
'label'
|
1190 |
'keyCode' => 'k',
|
1191 |
),
|
1192 |
-
'showTemplates'
|
1193 |
-
'label'
|
1194 |
'keyCode' => 'l',
|
1195 |
),
|
1196 |
-
'showSaved'
|
1197 |
-
'label'
|
1198 |
'keyCode' => ';',
|
1199 |
'enabled' => true !== FL_BUILDER_LITE,
|
1200 |
),
|
1201 |
-
'saveTemplate'
|
1202 |
-
'label'
|
1203 |
'keyCode' => 'mod+j',
|
1204 |
'enabled' => true !== FL_BUILDER_LITE,
|
1205 |
),
|
1206 |
-
'previewLayout'
|
1207 |
-
'label'
|
1208 |
'keyCode' => 'p',
|
1209 |
),
|
1210 |
-
'responsiveEditing'
|
1211 |
-
'label'
|
1212 |
'keyCode' => 'r',
|
1213 |
),
|
1214 |
'showGlobalSettings' => array(
|
1215 |
-
'label'
|
1216 |
'keyCode' => 'mod+u',
|
1217 |
),
|
1218 |
'showLayoutSettings' => array(
|
1219 |
-
'label'
|
1220 |
'keyCode' => 'mod+y',
|
1221 |
),
|
1222 |
-
'toggleUISkin'
|
1223 |
-
'label'
|
1224 |
'keyCode' => 'o',
|
1225 |
),
|
1226 |
-
'showSearch'
|
1227 |
-
'label'
|
1228 |
'keyCode' => 'mod+i',
|
1229 |
'enabled' => true !== FL_BUILDER_LITE,
|
1230 |
),
|
1231 |
-
'showSavedMessage'
|
1232 |
-
'label'
|
1233 |
-
'keyCode'
|
1234 |
'isGlobal' => true,
|
1235 |
),
|
1236 |
-
'publishAndRemain'
|
1237 |
-
'label'
|
1238 |
-
'keyCode'
|
1239 |
'isGlobal' => true,
|
1240 |
),
|
1241 |
-
'cancelTask'
|
1242 |
-
'label'
|
1243 |
-
'keyCode'
|
1244 |
'isGlobal' => true,
|
1245 |
),
|
1246 |
);
|
@@ -1252,7 +1256,7 @@ final class FLBuilder {
|
|
1252 |
// Check for old (alpha) format and normalize
|
1253 |
if ( is_string( $args ) ) {
|
1254 |
$args = array(
|
1255 |
-
'label'
|
1256 |
'keyCode' => $args,
|
1257 |
);
|
1258 |
}
|
@@ -1295,7 +1299,7 @@ final class FLBuilder {
|
|
1295 |
$code = str_replace( 'right', '→', $code );
|
1296 |
|
1297 |
$args['keyLabel'] = $code;
|
1298 |
-
$data[ $hook ]
|
1299 |
}
|
1300 |
|
1301 |
return $data;
|
@@ -1312,8 +1316,8 @@ final class FLBuilder {
|
|
1312 |
global $post;
|
1313 |
$simple_ui = ! FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
1314 |
|
1315 |
-
$title
|
1316 |
-
$icon_url
|
1317 |
$wrapper_classes = array( 'fl-builder-bar-title' );
|
1318 |
|
1319 |
if ( '' == $icon_url ) {
|
@@ -1321,8 +1325,8 @@ final class FLBuilder {
|
|
1321 |
}
|
1322 |
|
1323 |
$edited_object_label = get_post_type_object( $post->post_type )->labels->singular_name;
|
1324 |
-
$pretitle
|
1325 |
-
$pretitle
|
1326 |
|
1327 |
// Render the bar title.
|
1328 |
include FL_BUILDER_DIR . 'includes/ui-bar-title-area.php';
|
@@ -1335,53 +1339,53 @@ final class FLBuilder {
|
|
1335 |
* @return void
|
1336 |
*/
|
1337 |
static public function render_ui_bar_buttons() {
|
1338 |
-
$help_button
|
1339 |
-
$simple_ui
|
1340 |
$should_display_search = ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui;
|
1341 |
-
$add_btn_svg
|
1342 |
-
$notifications
|
1343 |
-
$feedback_label
|
1344 |
-
$show_feedback
|
1345 |
|
1346 |
if ( strstr( FL_BUILDER_VERSION, '-dev' ) ) {
|
1347 |
$show_feedback = true;
|
1348 |
} elseif ( strstr( FL_BUILDER_VERSION, '-alpha' ) ) {
|
1349 |
$feedback_label = __( 'Alpha Feedback', 'fl-builder' );
|
1350 |
-
$show_feedback
|
1351 |
} elseif ( strstr( FL_BUILDER_VERSION, '-beta' ) ) {
|
1352 |
$feedback_label = __( 'Beta Feedback', 'fl-builder' );
|
1353 |
-
$show_feedback
|
1354 |
}
|
1355 |
|
1356 |
$buttons = apply_filters( 'fl_builder_ui_bar_buttons', array(
|
1357 |
-
'feedback'
|
1358 |
-
'label'
|
1359 |
-
'show'
|
1360 |
'onclick' => "window.open('" . FLBuilderModel::get_store_url( 'contact', array(
|
1361 |
-
'topic'
|
1362 |
'utm_medium' => true === FL_BUILDER_LITE ? 'bb-lite' : 'bb-pro',
|
1363 |
'utm_source' => 'builder-ui',
|
1364 |
'utm_campaign' => 'feedback-cta',
|
1365 |
) ) . "');",
|
1366 |
),
|
1367 |
-
'upgrade'
|
1368 |
'label' => __( 'Upgrade Today', 'fl-builder' ) . ' <i class="fas fa-external-link-alt"></i>',
|
1369 |
-
'show'
|
1370 |
),
|
1371 |
-
'buy'
|
1372 |
'label' => __( 'Buy Now', 'fl-builder' ) . ' <i class="fas fa-external-link-alt"></i>',
|
1373 |
-
'show'
|
1374 |
),
|
1375 |
-
'done'
|
1376 |
'label' => __( 'Done', 'fl-builder' ),
|
1377 |
),
|
1378 |
'content-panel' => array(
|
1379 |
'label' => $add_btn_svg,
|
1380 |
-
'show'
|
1381 |
),
|
1382 |
-
'add-content'
|
1383 |
'label' => $add_btn_svg,
|
1384 |
-
'show'
|
1385 |
),
|
1386 |
) );
|
1387 |
|
@@ -1517,15 +1521,26 @@ final class FLBuilder {
|
|
1517 |
// Prevent the builder's render_content filter from running.
|
1518 |
add_filter( 'fl_builder_do_render_content', '__return_false' );
|
1519 |
|
1520 |
-
|
|
|
|
|
|
|
1521 |
do_action( 'fl_builder_render_content_start' );
|
1522 |
|
1523 |
// Render the content.
|
1524 |
ob_start();
|
|
|
|
|
|
|
|
|
1525 |
do_action( 'fl_builder_before_render_content' );
|
1526 |
echo '<' . $tag . ' class="' . self::render_content_classes() . '" data-post-id="' . $post_id . '"' . $attr_string . '>';
|
1527 |
self::render_nodes();
|
1528 |
echo '</' . $tag . '>';
|
|
|
|
|
|
|
|
|
1529 |
do_action( 'fl_builder_after_render_content' );
|
1530 |
$content = ob_get_clean();
|
1531 |
|
@@ -1547,7 +1562,10 @@ final class FLBuilder {
|
|
1547 |
$content = wp_make_content_images_responsive( $content );
|
1548 |
}
|
1549 |
|
1550 |
-
|
|
|
|
|
|
|
1551 |
do_action( 'fl_builder_render_content_complete' );
|
1552 |
|
1553 |
// Stop forcing the builder to use this post ID.
|
@@ -1568,12 +1586,12 @@ final class FLBuilder {
|
|
1568 |
* @return string
|
1569 |
*/
|
1570 |
static public function render_content( $content ) {
|
1571 |
-
$post_id
|
1572 |
-
$enabled
|
1573 |
-
$rendering
|
1574 |
-
$do_render
|
1575 |
-
$in_loop
|
1576 |
-
$is_global
|
1577 |
|
1578 |
if ( $enabled && ! $rendering && $do_render && ( $in_loop || $is_global ) ) {
|
1579 |
|
@@ -1647,12 +1665,20 @@ final class FLBuilder {
|
|
1647 |
* @return void
|
1648 |
*/
|
1649 |
static public function render_nodes() {
|
|
|
|
|
|
|
|
|
1650 |
do_action( 'fl_builder_before_render_nodes' );
|
1651 |
|
1652 |
if ( apply_filters( 'fl_builder_render_nodes', true ) ) {
|
1653 |
self::render_rows();
|
1654 |
}
|
1655 |
|
|
|
|
|
|
|
|
|
1656 |
do_action( 'fl_builder_after_render_nodes' );
|
1657 |
}
|
1658 |
|
@@ -1760,14 +1786,14 @@ final class FLBuilder {
|
|
1760 |
$content = ob_get_clean();
|
1761 |
|
1762 |
// Remove unnecessary tags and attributes.
|
1763 |
-
$content = preg_replace( '/<\/?div[^>]*\>/i',
|
1764 |
-
$content = preg_replace( '/<\/?span[^>]*\>/i',
|
1765 |
-
$content = preg_replace( '#<script(.*?)>(.*?)</script>#is',
|
1766 |
-
$content = preg_replace( '/<\/?noscript[^>]*\>/i',
|
1767 |
-
$content = preg_replace( '#<svg(.*?)>(.*?)</svg>#is',
|
1768 |
-
$content = preg_replace( '/<i [^>]*><\\/i[^>]*>/',
|
1769 |
-
$content = preg_replace( '/ class=".*?"/',
|
1770 |
-
$content = preg_replace( '/ style=".*?"/',
|
1771 |
|
1772 |
// Remove empty lines.
|
1773 |
$content = preg_replace( '/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/', "\n", $content );
|
@@ -1840,12 +1866,20 @@ final class FLBuilder {
|
|
1840 |
static public function render_rows() {
|
1841 |
$rows = FLBuilderModel::get_nodes( 'row' );
|
1842 |
|
|
|
|
|
|
|
|
|
1843 |
do_action( 'fl_builder_before_render_rows', $rows );
|
1844 |
|
1845 |
foreach ( $rows as $row ) {
|
1846 |
self::render_row( $row );
|
1847 |
}
|
1848 |
|
|
|
|
|
|
|
|
|
1849 |
do_action( 'fl_builder_after_render_rows', $rows );
|
1850 |
}
|
1851 |
|
@@ -1859,13 +1893,17 @@ final class FLBuilder {
|
|
1859 |
static public function render_row( $row ) {
|
1860 |
global $wp_the_query;
|
1861 |
|
1862 |
-
$groups
|
1863 |
$post_id = FLBuilderModel::get_post_id();
|
1864 |
-
$active
|
1865 |
$visible = FLBuilderModel::is_node_visible( $row );
|
1866 |
|
1867 |
if ( $active || $visible ) {
|
1868 |
|
|
|
|
|
|
|
|
|
1869 |
do_action( 'fl_builder_before_render_row', $row, $groups );
|
1870 |
|
1871 |
$template_file = self::locate_template_file(
|
@@ -1877,6 +1915,10 @@ final class FLBuilder {
|
|
1877 |
include $template_file;
|
1878 |
}
|
1879 |
|
|
|
|
|
|
|
|
|
1880 |
do_action( 'fl_builder_after_render_row', $row, $groups );
|
1881 |
}
|
1882 |
}
|
@@ -1896,18 +1938,18 @@ final class FLBuilder {
|
|
1896 |
*/
|
1897 |
$custom_class = apply_filters( 'fl_builder_row_custom_class', $row->settings->class, $row );
|
1898 |
$overlay_bgs = array( 'photo', 'parallax', 'slideshow', 'video' );
|
1899 |
-
$active
|
1900 |
-
$visible
|
1901 |
-
$has_rules
|
1902 |
$attrs = array(
|
1903 |
-
'id'
|
1904 |
-
'class'
|
1905 |
'fl-row',
|
1906 |
'fl-row-' . $row->settings->width . '-width',
|
1907 |
'fl-row-bg-' . $row->settings->bg_type,
|
1908 |
'fl-node-' . $row->node,
|
1909 |
),
|
1910 |
-
'data-node'
|
1911 |
);
|
1912 |
|
1913 |
// Classes
|
@@ -1938,7 +1980,7 @@ final class FLBuilder {
|
|
1938 |
$attrs['class'][] = 'fl-visible-' . $row->settings->responsive_display;
|
1939 |
}
|
1940 |
if ( is_array( $row->settings->animation ) && ! empty( $row->settings->animation['style'] ) ) {
|
1941 |
-
$attrs['class'][]
|
1942 |
$attrs['data-animation-delay'][] = $row->settings->animation['delay'];
|
1943 |
if ( isset( $row->settings->animation['duration'] ) ) {
|
1944 |
$attrs['data-animation-duration'][] = $row->settings->animation['duration'];
|
@@ -1974,6 +2016,10 @@ final class FLBuilder {
|
|
1974 |
* @return void
|
1975 |
*/
|
1976 |
static public function render_row_bg( $row ) {
|
|
|
|
|
|
|
|
|
1977 |
do_action( 'fl_builder_before_render_row_bg', $row );
|
1978 |
|
1979 |
if ( 'video' == $row->settings->bg_type ) {
|
@@ -1994,6 +2040,10 @@ final class FLBuilder {
|
|
1994 |
echo '<div class="fl-bg-slideshow"></div>';
|
1995 |
}
|
1996 |
|
|
|
|
|
|
|
|
|
1997 |
do_action( 'fl_builder_after_render_row_bg', $row );
|
1998 |
}
|
1999 |
|
@@ -2020,6 +2070,10 @@ final class FLBuilder {
|
|
2020 |
static public function render_column_group( $group ) {
|
2021 |
$cols = FLBuilderModel::get_nodes( 'column', $group );
|
2022 |
|
|
|
|
|
|
|
|
|
2023 |
do_action( 'fl_builder_before_render_column_group', $group, $cols );
|
2024 |
|
2025 |
$template_file = self::locate_template_file(
|
@@ -2030,7 +2084,10 @@ final class FLBuilder {
|
|
2030 |
if ( $template_file ) {
|
2031 |
include $template_file;
|
2032 |
}
|
2033 |
-
|
|
|
|
|
|
|
2034 |
do_action( 'fl_builder_after_render_column_group', $group, $cols );
|
2035 |
}
|
2036 |
|
@@ -2045,7 +2102,7 @@ final class FLBuilder {
|
|
2045 |
$cols = FLBuilderModel::get_nodes( 'column', $group );
|
2046 |
$parent = FLBuilderModel::get_node_parent( $group );
|
2047 |
$attrs = array(
|
2048 |
-
'class'
|
2049 |
'fl-col-group',
|
2050 |
'fl-node-' . $group->node,
|
2051 |
),
|
@@ -2093,9 +2150,9 @@ final class FLBuilder {
|
|
2093 |
static public function render_column( $col_id = null ) {
|
2094 |
global $wp_the_query;
|
2095 |
|
2096 |
-
$col
|
2097 |
$post_id = FLBuilderModel::get_post_id();
|
2098 |
-
$active
|
2099 |
$visible = FLBuilderModel::is_node_visible( $col );
|
2100 |
|
2101 |
if ( $active || $visible ) {
|
@@ -2119,17 +2176,17 @@ final class FLBuilder {
|
|
2119 |
$custom_class = apply_filters( 'fl_builder_column_custom_class', $col->settings->class, $col );
|
2120 |
$overlay_bgs = array( 'photo' );
|
2121 |
$nested = FLBuilderModel::get_nodes( 'column-group', $col );
|
2122 |
-
$active
|
2123 |
-
$visible
|
2124 |
-
$has_rules
|
2125 |
$attrs = array(
|
2126 |
-
'id'
|
2127 |
-
'class'
|
2128 |
'fl-col',
|
2129 |
'fl-node-' . $col->node,
|
2130 |
),
|
2131 |
-
'data-node'
|
2132 |
-
'style'
|
2133 |
);
|
2134 |
|
2135 |
// Classes
|
@@ -2150,7 +2207,7 @@ final class FLBuilder {
|
|
2150 |
$attrs['class'][] = 'fl-visible-' . $col->settings->responsive_display;
|
2151 |
}
|
2152 |
if ( is_array( $col->settings->animation ) && ! empty( $col->settings->animation['style'] ) ) {
|
2153 |
-
$attrs['class'][]
|
2154 |
$attrs['data-animation-delay'][] = $col->settings->animation['delay'];
|
2155 |
if ( isset( $col->settings->animation['duration'] ) ) {
|
2156 |
$attrs['data-animation-duration'][] = $col->settings->animation['duration'];
|
@@ -2171,7 +2228,10 @@ final class FLBuilder {
|
|
2171 |
$attrs['style'][] = 'width: ' . $col->settings->size . '%;';
|
2172 |
}
|
2173 |
|
2174 |
-
|
|
|
|
|
|
|
2175 |
self::render_node_attributes( apply_filters( 'fl_builder_column_attributes', $attrs, $col ) );
|
2176 |
}
|
2177 |
|
@@ -2185,6 +2245,10 @@ final class FLBuilder {
|
|
2185 |
static public function render_modules( $col_id = null ) {
|
2186 |
$nodes = FLBuilderModel::get_nodes( null, $col_id );
|
2187 |
|
|
|
|
|
|
|
|
|
2188 |
do_action( 'fl_builder_before_render_modules', $nodes, $col_id );
|
2189 |
|
2190 |
foreach ( $nodes as $node ) {
|
@@ -2195,7 +2259,10 @@ final class FLBuilder {
|
|
2195 |
self::render_column_group( $node );
|
2196 |
}
|
2197 |
}
|
2198 |
-
|
|
|
|
|
|
|
2199 |
do_action( 'fl_builder_after_render_modules', $nodes, $col_id );
|
2200 |
}
|
2201 |
|
@@ -2209,26 +2276,34 @@ final class FLBuilder {
|
|
2209 |
static public function render_module( $module_id = null ) {
|
2210 |
global $wp_the_query;
|
2211 |
|
2212 |
-
$module
|
2213 |
-
$settings
|
2214 |
-
$id
|
2215 |
-
$post_id
|
2216 |
-
$active
|
2217 |
-
$visible
|
2218 |
|
2219 |
if ( $active || $visible ) {
|
2220 |
|
|
|
|
|
|
|
|
|
2221 |
do_action( 'fl_builder_before_render_module', $module );
|
2222 |
|
2223 |
$template_file = self::locate_template_file(
|
2224 |
apply_filters( 'fl_builder_module_template_base', 'module', $module ),
|
2225 |
-
apply_filters( 'fl_builder_module_template_slug', '',
|
2226 |
);
|
2227 |
|
2228 |
if ( $template_file ) {
|
2229 |
include $template_file;
|
2230 |
}
|
2231 |
|
|
|
|
|
|
|
|
|
2232 |
do_action( 'fl_builder_after_render_module', $module );
|
2233 |
}
|
2234 |
}
|
@@ -2250,23 +2325,37 @@ final class FLBuilder {
|
|
2250 |
$settings = (object) array_merge( (array) $defaults, (array) $settings );
|
2251 |
|
2252 |
// Module
|
2253 |
-
$class
|
2254 |
-
$module
|
2255 |
$module->settings = FLBuilderSettingsCompat::filter_node_settings( 'module', $settings );
|
2256 |
|
2257 |
// Shorthand reference to the module's id.
|
2258 |
$id = $module->node;
|
2259 |
|
|
|
|
|
|
|
|
|
|
|
2260 |
do_action( 'fl_builder_render_module_html_before', $type, $settings, $module );
|
2261 |
|
2262 |
ob_start();
|
2263 |
|
2264 |
-
|
|
|
|
|
|
|
|
|
2265 |
|
2266 |
$content = ob_get_clean();
|
2267 |
|
2268 |
echo apply_filters( 'fl_builder_render_module_html_content', $content, $type, $settings, $module );
|
2269 |
|
|
|
|
|
|
|
|
|
|
|
2270 |
do_action( 'fl_builder_render_module_html_after', $type, $settings, $module );
|
2271 |
}
|
2272 |
|
@@ -2284,17 +2373,17 @@ final class FLBuilder {
|
|
2284 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
2285 |
*/
|
2286 |
$custom_class = apply_filters( 'fl_builder_module_custom_class', $module->settings->class, $module );
|
2287 |
-
$active
|
2288 |
-
$visible
|
2289 |
-
$has_rules
|
2290 |
$attrs = array(
|
2291 |
-
'id'
|
2292 |
-
'class'
|
2293 |
'fl-module',
|
2294 |
'fl-module-' . $module->settings->type,
|
2295 |
'fl-node-' . $module->node,
|
2296 |
),
|
2297 |
-
'data-node'
|
2298 |
);
|
2299 |
|
2300 |
// Classes
|
@@ -2302,7 +2391,7 @@ final class FLBuilder {
|
|
2302 |
$attrs['class'][] = 'fl-visible-' . $module->settings->responsive_display;
|
2303 |
}
|
2304 |
if ( is_array( $module->settings->animation ) && ! empty( $module->settings->animation['style'] ) ) {
|
2305 |
-
$attrs['class'][]
|
2306 |
$attrs['data-animation-delay'][] = $module->settings->animation['delay'];
|
2307 |
if ( isset( $module->settings->animation['duration'] ) ) {
|
2308 |
$attrs['data-animation-duration'][] = $module->settings->animation['duration'];
|
@@ -2321,11 +2410,14 @@ final class FLBuilder {
|
|
2321 |
// Data
|
2322 |
if ( $active ) {
|
2323 |
$attrs['data-parent'] = $module->parent;
|
2324 |
-
$attrs['data-type']
|
2325 |
-
$attrs['data-name']
|
2326 |
}
|
2327 |
|
2328 |
-
|
|
|
|
|
|
|
2329 |
self::render_node_attributes( apply_filters( 'fl_builder_module_attributes', $attrs, $module ) );
|
2330 |
}
|
2331 |
|
@@ -2347,13 +2439,13 @@ final class FLBuilder {
|
|
2347 |
static public function render_module_css( $type, $id, $settings ) {
|
2348 |
// Settings
|
2349 |
$global_settings = FLBuilderModel::get_global_settings();
|
2350 |
-
$defaults
|
2351 |
-
$settings
|
2352 |
-
$settings
|
2353 |
|
2354 |
// Module
|
2355 |
-
$class
|
2356 |
-
$module
|
2357 |
$module->settings = FLBuilderSettingsCompat::filter_node_settings( 'module', $settings );
|
2358 |
|
2359 |
// CSS
|
@@ -2405,16 +2497,16 @@ final class FLBuilder {
|
|
2405 |
*/
|
2406 |
|
2407 |
static public function render_css( $include_global = true ) {
|
2408 |
-
$active
|
2409 |
-
$nodes
|
2410 |
-
$node_status
|
2411 |
-
$global_settings
|
2412 |
-
$asset_info
|
2413 |
-
$enqueuemethod
|
2414 |
-
$post_id
|
2415 |
-
$post
|
2416 |
-
$css
|
2417 |
-
$path
|
2418 |
|
2419 |
// Render the global css.
|
2420 |
if ( $include_global ) {
|
@@ -2426,7 +2518,7 @@ final class FLBuilder {
|
|
2426 |
|
2427 |
// Instance row css
|
2428 |
$settings = $row->settings;
|
2429 |
-
$id
|
2430 |
ob_start();
|
2431 |
include FL_BUILDER_DIR . 'includes/row-css.php';
|
2432 |
FLBuilderCSS::render();
|
@@ -2447,7 +2539,7 @@ final class FLBuilder {
|
|
2447 |
|
2448 |
// Instance column css
|
2449 |
$settings = $col->settings;
|
2450 |
-
$id
|
2451 |
ob_start();
|
2452 |
include FL_BUILDER_DIR . 'includes/column-css.php';
|
2453 |
FLBuilderCSS::render();
|
@@ -2467,7 +2559,7 @@ final class FLBuilder {
|
|
2467 |
foreach ( $nodes['modules'] as $module ) {
|
2468 |
|
2469 |
// Global module css
|
2470 |
-
$file
|
2471 |
$file_responsive = $module->dir . 'css/frontend.responsive.css';
|
2472 |
|
2473 |
// Only include global module css that hasn't been included yet.
|
@@ -2490,9 +2582,9 @@ final class FLBuilder {
|
|
2490 |
}
|
2491 |
|
2492 |
// Instance module css
|
2493 |
-
$file
|
2494 |
-
$settings
|
2495 |
-
$id
|
2496 |
|
2497 |
if ( ! in_array( $id, self::$enqueued_module_css_assets ) && fl_builder_filesystem()->file_exists( $file ) ) {
|
2498 |
self::$enqueued_module_css_assets[] = $id;
|
@@ -2549,6 +2641,10 @@ final class FLBuilder {
|
|
2549 |
fl_builder_filesystem()->file_put_contents( $path, $css );
|
2550 |
}
|
2551 |
|
|
|
|
|
|
|
|
|
2552 |
do_action( 'fl_builder_after_render_css' );
|
2553 |
|
2554 |
return $css;
|
@@ -2565,31 +2661,31 @@ final class FLBuilder {
|
|
2565 |
$global_settings = FLBuilderModel::get_global_settings();
|
2566 |
|
2567 |
// Core layout css
|
2568 |
-
$css = fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . '
|
2569 |
|
2570 |
// Core button defaults
|
2571 |
if ( ! defined( 'FL_THEME_VERSION' ) ) {
|
2572 |
-
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . '
|
2573 |
}
|
2574 |
|
2575 |
// Core layout RTL css
|
2576 |
if ( is_rtl() ) {
|
2577 |
-
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . '
|
2578 |
}
|
2579 |
|
2580 |
// Global node css
|
2581 |
foreach ( array(
|
2582 |
-
array( 'row_margins',
|
2583 |
-
array( 'row_padding',
|
2584 |
-
array( 'row_width',
|
2585 |
-
array( 'column_margins',
|
2586 |
-
array( 'column_padding',
|
2587 |
array( 'module_margins', '.fl-module-content { margin: ' ),
|
2588 |
) as $data ) {
|
2589 |
if ( '' !== $global_settings->{ $data[0] } ) {
|
2590 |
$value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
|
2591 |
-
$css
|
2592 |
-
$css
|
2593 |
}
|
2594 |
}
|
2595 |
|
@@ -2600,20 +2696,20 @@ final class FLBuilder {
|
|
2600 |
$css .= '@media (max-width: ' . $global_settings->medium_breakpoint . 'px) { ';
|
2601 |
|
2602 |
// Core medium layout css
|
2603 |
-
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . '
|
2604 |
|
2605 |
// Global node medium css
|
2606 |
foreach ( array(
|
2607 |
-
|
2608 |
-
|
2609 |
-
|
2610 |
-
|
2611 |
-
|
2612 |
-
|
2613 |
if ( '' !== $global_settings->{ $data[0] } ) {
|
2614 |
$value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
|
2615 |
-
$css
|
2616 |
-
$css
|
2617 |
}
|
2618 |
}
|
2619 |
|
@@ -2623,25 +2719,25 @@ final class FLBuilder {
|
|
2623 |
$css .= '@media (max-width: ' . $global_settings->responsive_breakpoint . 'px) { ';
|
2624 |
|
2625 |
// Core responsive layout css
|
2626 |
-
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . '
|
2627 |
|
2628 |
// Auto spacing
|
2629 |
if ( ! isset( $global_settings->auto_spacing ) || $global_settings->auto_spacing ) {
|
2630 |
-
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . '
|
2631 |
}
|
2632 |
|
2633 |
// Global node responsive css
|
2634 |
foreach ( array(
|
2635 |
-
|
2636 |
-
|
2637 |
-
|
2638 |
-
|
2639 |
-
|
2640 |
-
|
2641 |
if ( '' !== $global_settings->{ $data[0] } ) {
|
2642 |
$value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
|
2643 |
-
$css
|
2644 |
-
$css
|
2645 |
}
|
2646 |
}
|
2647 |
|
@@ -2746,8 +2842,8 @@ final class FLBuilder {
|
|
2746 |
// Iterate over each direction
|
2747 |
foreach ( array( 'top', 'right', 'bottom', 'left' ) as $dir ) {
|
2748 |
$setting_key = $prop_type . '_' . $dir . $setting_suffix;
|
2749 |
-
$unit_key
|
2750 |
-
$unit
|
2751 |
|
2752 |
if ( ! isset( $settings->{ $setting_key } ) ) {
|
2753 |
continue;
|
@@ -2921,7 +3017,7 @@ final class FLBuilder {
|
|
2921 |
}
|
2922 |
|
2923 |
self::$enqueued_global_assets[] = 'animation-' . $settings->animation['style'];
|
2924 |
-
$path
|
2925 |
|
2926 |
if ( file_exists( $path ) ) {
|
2927 |
$css = file_get_contents( $path );
|
@@ -2937,7 +3033,7 @@ final class FLBuilder {
|
|
2937 |
* @return string A CSS string.
|
2938 |
*/
|
2939 |
static public function render_all_animation_css() {
|
2940 |
-
$css
|
2941 |
$animations = glob( FL_BUILDER_DIR . 'css/animations/*.css' );
|
2942 |
|
2943 |
if ( ! is_array( $animations ) ) {
|
@@ -2952,7 +3048,7 @@ final class FLBuilder {
|
|
2952 |
}
|
2953 |
|
2954 |
self::$enqueued_global_assets[] = 'animation-' . $key;
|
2955 |
-
$css
|
2956 |
}
|
2957 |
|
2958 |
return $css;
|
@@ -2967,14 +3063,14 @@ final class FLBuilder {
|
|
2967 |
*/
|
2968 |
static public function render_js( $include_global = true ) {
|
2969 |
// Get info on the new file.
|
2970 |
-
$nodes
|
2971 |
-
$global_settings
|
2972 |
-
$layout_settings
|
2973 |
-
$rows
|
2974 |
-
$asset_info
|
2975 |
-
$enqueuemethod
|
2976 |
-
$js
|
2977 |
-
$path
|
2978 |
|
2979 |
// Render the global js.
|
2980 |
if ( $include_global && ! isset( $_GET['safemode'] ) ) {
|
@@ -3021,7 +3117,8 @@ final class FLBuilder {
|
|
3021 |
if ( ! self::is_debug() ) {
|
3022 |
try {
|
3023 |
$min = FLJSMin::minify( $js );
|
3024 |
-
} catch ( Exception $e ) {
|
|
|
3025 |
|
3026 |
if ( isset( $min ) ) {
|
3027 |
$js = $min;
|
@@ -3033,6 +3130,10 @@ final class FLBuilder {
|
|
3033 |
fl_builder_filesystem()->file_put_contents( $path, $js );
|
3034 |
}
|
3035 |
|
|
|
|
|
|
|
|
|
3036 |
do_action( 'fl_builder_after_render_js' );
|
3037 |
}
|
3038 |
|
@@ -3047,7 +3148,7 @@ final class FLBuilder {
|
|
3047 |
*/
|
3048 |
static public function render_global_js() {
|
3049 |
$global_settings = FLBuilderModel::get_global_settings();
|
3050 |
-
$js
|
3051 |
|
3052 |
// Add the path legacy vars (FLBuilderLayoutConfig.paths should be used instead).
|
3053 |
$js .= "var wpAjaxUrl = '" . admin_url( 'admin-ajax.php' ) . "';";
|
@@ -3075,9 +3176,9 @@ final class FLBuilder {
|
|
3075 |
* @return string
|
3076 |
*/
|
3077 |
static public function render_row_js( $row_id ) {
|
3078 |
-
$row
|
3079 |
-
$settings
|
3080 |
-
$id
|
3081 |
|
3082 |
ob_start();
|
3083 |
include FL_BUILDER_DIR . 'includes/row-js.php';
|
@@ -3092,10 +3193,10 @@ final class FLBuilder {
|
|
3092 |
* @return string
|
3093 |
*/
|
3094 |
static public function render_row_modules_js( $row_id ) {
|
3095 |
-
$row
|
3096 |
-
$nodes
|
3097 |
-
$template_post_id
|
3098 |
-
$js
|
3099 |
|
3100 |
// Render the JS.
|
3101 |
foreach ( $nodes['groups'] as $group ) {
|
@@ -3124,9 +3225,9 @@ final class FLBuilder {
|
|
3124 |
* @return string
|
3125 |
*/
|
3126 |
static public function render_column_group_modules_js( $group_id ) {
|
3127 |
-
$group
|
3128 |
-
$nodes
|
3129 |
-
$js
|
3130 |
|
3131 |
// Render the JS.
|
3132 |
foreach ( $nodes['columns'] as $column ) {
|
@@ -3151,9 +3252,9 @@ final class FLBuilder {
|
|
3151 |
* @return string
|
3152 |
*/
|
3153 |
static public function render_column_modules_js( $col_id ) {
|
3154 |
-
$col
|
3155 |
-
$nodes
|
3156 |
-
$js
|
3157 |
|
3158 |
// Render the JS.
|
3159 |
foreach ( $nodes['modules'] as $module ) {
|
@@ -3174,22 +3275,22 @@ final class FLBuilder {
|
|
3174 |
* @return string
|
3175 |
*/
|
3176 |
static public function render_module_js( $module_id ) {
|
3177 |
-
$module
|
3178 |
-
$global_settings
|
3179 |
-
$js
|
3180 |
|
3181 |
// Global module JS
|
3182 |
$file = $module->dir . 'js/frontend.js';
|
3183 |
|
3184 |
if ( fl_builder_filesystem()->file_exists( $file ) && ! in_array( $module->settings->type . '-module-js', self::$enqueued_global_assets ) ) {
|
3185 |
-
$js
|
3186 |
self::$enqueued_global_assets[] = $module->settings->type . '-module-js';
|
3187 |
}
|
3188 |
|
3189 |
// Instance module JS
|
3190 |
-
$file
|
3191 |
-
$settings
|
3192 |
-
$id
|
3193 |
|
3194 |
if ( ! in_array( $id, self::$enqueued_module_js_assets ) && fl_builder_filesystem()->file_exists( $file ) ) {
|
3195 |
self::$enqueued_module_js_assets[] = $id;
|
@@ -3208,12 +3309,12 @@ final class FLBuilder {
|
|
3208 |
* @since 1.7
|
3209 |
*/
|
3210 |
static public function render_global_nodes_custom_code( $type = 'css' ) {
|
3211 |
-
$code
|
3212 |
-
$rendered
|
3213 |
|
3214 |
if ( ! FLBuilderModel::is_post_node_template() ) {
|
3215 |
|
3216 |
-
$nodes
|
3217 |
$node_status = FLBuilderModel::get_node_status();
|
3218 |
|
3219 |
foreach ( $nodes as $node_id => $node ) {
|
@@ -3223,7 +3324,7 @@ final class FLBuilder {
|
|
3223 |
if ( $template_post_id && ! in_array( $template_post_id, $rendered ) ) {
|
3224 |
|
3225 |
$rendered[] = $template_post_id;
|
3226 |
-
$code
|
3227 |
}
|
3228 |
}
|
3229 |
}
|
@@ -3326,7 +3427,20 @@ final class FLBuilder {
|
|
3326 |
* @return string url
|
3327 |
*/
|
3328 |
static public function get_fa5_url() {
|
3329 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3330 |
}
|
3331 |
|
3332 |
/**
|
67 |
* Font awesome urls.
|
68 |
* @since 2.1
|
69 |
*/
|
70 |
+
static public $fa4_url = 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css';
|
71 |
+
static public $fa5_pro_url = 'https://pro.fontawesome.com/releases/v5.7.1/css/all.css';
|
72 |
|
73 |
/**
|
74 |
* Initializes hooks.
|
78 |
*/
|
79 |
static public function init() {
|
80 |
/* Actions */
|
81 |
+
add_action( 'plugins_loaded', __CLASS__ . '::load_plugin_textdomain' );
|
82 |
+
add_action( 'send_headers', __CLASS__ . '::no_cache_headers' );
|
83 |
+
add_action( 'wp', __CLASS__ . '::init_ui', 11 );
|
84 |
+
add_action( 'wp', __CLASS__ . '::rich_edit' );
|
85 |
+
add_action( 'wp_enqueue_scripts', __CLASS__ . '::register_layout_styles_scripts' );
|
86 |
+
add_action( 'wp_enqueue_scripts', __CLASS__ . '::enqueue_ui_styles_scripts', 11 );
|
87 |
+
add_action( 'wp_enqueue_scripts', __CLASS__ . '::enqueue_all_layouts_styles_scripts' );
|
88 |
+
add_action( 'wp_head', __CLASS__ . '::render_custom_css_for_editing', 999 );
|
89 |
+
add_action( 'admin_bar_menu', __CLASS__ . '::admin_bar_menu', 999 );
|
90 |
+
add_action( 'wp_footer', __CLASS__ . '::render_ui' );
|
91 |
|
92 |
/* Filters */
|
93 |
+
add_filter( 'fl_builder_render_css', __CLASS__ . '::rewrite_css_cache_urls', 9999 );
|
94 |
+
add_filter( 'body_class', __CLASS__ . '::body_class' );
|
95 |
+
add_filter( 'wp_default_editor', __CLASS__ . '::default_editor' );
|
96 |
+
add_filter( 'mce_css', __CLASS__ . '::add_editor_css' );
|
97 |
+
add_filter( 'mce_buttons', __CLASS__ . '::editor_buttons' );
|
98 |
+
add_filter( 'mce_buttons_2', __CLASS__ . '::editor_buttons_2' );
|
99 |
+
add_filter( 'mce_external_plugins', __CLASS__ . '::editor_external_plugins', 9999 );
|
100 |
+
add_filter( 'tiny_mce_before_init', __CLASS__ . '::editor_font_sizes' );
|
101 |
+
add_filter( 'the_content', __CLASS__ . '::render_content' );
|
102 |
+
add_filter( 'wp_handle_upload_prefilter', __CLASS__ . '::wp_handle_upload_prefilter_filter' );
|
103 |
}
|
104 |
|
105 |
/**
|
383 |
$min = ( self::is_debug() ) ? '' : '.min';
|
384 |
|
385 |
// Register additional CSS
|
386 |
+
wp_register_style( 'fl-slideshow', $css_url . 'fl-slideshow.css', array( 'yui3' ), $ver );
|
387 |
+
wp_register_style( 'jquery-bxslider', $css_url . 'jquery.bxslider.css', array(), $ver );
|
388 |
+
wp_register_style( 'jquery-magnificpopup', $css_url . 'jquery.magnificpopup' . $min . '.css', array(), $ver );
|
389 |
+
wp_register_style( 'yui3', $css_url . 'yui3.css', array(), $ver );
|
390 |
|
391 |
// Register icon CDN CSS
|
392 |
+
wp_register_style( 'font-awesome', self::$fa4_url, array(), $ver );
|
393 |
+
wp_register_style( 'font-awesome-5', self::get_fa5_url(), array(), $ver );
|
394 |
+
wp_register_style( 'foundation-icons', 'https://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css', array(), $ver );
|
395 |
|
396 |
// Register additional JS
|
397 |
+
wp_register_script( 'fl-slideshow', $js_url . 'fl-slideshow' . $min . '.js', array( 'yui3' ), $ver, true );
|
398 |
+
wp_register_script( 'fl-gallery-grid', $js_url . 'fl-gallery-grid.js', array( 'jquery' ), $ver, true );
|
399 |
+
wp_register_script( 'jquery-bxslider', $js_url . 'jquery.bxslider.js', array( 'jquery-easing', 'jquery-fitvids' ), $ver, true );
|
400 |
+
wp_register_script( 'jquery-easing', $js_url . 'jquery.easing.min.js', array( 'jquery' ), '1.4', true );
|
401 |
+
wp_register_script( 'jquery-fitvids', $js_url . 'jquery.fitvids.min.js', array( 'jquery' ), '1.2', true );
|
402 |
wp_register_script( 'jquery-infinitescroll', $js_url . 'jquery.infinitescroll.min.js', array( 'jquery' ), $ver, true );
|
403 |
+
wp_register_script( 'jquery-magnificpopup', $js_url . 'jquery.magnificpopup.min.js', array( 'jquery' ), $ver, true );
|
404 |
+
wp_register_script( 'jquery-mosaicflow', $js_url . 'jquery.mosaicflow.min.js', array( 'jquery' ), $ver, true );
|
405 |
+
wp_register_script( 'jquery-waypoints', $js_url . 'jquery.waypoints.min.js', array( 'jquery' ), $ver, true );
|
406 |
+
wp_register_script( 'jquery-wookmark', $js_url . 'jquery.wookmark.min.js', array( 'jquery' ), $ver, true );
|
407 |
+
wp_register_script( 'yui3', $js_url . 'yui3.min.js', array(), $ver, true );
|
408 |
+
wp_register_script( 'youtube-player', 'https://www.youtube.com/iframe_api', array(), $ver, true );
|
409 |
+
wp_register_script( 'vimeo-player', 'https://player.vimeo.com/api/player.js', array(), $ver, true );
|
410 |
wp_deregister_script( 'imagesloaded' );
|
411 |
wp_register_script( 'imagesloaded', includes_url( 'js/imagesloaded.min.js' ), array( 'jquery' ) );
|
412 |
}
|
423 |
global $post;
|
424 |
|
425 |
$original_post = $post;
|
426 |
+
$is_archive = is_archive() || is_home() || is_search();
|
427 |
|
428 |
// Enqueue assets for posts in the main query.
|
429 |
if ( ! $is_archive && isset( $wp_query->posts ) ) {
|
438 |
if ( count( $post_ids ) > 0 ) {
|
439 |
|
440 |
$posts = get_posts(array(
|
441 |
+
'post__in' => $post_ids,
|
442 |
+
'post_type' => get_post_types(),
|
443 |
+
'posts_per_page' => -1,
|
444 |
));
|
445 |
|
446 |
foreach ( $posts as $post ) {
|
552 |
$post_id = FLBuilderModel::get_post_id();
|
553 |
$asset_info = FLBuilderModel::get_asset_info();
|
554 |
$asset_ver = FLBuilderModel::get_asset_version();
|
555 |
+
$active = FLBuilderModel::is_builder_active();
|
556 |
+
$preview = FLBuilderModel::is_builder_draft_preview();
|
557 |
+
$handle = 'fl-builder-layout-' . $post_id;
|
558 |
/**
|
559 |
* Use this filter to add dependencies to the dependency array when the main builder layout CSS file is enqueued using wp_enqueue_style.
|
560 |
* @see fl_builder_layout_style_dependencies
|
561 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
562 |
*/
|
563 |
+
$css_deps = apply_filters( 'fl_builder_layout_style_dependencies', array() );
|
564 |
+
$css_media = apply_filters( 'fl_builder_layout_style_media', 'all' );
|
565 |
|
566 |
// Enqueue with the global code included?
|
567 |
if ( in_array( 'global-' . $type, self::$enqueued_global_assets ) ) {
|
568 |
+
$path = $asset_info[ $type . '_partial' ];
|
569 |
+
$url = $asset_info[ $type . '_partial_url' ];
|
570 |
$global = false;
|
571 |
} else {
|
572 |
+
$path = $asset_info[ $type ];
|
573 |
+
$url = $asset_info[ $type . '_url' ];
|
574 |
+
$global = true;
|
575 |
self::$enqueued_global_assets[] = 'global-' . $type;
|
576 |
}
|
577 |
|
599 |
} else {
|
600 |
|
601 |
// Render if the file doesn't exist.
|
602 |
+
if ( ! in_array( $path, self::$rendered_assets ) && ( ! fl_builder_filesystem()->file_exists( $path ) || $rerender || $preview || self::is_debug() ) ) {
|
603 |
call_user_func_array( array( 'FLBuilder', 'render_' . $type ), array( $global ) );
|
604 |
self::$rendered_assets[] = $path;
|
605 |
}
|
667 |
}
|
668 |
wp_enqueue_style( 'font-awesome-5' );
|
669 |
wp_enqueue_style( 'foundation-icons' );
|
670 |
+
wp_enqueue_style( 'jquery-nanoscroller', $css_url . 'jquery.nanoscroller.css', array(), $ver );
|
671 |
+
wp_enqueue_style( 'jquery-autosuggest', $css_url . 'jquery.autoSuggest.min.css', array(), $ver );
|
672 |
+
wp_enqueue_style( 'jquery-tiptip', $css_url . 'jquery.tiptip.css', array(), $ver );
|
673 |
+
wp_enqueue_style( 'bootstrap-tour', $css_url . 'bootstrap-tour-standalone.min.css', array(), $ver );
|
674 |
|
675 |
// Enqueue individual builder styles if WP_DEBUG is on.
|
676 |
if ( self::is_debug() ) {
|
677 |
+
wp_enqueue_style( 'fl-color-picker', $css_url . 'fl-color-picker.css', array(), $ver );
|
678 |
+
wp_enqueue_style( 'fl-lightbox', $css_url . 'fl-lightbox.css', array(), $ver );
|
679 |
+
wp_enqueue_style( 'fl-icon-selector', $css_url . 'fl-icon-selector.css', array(), $ver );
|
680 |
+
wp_enqueue_style( 'fl-builder', $css_url . 'fl-builder.css', array(), $ver );
|
681 |
|
682 |
// skins need to come after default ui styles
|
683 |
wp_enqueue_style( 'fl-builder-ui-skin-dark', $css_url . 'fl-builder-ui-skin-dark.css', array(), $ver );
|
684 |
|
685 |
wp_enqueue_style( 'fl-builder-bundle', $css_url . 'build/builder.bundle.css', array(), $ver );
|
686 |
} else {
|
687 |
+
wp_enqueue_style( 'fl-builder-min', $css_url . 'fl-builder.min.css', array(), $ver );
|
688 |
wp_enqueue_style( 'fl-builder-bundle', $css_url . 'build/builder.bundle.min.css', array(), $ver );
|
689 |
}
|
690 |
|
693 |
|
694 |
/* RTL Support */
|
695 |
if ( is_rtl() ) {
|
696 |
+
wp_enqueue_style( 'fl-builder-rtl', $css_url . 'fl-builder-rtl.css', array(), $ver );
|
697 |
}
|
698 |
|
699 |
/* We have a custom version of sortable that fixes a bug. */
|
714 |
wp_enqueue_script( 'jquery-ui-widget' );
|
715 |
wp_enqueue_script( 'jquery-ui-position' );
|
716 |
|
717 |
+
/**
|
718 |
+
* Before jquery.ui.sortable.js is enqueued.
|
719 |
+
* @see fl_before_sortable_enqueue
|
720 |
+
*/
|
721 |
do_action( 'fl_before_sortable_enqueue' );
|
722 |
|
723 |
+
wp_enqueue_script( 'jquery-ui-sortable', $js_url . 'jquery.ui.sortable.js', array( 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-mouse' ), $ver );
|
724 |
+
wp_enqueue_script( 'jquery-nanoscroller', $js_url . 'jquery.nanoscroller.min.js', array(), $ver );
|
725 |
+
wp_enqueue_script( 'jquery-autosuggest', $js_url . 'jquery.autoSuggest.min.js', array(), $ver );
|
726 |
+
wp_enqueue_script( 'jquery-tiptip', $js_url . 'jquery.tiptip.min.js', array(), $ver );
|
727 |
wp_enqueue_script( 'jquery-showhideevents', $js_url . 'jquery.showhideevents.js', array(), $ver );
|
728 |
+
wp_enqueue_script( 'jquery-simulate', $js_url . 'jquery.simulate.js', array(), $ver );
|
729 |
+
wp_enqueue_script( 'jquery-validate', $js_url . 'jquery.validate.min.js', array(), $ver );
|
730 |
+
wp_enqueue_script( 'bootstrap-tour', $js_url . 'bootstrap-tour-standalone.min.js', array(), $ver );
|
731 |
+
wp_enqueue_script( 'ace', $js_url . 'ace/ace.js', array(), $ver );
|
732 |
+
wp_enqueue_script( 'ace-language-tools', $js_url . 'ace/ext-language_tools.js', array(), $ver );
|
733 |
+
wp_enqueue_script( 'mousetrap', $js_url . 'mousetrap-custom.js', array(), $ver );
|
734 |
|
735 |
// Enqueue individual builder scripts if WP_DEBUG is on.
|
736 |
if ( self::is_debug() ) {
|
737 |
+
wp_enqueue_script( 'fl-color-picker', $js_url . 'fl-color-picker.js', array(), $ver );
|
738 |
+
wp_enqueue_script( 'fl-lightbox', $js_url . 'fl-lightbox.js', array(), $ver );
|
739 |
+
wp_enqueue_script( 'fl-icon-selector', $js_url . 'fl-icon-selector.js', array(), $ver );
|
740 |
+
wp_enqueue_script( 'fl-stylesheet', $js_url . 'fl-stylesheet.js', array(), $ver );
|
741 |
+
wp_enqueue_script( 'fl-builder', $js_url . 'fl-builder.js', array(), $ver );
|
742 |
+
wp_enqueue_script( 'fl-builder-ajax-layout', $js_url . 'fl-builder-ajax-layout.js', array(), $ver );
|
743 |
+
wp_enqueue_script( 'fl-builder-preview', $js_url . 'fl-builder-preview.js', array(), $ver );
|
744 |
+
wp_enqueue_script( 'fl-builder-simulate-media-query', $js_url . 'fl-builder-simulate-media-query.js', array(), $ver );
|
745 |
+
wp_enqueue_script( 'fl-builder-responsive-editing', $js_url . 'fl-builder-responsive-editing.js', array(), $ver );
|
746 |
+
wp_enqueue_script( 'fl-builder-responsive-preview', $js_url . 'fl-builder-responsive-preview.js', array(), $ver );
|
747 |
+
wp_enqueue_script( 'fl-builder-services', $js_url . 'fl-builder-services.js', array(), $ver );
|
748 |
+
wp_enqueue_script( 'fl-builder-tour', $js_url . 'fl-builder-tour.js', array(), $ver );
|
749 |
+
wp_enqueue_script( 'fl-builder-ui', $js_url . 'fl-builder-ui.js', array( 'fl-builder', 'mousetrap' ), $ver );
|
750 |
+
wp_enqueue_script( 'fl-builder-ui-main-menu', $js_url . 'fl-builder-ui-main-menu.js', array( 'fl-builder-ui' ), $ver );
|
751 |
+
wp_enqueue_script( 'fl-builder-ui-panel-content', $js_url . 'fl-builder-ui-panel-content-library.js', array( 'fl-builder-ui' ), $ver );
|
752 |
+
wp_enqueue_script( 'fl-builder-ui-settings-forms', $js_url . 'fl-builder-ui-settings-forms.js', array(), $ver );
|
753 |
+
wp_enqueue_script( 'fl-builder-ui-pinned', $js_url . 'fl-builder-ui-pinned.js', array(), $ver );
|
754 |
+
wp_enqueue_script( 'fl-builder-revisions', $js_url . 'fl-builder-revisions.js', array(), $ver );
|
755 |
+
wp_enqueue_script( 'fl-builder-search', $js_url . 'fl-builder-search.js', array( 'jquery' ), $ver );
|
756 |
+
wp_enqueue_script( 'fl-builder-save-manager', $js_url . 'fl-builder-save-manager.js', array( 'jquery' ), $ver );
|
757 |
+
wp_enqueue_script( 'fl-builder-bundle', $js_url . 'build/builder.bundle.js', array(), $ver, true );
|
758 |
} else {
|
759 |
+
wp_enqueue_script( 'fl-builder-min', $js_url . 'fl-builder.min.js', array( 'jquery', 'mousetrap' ), $ver );
|
760 |
+
wp_enqueue_script( 'fl-builder-bundle', $js_url . 'build/builder.bundle.min.js', array(), $ver, true );
|
761 |
}
|
762 |
|
763 |
/* Additional module styles and scripts */
|
784 |
* @return array
|
785 |
*/
|
786 |
static public function body_class( $classes ) {
|
787 |
+
$do_render = apply_filters( 'fl_builder_do_render_content', true, FLBuilderModel::get_post_id() );
|
788 |
+
$simple_ui = ! FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
789 |
$template_type = FLBuilderModel::get_user_template_type();
|
790 |
|
791 |
if ( $do_render && FLBuilderModel::is_builder_enabled() && ! is_archive() ) {
|
811 |
|
812 |
// Skin
|
813 |
$user_settings = FLBuilderUserSettings::get();
|
814 |
+
$classes[] = 'fl-builder-ui-skin--' . $user_settings['skin'];
|
815 |
|
816 |
// Draft changes
|
817 |
if ( FLBuilderModel::layout_has_drafted_changes() ) {
|
848 |
if ( FLBuilderModel::is_post_editable() && is_object( $wp_the_query->post ) ) {
|
849 |
|
850 |
$enabled = get_post_meta( $wp_the_query->post->ID, '_fl_builder_enabled', true );
|
851 |
+
$dot = ' <span class="fl-builder-admin-bar-status-dot" style="color:' . ( $enabled ? '#6bc373' : '#d9d9d9' ) . '; font-size:18px; line-height:1;">•</span>';
|
852 |
|
853 |
$wp_admin_bar->add_node( array(
|
854 |
'id' => 'fl-builder-frontend-edit-link',
|
860 |
|
861 |
static public function locate_template_file( $template_base, $slug ) {
|
862 |
$specific_template = $template_base . '-' . $slug . '.php';
|
863 |
+
$general_template = $template_base . '.php';
|
864 |
+
$default_dir = trailingslashit( FL_BUILDER_DIR ) . 'includes/';
|
865 |
|
866 |
// Try to find the specific template, then repeat the same process for general.
|
867 |
|
933 |
|
934 |
if ( FLBuilderModel::is_builder_active() ) {
|
935 |
|
936 |
+
$post_id = is_object( $wp_the_query->post ) ? $wp_the_query->post->ID : null;
|
937 |
+
$unrestricted = FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
938 |
+
$simple_ui = ! $unrestricted;
|
939 |
+
$global_settings = FLBuilderModel::get_global_settings();
|
940 |
|
941 |
include FL_BUILDER_DIR . 'includes/ui-extras.php';
|
942 |
include FL_BUILDER_DIR . 'includes/ui-js-templates.php';
|
953 |
static function get_main_menu_data() {
|
954 |
global $post;
|
955 |
|
956 |
+
$views = array();
|
957 |
$is_lite = true === FL_BUILDER_LITE; // @codingStandardsIgnoreLine
|
958 |
+
$is_user_template = FLBuilderModel::is_post_user_template();
|
959 |
$enabled_templates = FLBuilderModel::get_enabled_templates();
|
960 |
+
$is_simple_ui = ! FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
961 |
+
$key_shortcuts = self::get_keyboard_shortcuts();
|
962 |
+
$help = FLBuilderModel::get_help_button_settings();
|
963 |
+
$default_view = array(
|
964 |
+
'name' => __( 'Unnamed Menu', 'fl-builder' ),
|
965 |
+
'isShowing' => false,
|
966 |
'isRootView' => false,
|
967 |
+
'items' => array(),
|
968 |
);
|
969 |
|
970 |
// Tools
|
971 |
$tools_view = array(
|
972 |
+
'name' => __( 'Tools', 'fl-builder' ),
|
973 |
+
'isShowing' => true,
|
974 |
'isRootView' => true,
|
975 |
+
'items' => array(),
|
976 |
);
|
977 |
|
978 |
$tools_view['items'][04] = array(
|
979 |
+
'label' => __( 'Publish Layout', 'fl-builder' ),
|
980 |
+
'type' => 'event',
|
981 |
'eventName' => 'publishAndRemain',
|
982 |
'accessory' => $key_shortcuts['publishAndRemain']['keyLabel'],
|
983 |
);
|
988 |
|
989 |
if ( ! $is_lite && ! $is_user_template && ( 'enabled' == $enabled_templates || 'user' == $enabled_templates ) ) {
|
990 |
$tools_view['items'][10] = array(
|
991 |
+
'label' => __( 'Save Template', 'fl-builder' ),
|
992 |
+
'type' => 'event',
|
993 |
'eventName' => 'saveTemplate',
|
994 |
'accessory' => $key_shortcuts['saveTemplate']['keyLabel'],
|
995 |
);
|
996 |
}
|
997 |
|
998 |
$tools_view['items'][20] = array(
|
999 |
+
'label' => __( 'Duplicate Layout', 'fl-builder' ),
|
1000 |
+
'type' => 'event',
|
1001 |
'eventName' => 'duplicateLayout',
|
1002 |
);
|
1003 |
|
1004 |
$tools_view['items'][30] = array(
|
1005 |
+
'label' => __( 'Preview Layout', 'fl-builder' ),
|
1006 |
+
'type' => 'event',
|
1007 |
'eventName' => 'previewLayout',
|
1008 |
'accessory' => $key_shortcuts['previewLayout']['keyLabel'],
|
1009 |
);
|
1010 |
|
1011 |
$tools_view['items'][31] = array(
|
1012 |
+
'label' => __( 'Responsive Editing', 'fl-builder' ),
|
1013 |
+
'type' => 'event',
|
1014 |
'eventName' => 'responsiveEditing',
|
1015 |
'accessory' => $key_shortcuts['responsiveEditing']['keyLabel'],
|
1016 |
);
|
1020 |
);
|
1021 |
|
1022 |
$tools_view['items'][50] = array(
|
1023 |
+
'label' => __( 'Layout CSS & Javascript', 'fl-builder' ),
|
1024 |
+
'type' => 'event',
|
1025 |
'eventName' => 'showLayoutSettings',
|
1026 |
'accessory' => $key_shortcuts['showLayoutSettings']['keyLabel'],
|
1027 |
);
|
1028 |
|
1029 |
$tools_view['items'][60] = array(
|
1030 |
+
'label' => __( 'Global Settings', 'fl-builder' ),
|
1031 |
+
'type' => 'event',
|
1032 |
'eventName' => 'showGlobalSettings',
|
1033 |
'accessory' => $key_shortcuts['showGlobalSettings']['keyLabel'],
|
1034 |
);
|
1038 |
);
|
1039 |
|
1040 |
$tools_view['items'][80] = array(
|
1041 |
+
'label' => __( 'Change UI Brightness', 'fl-builder' ),
|
1042 |
+
'type' => 'event',
|
1043 |
'eventName' => 'toggleUISkin',
|
1044 |
'accessory' => $key_shortcuts['toggleUISkin']['keyLabel'],
|
1045 |
);
|
1046 |
|
1047 |
$tools_view['items'][100] = array(
|
1048 |
'label' => __( 'WordPress Admin', 'fl-builder' ),
|
1049 |
+
'type' => 'view',
|
1050 |
+
'view' => 'admin',
|
1051 |
);
|
1052 |
|
1053 |
if ( $help['enabled'] && ! $is_simple_ui ) {
|
1054 |
$tools_view['items'][110] = array(
|
1055 |
'label' => __( 'Help', 'fl-builder' ),
|
1056 |
+
'type' => 'view',
|
1057 |
+
'view' => 'help',
|
1058 |
);
|
1059 |
}
|
1060 |
|
1061 |
$tools_view['items'][120] = array(
|
1062 |
+
'label' => __( 'Keyboard Shortcuts', 'fl-builder' ),
|
1063 |
+
'type' => 'event',
|
1064 |
'eventName' => 'showKeyboardShortcuts',
|
1065 |
);
|
1066 |
|
1068 |
|
1069 |
// Admin
|
1070 |
$admin_view = array(
|
1071 |
+
'name' => __( 'WordPress Admin', 'fl-builder' ),
|
1072 |
'items' => array(),
|
1073 |
);
|
1074 |
|
1075 |
// Edit current post/page/cpt
|
1076 |
if ( is_single( $post->ID ) || is_page( $post->ID ) ) {
|
1077 |
+
$edit_label = get_post_type_object( $post->post_type )->labels->edit_item;
|
1078 |
$admin_view['items'][10] = array(
|
1079 |
'label' => $edit_label,
|
1080 |
+
'type' => 'link',
|
1081 |
+
'url' => get_edit_post_link( $post->ID ),
|
1082 |
);
|
1083 |
}
|
1084 |
|
1089 |
// Dashboard
|
1090 |
$admin_view['items'][17] = array(
|
1091 |
'label' => _x( 'Dashboard', 'label for the WordPress Dashboard link', 'fl-builder' ),
|
1092 |
+
'type' => 'link',
|
1093 |
+
'url' => admin_url( 'index.php' ),
|
1094 |
);
|
1095 |
|
1096 |
$templates_enabled = FLBuilderUserAccess::current_user_can( 'builder_admin' );
|
1098 |
if ( $templates_enabled ) {
|
1099 |
$admin_view['items'][20] = array(
|
1100 |
'label' => __( 'Manage Templates', 'fl-builder' ),
|
1101 |
+
'type' => 'link',
|
1102 |
+
'url' => admin_url( 'edit.php?post_type=fl-builder-template' ),
|
1103 |
);
|
1104 |
}
|
1105 |
|
1112 |
}
|
1113 |
$admin_view['items'][30] = array(
|
1114 |
'label' => __( 'Customize Theme', 'fl-builder' ),
|
1115 |
+
'type' => 'link',
|
1116 |
+
'url' => $url,
|
1117 |
);
|
1118 |
}
|
1119 |
|
1122 |
// Help
|
1123 |
if ( $help['enabled'] && ! $is_simple_ui ) {
|
1124 |
$help_view = array(
|
1125 |
+
'name' => __( 'Help', 'fl-builder' ),
|
1126 |
'items' => array(),
|
1127 |
);
|
1128 |
|
1134 |
$help['video_embed'] = str_replace( 'height="315"', 'height="173"', $help['video_embed'] );
|
1135 |
|
1136 |
$help_view['items'][10] = array(
|
1137 |
+
'type' => 'video',
|
1138 |
'embed' => $help['video_embed'],
|
1139 |
);
|
1140 |
}
|
1141 |
|
1142 |
if ( $help['tour'] ) {
|
1143 |
$help_view['items'][20] = array(
|
1144 |
+
'label' => __( 'Take A Tour', 'fl-builder' ),
|
1145 |
+
'type' => 'event',
|
1146 |
'eventName' => 'beginTour',
|
1147 |
);
|
1148 |
}
|
1150 |
if ( $help['knowledge_base'] && isset( $help['knowledge_base_url'] ) ) {
|
1151 |
$help_view['items'][30] = array(
|
1152 |
'label' => __( 'View Knowledge Base', 'fl-builder' ),
|
1153 |
+
'type' => 'link',
|
1154 |
+
'url' => $help['knowledge_base_url'],
|
1155 |
);
|
1156 |
}
|
1157 |
|
1158 |
if ( $help['forums'] && isset( $help['forums_url'] ) ) {
|
1159 |
$help_view['items'][40] = array(
|
1160 |
'label' => __( 'Contact Support', 'fl-builder' ),
|
1161 |
+
'type' => 'link',
|
1162 |
+
'url' => $help['forums_url'],
|
1163 |
);
|
1164 |
}
|
1165 |
|
1178 |
*/
|
1179 |
static function get_keyboard_shortcuts() {
|
1180 |
$default_action = array(
|
1181 |
+
'label' => _x( 'Untitled Shortcut', 'A keyboard shortcut with no label given', 'fl-builder' ),
|
1182 |
+
'keyCode' => '',
|
1183 |
'keyLabel' => '',
|
1184 |
'isGlobal' => false,
|
1185 |
+
'enabled' => true,
|
1186 |
);
|
1187 |
+
$data = array(
|
1188 |
+
'showModules' => array(
|
1189 |
+
'label' => _x( 'Open Modules Tab', 'Keyboard action to show modules tab', 'fl-builder' ),
|
1190 |
'keyCode' => 'j',
|
1191 |
),
|
1192 |
+
'showRows' => array(
|
1193 |
+
'label' => _x( 'Open Rows Tab', 'Keyboard action to show rows tab', 'fl-builder' ),
|
1194 |
'keyCode' => 'k',
|
1195 |
),
|
1196 |
+
'showTemplates' => array(
|
1197 |
+
'label' => _x( 'Open Templates Tab', 'Keyboard action to show templates tab', 'fl-builder' ),
|
1198 |
'keyCode' => 'l',
|
1199 |
),
|
1200 |
+
'showSaved' => array(
|
1201 |
+
'label' => _x( 'Open Saved Tab', 'Keyboard action to show saved tab', 'fl-builder' ),
|
1202 |
'keyCode' => ';',
|
1203 |
'enabled' => true !== FL_BUILDER_LITE,
|
1204 |
),
|
1205 |
+
'saveTemplate' => array(
|
1206 |
+
'label' => _x( 'Save New Template', 'Keyboard action to open save template form', 'fl-builder' ),
|
1207 |
'keyCode' => 'mod+j',
|
1208 |
'enabled' => true !== FL_BUILDER_LITE,
|
1209 |
),
|
1210 |
+
'previewLayout' => array(
|
1211 |
+
'label' => _x( 'Toggle Preview Mode', 'Keyboard action to toggle preview mode', 'fl-builder' ),
|
1212 |
'keyCode' => 'p',
|
1213 |
),
|
1214 |
+
'responsiveEditing' => array(
|
1215 |
+
'label' => _x( 'Toggle Responsive Editing Mode', 'Keyboard action to toggle responsive editing', 'fl-builder' ),
|
1216 |
'keyCode' => 'r',
|
1217 |
),
|
1218 |
'showGlobalSettings' => array(
|
1219 |
+
'label' => _x( 'Open Global Settings', 'Keyboard action to open the global settings panel', 'fl-builder' ),
|
1220 |
'keyCode' => 'mod+u',
|
1221 |
),
|
1222 |
'showLayoutSettings' => array(
|
1223 |
+
'label' => _x( 'Open Layout Settings', 'Keyboard action to open the layout settings panel', 'fl-builder' ),
|
1224 |
'keyCode' => 'mod+y',
|
1225 |
),
|
1226 |
+
'toggleUISkin' => array(
|
1227 |
+
'label' => _x( 'Change UI Brightness', 'Keyboard action to switch between light and dark UI brightness', 'fl-builder' ),
|
1228 |
'keyCode' => 'o',
|
1229 |
),
|
1230 |
+
'showSearch' => array(
|
1231 |
+
'label' => _x( 'Display Module Search', 'Keyboard action to open the module search panel', 'fl-builder' ),
|
1232 |
'keyCode' => 'mod+i',
|
1233 |
'enabled' => true !== FL_BUILDER_LITE,
|
1234 |
),
|
1235 |
+
'showSavedMessage' => array(
|
1236 |
+
'label' => _x( 'Save Layout', 'Keyboard action to save changes', 'fl-builder' ),
|
1237 |
+
'keyCode' => 'mod+s',
|
1238 |
'isGlobal' => true,
|
1239 |
),
|
1240 |
+
'publishAndRemain' => array(
|
1241 |
+
'label' => _x( 'Publish changes without leaving builder', 'Keyboard action to publish any pending changes', 'fl-builder' ),
|
1242 |
+
'keyCode' => 'mod+p',
|
1243 |
'isGlobal' => true,
|
1244 |
),
|
1245 |
+
'cancelTask' => array(
|
1246 |
+
'label' => _x( 'Dismiss Active Panel', 'Keyboard action to dismiss the current task or panel', 'fl-builder' ),
|
1247 |
+
'keyCode' => 'esc',
|
1248 |
'isGlobal' => true,
|
1249 |
),
|
1250 |
);
|
1256 |
// Check for old (alpha) format and normalize
|
1257 |
if ( is_string( $args ) ) {
|
1258 |
$args = array(
|
1259 |
+
'label' => ucwords( preg_replace( '/([^A-Z])([A-Z])/', '$1 $2', $hook ) ),
|
1260 |
'keyCode' => $args,
|
1261 |
);
|
1262 |
}
|
1299 |
$code = str_replace( 'right', '→', $code );
|
1300 |
|
1301 |
$args['keyLabel'] = $code;
|
1302 |
+
$data[ $hook ] = $args;
|
1303 |
}
|
1304 |
|
1305 |
return $data;
|
1316 |
global $post;
|
1317 |
$simple_ui = ! FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
1318 |
|
1319 |
+
$title = apply_filters( 'fl_builder_ui_bar_title', get_the_title( $post->ID ) );
|
1320 |
+
$icon_url = FLBuilderModel::get_branding_icon();
|
1321 |
$wrapper_classes = array( 'fl-builder-bar-title' );
|
1322 |
|
1323 |
if ( '' == $icon_url ) {
|
1325 |
}
|
1326 |
|
1327 |
$edited_object_label = get_post_type_object( $post->post_type )->labels->singular_name;
|
1328 |
+
$pretitle = sprintf( _x( 'Currently Editing %s', 'Currently editing message', 'fl-builder' ), $edited_object_label );
|
1329 |
+
$pretitle = apply_filters( 'fl_builder_ui_bar_pretitle', $pretitle );
|
1330 |
|
1331 |
// Render the bar title.
|
1332 |
include FL_BUILDER_DIR . 'includes/ui-bar-title-area.php';
|
1339 |
* @return void
|
1340 |
*/
|
1341 |
static public function render_ui_bar_buttons() {
|
1342 |
+
$help_button = FLBuilderModel::get_help_button_settings();
|
1343 |
+
$simple_ui = ! FLBuilderUserAccess::current_user_can( 'unrestricted_editing' );
|
1344 |
$should_display_search = ! FLBuilderModel::is_post_user_template( 'module' ) && ! $simple_ui;
|
1345 |
+
$add_btn_svg = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="24" height="24"><rect x="0" fill="none" width="24" height="24" /><g><path d="M17 9v2h-6v6H9v-6H3V9h6V3h2v6h6z"/></g></svg>';
|
1346 |
+
$notifications = FLBuilderNotifications::get_notifications();
|
1347 |
+
$feedback_label = __( 'Dev Feedback', 'fl-builder' );
|
1348 |
+
$show_feedback = '{FL_BUILDER_VERSION}' === FL_BUILDER_VERSION;
|
1349 |
|
1350 |
if ( strstr( FL_BUILDER_VERSION, '-dev' ) ) {
|
1351 |
$show_feedback = true;
|
1352 |
} elseif ( strstr( FL_BUILDER_VERSION, '-alpha' ) ) {
|
1353 |
$feedback_label = __( 'Alpha Feedback', 'fl-builder' );
|
1354 |
+
$show_feedback = true;
|
1355 |
} elseif ( strstr( FL_BUILDER_VERSION, '-beta' ) ) {
|
1356 |
$feedback_label = __( 'Beta Feedback', 'fl-builder' );
|
1357 |
+
$show_feedback = true;
|
1358 |
}
|
1359 |
|
1360 |
$buttons = apply_filters( 'fl_builder_ui_bar_buttons', array(
|
1361 |
+
'feedback' => array(
|
1362 |
+
'label' => $feedback_label . ' <i class="fas fa-external-link-alt"></i>',
|
1363 |
+
'show' => $show_feedback,
|
1364 |
'onclick' => "window.open('" . FLBuilderModel::get_store_url( 'contact', array(
|
1365 |
+
'topic' => 'Pre-Release Feedback',
|
1366 |
'utm_medium' => true === FL_BUILDER_LITE ? 'bb-lite' : 'bb-pro',
|
1367 |
'utm_source' => 'builder-ui',
|
1368 |
'utm_campaign' => 'feedback-cta',
|
1369 |
) ) . "');",
|
1370 |
),
|
1371 |
+
'upgrade' => array(
|
1372 |
'label' => __( 'Upgrade Today', 'fl-builder' ) . ' <i class="fas fa-external-link-alt"></i>',
|
1373 |
+
'show' => true === FL_BUILDER_LITE,
|
1374 |
),
|
1375 |
+
'buy' => array(
|
1376 |
'label' => __( 'Buy Now', 'fl-builder' ) . ' <i class="fas fa-external-link-alt"></i>',
|
1377 |
+
'show' => stristr( home_url(), 'demo.wpbeaverbuilder.com' ),
|
1378 |
),
|
1379 |
+
'done' => array(
|
1380 |
'label' => __( 'Done', 'fl-builder' ),
|
1381 |
),
|
1382 |
'content-panel' => array(
|
1383 |
'label' => $add_btn_svg,
|
1384 |
+
'show' => ! $simple_ui,
|
1385 |
),
|
1386 |
+
'add-content' => array( // Only added here for backwards compat.
|
1387 |
'label' => $add_btn_svg,
|
1388 |
+
'show' => ! $simple_ui,
|
1389 |
),
|
1390 |
) );
|
1391 |
|
1521 |
// Prevent the builder's render_content filter from running.
|
1522 |
add_filter( 'fl_builder_do_render_content', '__return_false' );
|
1523 |
|
1524 |
+
/**
|
1525 |
+
* Fire the render content start action.
|
1526 |
+
* @see fl_builder_render_content_start
|
1527 |
+
*/
|
1528 |
do_action( 'fl_builder_render_content_start' );
|
1529 |
|
1530 |
// Render the content.
|
1531 |
ob_start();
|
1532 |
+
/**
|
1533 |
+
* Before render content
|
1534 |
+
* @see fl_builder_before_render_content
|
1535 |
+
*/
|
1536 |
do_action( 'fl_builder_before_render_content' );
|
1537 |
echo '<' . $tag . ' class="' . self::render_content_classes() . '" data-post-id="' . $post_id . '"' . $attr_string . '>';
|
1538 |
self::render_nodes();
|
1539 |
echo '</' . $tag . '>';
|
1540 |
+
/**
|
1541 |
+
* After render content
|
1542 |
+
* @see fl_builder_after_render_content
|
1543 |
+
*/
|
1544 |
do_action( 'fl_builder_after_render_content' );
|
1545 |
$content = ob_get_clean();
|
1546 |
|
1562 |
$content = wp_make_content_images_responsive( $content );
|
1563 |
}
|
1564 |
|
1565 |
+
/**
|
1566 |
+
* Fire the render content complete action.
|
1567 |
+
* @see fl_builder_render_content_complete
|
1568 |
+
*/
|
1569 |
do_action( 'fl_builder_render_content_complete' );
|
1570 |
|
1571 |
// Stop forcing the builder to use this post ID.
|
1586 |
* @return string
|
1587 |
*/
|
1588 |
static public function render_content( $content ) {
|
1589 |
+
$post_id = FLBuilderModel::get_post_id( true );
|
1590 |
+
$enabled = FLBuilderModel::is_builder_enabled( $post_id );
|
1591 |
+
$rendering = $post_id === self::$post_rendering;
|
1592 |
+
$do_render = apply_filters( 'fl_builder_do_render_content', true, $post_id );
|
1593 |
+
$in_loop = in_the_loop();
|
1594 |
+
$is_global = in_array( $post_id, FLBuilderModel::get_global_posts() );
|
1595 |
|
1596 |
if ( $enabled && ! $rendering && $do_render && ( $in_loop || $is_global ) ) {
|
1597 |
|
1665 |
* @return void
|
1666 |
*/
|
1667 |
static public function render_nodes() {
|
1668 |
+
/**
|
1669 |
+
* Before render nodes.
|
1670 |
+
* @see fl_builder_before_render_nodes
|
1671 |
+
*/
|
1672 |
do_action( 'fl_builder_before_render_nodes' );
|
1673 |
|
1674 |
if ( apply_filters( 'fl_builder_render_nodes', true ) ) {
|
1675 |
self::render_rows();
|
1676 |
}
|
1677 |
|
1678 |
+
/**
|
1679 |
+
* After render nodes.
|
1680 |
+
* @see fl_builder_after_render_nodes
|
1681 |
+
*/
|
1682 |
do_action( 'fl_builder_after_render_nodes' );
|
1683 |
}
|
1684 |
|
1786 |
$content = ob_get_clean();
|
1787 |
|
1788 |
// Remove unnecessary tags and attributes.
|
1789 |
+
$content = preg_replace( '/<\/?div[^>]*\>/i', '', $content );
|
1790 |
+
$content = preg_replace( '/<\/?span[^>]*\>/i', '', $content );
|
1791 |
+
$content = preg_replace( '#<script(.*?)>(.*?)</script>#is', '', $content );
|
1792 |
+
$content = preg_replace( '/<\/?noscript[^>]*\>/i', '', $content );
|
1793 |
+
$content = preg_replace( '#<svg(.*?)>(.*?)</svg>#is', '', $content );
|
1794 |
+
$content = preg_replace( '/<i [^>]*><\\/i[^>]*>/', '', $content );
|
1795 |
+
$content = preg_replace( '/ class=".*?"/', '', $content );
|
1796 |
+
$content = preg_replace( '/ style=".*?"/', '', $content );
|
1797 |
|
1798 |
// Remove empty lines.
|
1799 |
$content = preg_replace( '/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/', "\n", $content );
|
1866 |
static public function render_rows() {
|
1867 |
$rows = FLBuilderModel::get_nodes( 'row' );
|
1868 |
|
1869 |
+
/**
|
1870 |
+
* Before rendering the markup for all of the rows in a layout.
|
1871 |
+
* @see fl_builder_before_render_rows
|
1872 |
+
*/
|
1873 |
do_action( 'fl_builder_before_render_rows', $rows );
|
1874 |
|
1875 |
foreach ( $rows as $row ) {
|
1876 |
self::render_row( $row );
|
1877 |
}
|
1878 |
|
1879 |
+
/**
|
1880 |
+
* After rendering the markup for all of the rows in a layout.
|
1881 |
+
* @see fl_builder_after_render_rows
|
1882 |
+
*/
|
1883 |
do_action( 'fl_builder_after_render_rows', $rows );
|
1884 |
}
|
1885 |
|
1893 |
static public function render_row( $row ) {
|
1894 |
global $wp_the_query;
|
1895 |
|
1896 |
+
$groups = FLBuilderModel::get_nodes( 'column-group', $row );
|
1897 |
$post_id = FLBuilderModel::get_post_id();
|
1898 |
+
$active = FLBuilderModel::is_builder_active() && $post_id == $wp_the_query->post->ID;
|
1899 |
$visible = FLBuilderModel::is_node_visible( $row );
|
1900 |
|
1901 |
if ( $active || $visible ) {
|
1902 |
|
1903 |
+
/**
|
1904 |
+
* Before rendering a row
|
1905 |
+
* @see fl_builder_before_render_row
|
1906 |
+
*/
|
1907 |
do_action( 'fl_builder_before_render_row', $row, $groups );
|
1908 |
|
1909 |
$template_file = self::locate_template_file(
|
1915 |
include $template_file;
|
1916 |
}
|
1917 |
|
1918 |
+
/**
|
1919 |
+
* After rendering a row.
|
1920 |
+
* @see fl_builder_after_render_row
|
1921 |
+
*/
|
1922 |
do_action( 'fl_builder_after_render_row', $row, $groups );
|
1923 |
}
|
1924 |
}
|
1938 |
*/
|
1939 |
$custom_class = apply_filters( 'fl_builder_row_custom_class', $row->settings->class, $row );
|
1940 |
$overlay_bgs = array( 'photo', 'parallax', 'slideshow', 'video' );
|
1941 |
+
$active = FLBuilderModel::is_builder_active();
|
1942 |
+
$visible = FLBuilderModel::is_node_visible( $row );
|
1943 |
+
$has_rules = FLBuilderModel::node_has_visibility_rules( $row );
|
1944 |
$attrs = array(
|
1945 |
+
'id' => $row->settings->id,
|
1946 |
+
'class' => array(
|
1947 |
'fl-row',
|
1948 |
'fl-row-' . $row->settings->width . '-width',
|
1949 |
'fl-row-bg-' . $row->settings->bg_type,
|
1950 |
'fl-node-' . $row->node,
|
1951 |
),
|
1952 |
+
'data-node' => $row->node,
|
1953 |
);
|
1954 |
|
1955 |
// Classes
|
1980 |
$attrs['class'][] = 'fl-visible-' . $row->settings->responsive_display;
|
1981 |
}
|
1982 |
if ( is_array( $row->settings->animation ) && ! empty( $row->settings->animation['style'] ) ) {
|
1983 |
+
$attrs['class'][] = 'fl-animation fl-' . $row->settings->animation['style'];
|
1984 |
$attrs['data-animation-delay'][] = $row->settings->animation['delay'];
|
1985 |
if ( isset( $row->settings->animation['duration'] ) ) {
|
1986 |
$attrs['data-animation-duration'][] = $row->settings->animation['duration'];
|
2016 |
* @return void
|
2017 |
*/
|
2018 |
static public function render_row_bg( $row ) {
|
2019 |
+
/**
|
2020 |
+
* Before rendering a row background
|
2021 |
+
* @see fl_builder_before_render_row_bg
|
2022 |
+
*/
|
2023 |
do_action( 'fl_builder_before_render_row_bg', $row );
|
2024 |
|
2025 |
if ( 'video' == $row->settings->bg_type ) {
|
2040 |
echo '<div class="fl-bg-slideshow"></div>';
|
2041 |
}
|
2042 |
|
2043 |
+
/**
|
2044 |
+
* After rendering a row background
|
2045 |
+
* @see fl_builder_after_render_row_bg
|
2046 |
+
*/
|
2047 |
do_action( 'fl_builder_after_render_row_bg', $row );
|
2048 |
}
|
2049 |
|
2070 |
static public function render_column_group( $group ) {
|
2071 |
$cols = FLBuilderModel::get_nodes( 'column', $group );
|
2072 |
|
2073 |
+
/**
|
2074 |
+
* Before rendering a column group
|
2075 |
+
* @see fl_builder_before_render_column_group
|
2076 |
+
*/
|
2077 |
do_action( 'fl_builder_before_render_column_group', $group, $cols );
|
2078 |
|
2079 |
$template_file = self::locate_template_file(
|
2084 |
if ( $template_file ) {
|
2085 |
include $template_file;
|
2086 |
}
|
2087 |
+
/**
|
2088 |
+
* After rendering a column group.
|
2089 |
+
* @see fl_builder_after_render_column_group
|
2090 |
+
*/
|
2091 |
do_action( 'fl_builder_after_render_column_group', $group, $cols );
|
2092 |
}
|
2093 |
|
2102 |
$cols = FLBuilderModel::get_nodes( 'column', $group );
|
2103 |
$parent = FLBuilderModel::get_node_parent( $group );
|
2104 |
$attrs = array(
|
2105 |
+
'class' => array(
|
2106 |
'fl-col-group',
|
2107 |
'fl-node-' . $group->node,
|
2108 |
),
|
2150 |
static public function render_column( $col_id = null ) {
|
2151 |
global $wp_the_query;
|
2152 |
|
2153 |
+
$col = is_object( $col_id ) ? $col_id : FLBuilderModel::get_node( $col_id );
|
2154 |
$post_id = FLBuilderModel::get_post_id();
|
2155 |
+
$active = FLBuilderModel::is_builder_active() && $post_id == $wp_the_query->post->ID;
|
2156 |
$visible = FLBuilderModel::is_node_visible( $col );
|
2157 |
|
2158 |
if ( $active || $visible ) {
|
2176 |
$custom_class = apply_filters( 'fl_builder_column_custom_class', $col->settings->class, $col );
|
2177 |
$overlay_bgs = array( 'photo' );
|
2178 |
$nested = FLBuilderModel::get_nodes( 'column-group', $col );
|
2179 |
+
$active = FLBuilderModel::is_builder_active();
|
2180 |
+
$visible = FLBuilderModel::is_node_visible( $col );
|
2181 |
+
$has_rules = FLBuilderModel::node_has_visibility_rules( $col );
|
2182 |
$attrs = array(
|
2183 |
+
'id' => $col->settings->id,
|
2184 |
+
'class' => array(
|
2185 |
'fl-col',
|
2186 |
'fl-node-' . $col->node,
|
2187 |
),
|
2188 |
+
'data-node' => $col->node,
|
2189 |
+
'style' => array(),
|
2190 |
);
|
2191 |
|
2192 |
// Classes
|
2207 |
$attrs['class'][] = 'fl-visible-' . $col->settings->responsive_display;
|
2208 |
}
|
2209 |
if ( is_array( $col->settings->animation ) && ! empty( $col->settings->animation['style'] ) ) {
|
2210 |
+
$attrs['class'][] = 'fl-animation fl-' . $col->settings->animation['style'];
|
2211 |
$attrs['data-animation-delay'][] = $col->settings->animation['delay'];
|
2212 |
if ( isset( $col->settings->animation['duration'] ) ) {
|
2213 |
$attrs['data-animation-duration'][] = $col->settings->animation['duration'];
|
2228 |
$attrs['style'][] = 'width: ' . $col->settings->size . '%;';
|
2229 |
}
|
2230 |
|
2231 |
+
/**
|
2232 |
+
* Column attributes.
|
2233 |
+
* @see fl_builder_column_attributes
|
2234 |
+
*/
|
2235 |
self::render_node_attributes( apply_filters( 'fl_builder_column_attributes', $attrs, $col ) );
|
2236 |
}
|
2237 |
|
2245 |
static public function render_modules( $col_id = null ) {
|
2246 |
$nodes = FLBuilderModel::get_nodes( null, $col_id );
|
2247 |
|
2248 |
+
/**
|
2249 |
+
* Before rendering modules in a column
|
2250 |
+
* @see fl_builder_before_render_modules
|
2251 |
+
*/
|
2252 |
do_action( 'fl_builder_before_render_modules', $nodes, $col_id );
|
2253 |
|
2254 |
foreach ( $nodes as $node ) {
|
2259 |
self::render_column_group( $node );
|
2260 |
}
|
2261 |
}
|
2262 |
+
/**
|
2263 |
+
* After rendering modules in a column
|
2264 |
+
* @see fl_builder_after_render_modules
|
2265 |
+
*/
|
2266 |
do_action( 'fl_builder_after_render_modules', $nodes, $col_id );
|
2267 |
}
|
2268 |
|
2276 |
static public function render_module( $module_id = null ) {
|
2277 |
global $wp_the_query;
|
2278 |
|
2279 |
+
$module = FLBuilderModel::get_module( $module_id );
|
2280 |
+
$settings = $module->settings;
|
2281 |
+
$id = $module->node;
|
2282 |
+
$post_id = FLBuilderModel::get_post_id();
|
2283 |
+
$active = FLBuilderModel::is_builder_active() && $post_id == $wp_the_query->post->ID;
|
2284 |
+
$visible = FLBuilderModel::is_node_visible( $module );
|
2285 |
|
2286 |
if ( $active || $visible ) {
|
2287 |
|
2288 |
+
/**
|
2289 |
+
* Before single module is rendered via ajax.
|
2290 |
+
* @see fl_builder_before_render_module
|
2291 |
+
*/
|
2292 |
do_action( 'fl_builder_before_render_module', $module );
|
2293 |
|
2294 |
$template_file = self::locate_template_file(
|
2295 |
apply_filters( 'fl_builder_module_template_base', 'module', $module ),
|
2296 |
+
apply_filters( 'fl_builder_module_template_slug', '', $module )
|
2297 |
);
|
2298 |
|
2299 |
if ( $template_file ) {
|
2300 |
include $template_file;
|
2301 |
}
|
2302 |
|
2303 |
+
/**
|
2304 |
+
* After single module is rendered via ajax.
|
2305 |
+
* @see fl_builder_after_render_module
|
2306 |
+
*/
|
2307 |
do_action( 'fl_builder_after_render_module', $module );
|
2308 |
}
|
2309 |
}
|
2325 |
$settings = (object) array_merge( (array) $defaults, (array) $settings );
|
2326 |
|
2327 |
// Module
|
2328 |
+
$class = get_class( FLBuilderModel::$modules[ $type ] );
|
2329 |
+
$module = new $class();
|
2330 |
$module->settings = FLBuilderSettingsCompat::filter_node_settings( 'module', $settings );
|
2331 |
|
2332 |
// Shorthand reference to the module's id.
|
2333 |
$id = $module->node;
|
2334 |
|
2335 |
+
/**
|
2336 |
+
* Before single module html is rendered.
|
2337 |
+
* used by render_module_html()
|
2338 |
+
* @see fl_builder_render_module_html_before
|
2339 |
+
*/
|
2340 |
do_action( 'fl_builder_render_module_html_before', $type, $settings, $module );
|
2341 |
|
2342 |
ob_start();
|
2343 |
|
2344 |
+
if ( has_filter( 'fl_builder_module_frontend_custom_' . $module->slug ) ) {
|
2345 |
+
echo apply_filters( 'fl_builder_module_frontend_custom_' . $module->slug, (array) $module->settings, $module );
|
2346 |
+
} else {
|
2347 |
+
include apply_filters( 'fl_builder_render_module_html', $module->dir . 'includes/frontend.php', $type, $settings, $module );
|
2348 |
+
}
|
2349 |
|
2350 |
$content = ob_get_clean();
|
2351 |
|
2352 |
echo apply_filters( 'fl_builder_render_module_html_content', $content, $type, $settings, $module );
|
2353 |
|
2354 |
+
/**
|
2355 |
+
* Before single module html is rendered.
|
2356 |
+
* used by render_module_html()
|
2357 |
+
* @see fl_builder_render_module_html_after
|
2358 |
+
*/
|
2359 |
do_action( 'fl_builder_render_module_html_after', $type, $settings, $module );
|
2360 |
}
|
2361 |
|
2373 |
* @link https://kb.wpbeaverbuilder.com/article/117-plugin-filter-reference
|
2374 |
*/
|
2375 |
$custom_class = apply_filters( 'fl_builder_module_custom_class', $module->settings->class, $module );
|
2376 |
+
$active = FLBuilderModel::is_builder_active();
|
2377 |
+
$visible = FLBuilderModel::is_node_visible( $module );
|
2378 |
+
$has_rules = FLBuilderModel::node_has_visibility_rules( $module );
|
2379 |
$attrs = array(
|
2380 |
+
'id' => esc_attr( $module->settings->id ),
|
2381 |
+
'class' => array(
|
2382 |
'fl-module',
|
2383 |
'fl-module-' . $module->settings->type,
|
2384 |
'fl-node-' . $module->node,
|
2385 |
),
|
2386 |
+
'data-node' => $module->node,
|
2387 |
);
|
2388 |
|
2389 |
// Classes
|
2391 |
$attrs['class'][] = 'fl-visible-' . $module->settings->responsive_display;
|
2392 |
}
|
2393 |
if ( is_array( $module->settings->animation ) && ! empty( $module->settings->animation['style'] ) ) {
|
2394 |
+
$attrs['class'][] = 'fl-animation fl-' . $module->settings->animation['style'];
|
2395 |
$attrs['data-animation-delay'][] = $module->settings->animation['delay'];
|
2396 |
if ( isset( $module->settings->animation['duration'] ) ) {
|
2397 |
$attrs['data-animation-duration'][] = $module->settings->animation['duration'];
|
2410 |
// Data
|
2411 |
if ( $active ) {
|
2412 |
$attrs['data-parent'] = $module->parent;
|
2413 |
+
$attrs['data-type'] = $module->settings->type;
|
2414 |
+
$attrs['data-name'] = $module->name;
|
2415 |
}
|
2416 |
|
2417 |
+
/**
|
2418 |
+
* Module attributes.
|
2419 |
+
* @see fl_builder_module_attributes
|
2420 |
+
*/
|
2421 |
self::render_node_attributes( apply_filters( 'fl_builder_module_attributes', $attrs, $module ) );
|
2422 |
}
|
2423 |
|
2439 |
static public function render_module_css( $type, $id, $settings ) {
|
2440 |
// Settings
|
2441 |
$global_settings = FLBuilderModel::get_global_settings();
|
2442 |
+
$defaults = FLBuilderModel::get_module_defaults( $type );
|
2443 |
+
$settings = (object) array_merge( (array) $defaults, (array) $settings );
|
2444 |
+
$settings = apply_filters( 'fl_builder_render_module_css_settings', $settings, $id, $type );
|
2445 |
|
2446 |
// Module
|
2447 |
+
$class = get_class( FLBuilderModel::$modules[ $type ] );
|
2448 |
+
$module = new $class();
|
2449 |
$module->settings = FLBuilderSettingsCompat::filter_node_settings( 'module', $settings );
|
2450 |
|
2451 |
// CSS
|
2497 |
*/
|
2498 |
|
2499 |
static public function render_css( $include_global = true ) {
|
2500 |
+
$active = FLBuilderModel::is_builder_active();
|
2501 |
+
$nodes = FLBuilderModel::get_categorized_nodes();
|
2502 |
+
$node_status = FLBuilderModel::get_node_status();
|
2503 |
+
$global_settings = FLBuilderModel::get_global_settings();
|
2504 |
+
$asset_info = FLBuilderModel::get_asset_info();
|
2505 |
+
$enqueuemethod = FLBuilderModel::get_asset_enqueue_method();
|
2506 |
+
$post_id = FLBuilderModel::get_post_id();
|
2507 |
+
$post = get_post( $post_id );
|
2508 |
+
$css = '';
|
2509 |
+
$path = $include_global ? $asset_info['css'] : $asset_info['css_partial'];
|
2510 |
|
2511 |
// Render the global css.
|
2512 |
if ( $include_global ) {
|
2518 |
|
2519 |
// Instance row css
|
2520 |
$settings = $row->settings;
|
2521 |
+
$id = $row->node;
|
2522 |
ob_start();
|
2523 |
include FL_BUILDER_DIR . 'includes/row-css.php';
|
2524 |
FLBuilderCSS::render();
|
2539 |
|
2540 |
// Instance column css
|
2541 |
$settings = $col->settings;
|
2542 |
+
$id = $col->node;
|
2543 |
ob_start();
|
2544 |
include FL_BUILDER_DIR . 'includes/column-css.php';
|
2545 |
FLBuilderCSS::render();
|
2559 |
foreach ( $nodes['modules'] as $module ) {
|
2560 |
|
2561 |
// Global module css
|
2562 |
+
$file = $module->dir . 'css/frontend.css';
|
2563 |
$file_responsive = $module->dir . 'css/frontend.responsive.css';
|
2564 |
|
2565 |
// Only include global module css that hasn't been included yet.
|
2582 |
}
|
2583 |
|
2584 |
// Instance module css
|
2585 |
+
$file = $module->dir . 'includes/frontend.css.php';
|
2586 |
+
$settings = $module->settings;
|
2587 |
+
$id = $module->node;
|
2588 |
|
2589 |
if ( ! in_array( $id, self::$enqueued_module_css_assets ) && fl_builder_filesystem()->file_exists( $file ) ) {
|
2590 |
self::$enqueued_module_css_assets[] = $id;
|
2641 |
fl_builder_filesystem()->file_put_contents( $path, $css );
|
2642 |
}
|
2643 |
|
2644 |
+
/**
|
2645 |
+
* After CSS is compiled.
|
2646 |
+
* @see fl_builder_after_render_css
|
2647 |
+
*/
|
2648 |
do_action( 'fl_builder_after_render_css' );
|
2649 |
|
2650 |
return $css;
|
2661 |
$global_settings = FLBuilderModel::get_global_settings();
|
2662 |
|
2663 |
// Core layout css
|
2664 |
+
$css = fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'css/fl-builder-layout.css' );
|
2665 |
|
2666 |
// Core button defaults
|
2667 |
if ( ! defined( 'FL_THEME_VERSION' ) ) {
|
2668 |
+
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'css/fl-builder-layout-button-defaults.css' );
|
2669 |
}
|
2670 |
|
2671 |
// Core layout RTL css
|
2672 |
if ( is_rtl() ) {
|
2673 |
+
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'css/fl-builder-layout-rtl.css' );
|
2674 |
}
|
2675 |
|
2676 |
// Global node css
|
2677 |
foreach ( array(
|
2678 |
+
array( 'row_margins', '.fl-row-content-wrap { margin: ' ),
|
2679 |
+
array( 'row_padding', '.fl-row-content-wrap { padding: ' ),
|
2680 |
+
array( 'row_width', '.fl-row-fixed-width { max-width: ' ),
|
2681 |
+
array( 'column_margins', '.fl-col-content { margin: ' ),
|
2682 |
+
array( 'column_padding', '.fl-col-content { padding: ' ),
|
2683 |
array( 'module_margins', '.fl-module-content { margin: ' ),
|
2684 |
) as $data ) {
|
2685 |
if ( '' !== $global_settings->{ $data[0] } ) {
|
2686 |
$value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
|
2687 |
+
$css .= $data[1] . esc_attr( $value );
|
2688 |
+
$css .= ( is_numeric( $value ) ) ? ( $global_settings->{ $data[0] . '_unit' } . '; }' ) : ( '; }' );
|
2689 |
}
|
2690 |
}
|
2691 |
|
2696 |
$css .= '@media (max-width: ' . $global_settings->medium_breakpoint . 'px) { ';
|
2697 |
|
2698 |
// Core medium layout css
|
2699 |
+
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'css/fl-builder-layout-medium.css' );
|
2700 |
|
2701 |
// Global node medium css
|
2702 |
foreach ( array(
|
2703 |
+
array( 'row_margins_medium', '.fl-row[data-node] > .fl-row-content-wrap { margin: ' ),
|
2704 |
+
array( 'row_padding_medium', '.fl-row[data-node] > .fl-row-content-wrap { padding: ' ),
|
2705 |
+
array( 'column_margins_medium', '.fl-col[data-node] > .fl-col-content { margin: ' ),
|
2706 |
+
array( 'column_padding_medium', '.fl-col[data-node] > .fl-col-content { padding: ' ),
|
2707 |
+
array( 'module_margins_medium', '.fl-module[data-node] > .fl-module-content { margin: ' ),
|
2708 |
+
) as $data ) {
|
2709 |
if ( '' !== $global_settings->{ $data[0] } ) {
|
2710 |
$value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
|
2711 |
+
$css .= $data[1] . esc_attr( $value );
|
2712 |
+
$css .= ( is_numeric( $value ) ) ? ( $global_settings->{ $data[0] . '_unit' } . '; }' ) : ( '; }' );
|
2713 |
}
|
2714 |
}
|
2715 |
|
2719 |
$css .= '@media (max-width: ' . $global_settings->responsive_breakpoint . 'px) { ';
|
2720 |
|
2721 |
// Core responsive layout css
|
2722 |
+
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'css/fl-builder-layout-responsive.css' );
|
2723 |
|
2724 |
// Auto spacing
|
2725 |
if ( ! isset( $global_settings->auto_spacing ) || $global_settings->auto_spacing ) {
|
2726 |
+
$css .= fl_builder_filesystem()->file_get_contents( FL_BUILDER_DIR . 'css/fl-builder-layout-auto-spacing.css' );
|
2727 |
}
|
2728 |
|
2729 |
// Global node responsive css
|
2730 |
foreach ( array(
|
2731 |
+
array( 'row_margins_responsive', '.fl-row[data-node] > .fl-row-content-wrap { margin: ' ),
|
2732 |
+
array( 'row_padding_responsive', '.fl-row[data-node] > .fl-row-content-wrap { padding: ' ),
|
2733 |
+
array( 'column_margins_responsive', '.fl-col[data-node] > .fl-col-content { margin: ' ),
|
2734 |
+
array( 'column_padding_responsive', '.fl-col[data-node] > .fl-col-content { padding: ' ),
|
2735 |
+
array( 'module_margins_responsive', '.fl-module[data-node] > .fl-module-content { margin: ' ),
|
2736 |
+
) as $data ) {
|
2737 |
if ( '' !== $global_settings->{ $data[0] } ) {
|
2738 |
$value = preg_replace( self::regex( 'css_unit' ), '', strtolower( $global_settings->{ $data[0] } ) );
|
2739 |
+
$css .= $data[1] . esc_attr( $value );
|
2740 |
+
$css .= ( is_numeric( $value ) ) ? ( $global_settings->{ $data[0] . '_unit' } . '; }' ) : ( '; }' );
|
2741 |
}
|
2742 |
}
|
2743 |
|
2842 |
// Iterate over each direction
|
2843 |
foreach ( array( 'top', 'right', 'bottom', 'left' ) as $dir ) {
|
2844 |
$setting_key = $prop_type . '_' . $dir . $setting_suffix;
|
2845 |
+
$unit_key = $prop_type . $setting_suffix . '_unit';
|
2846 |
+
$unit = isset( $settings->{ $unit_key } ) ? $settings->{ $unit_key } : 'px';
|
2847 |
|
2848 |
if ( ! isset( $settings->{ $setting_key } ) ) {
|
2849 |
continue;
|
3017 |
}
|
3018 |
|
3019 |
self::$enqueued_global_assets[] = 'animation-' . $settings->animation['style'];
|
3020 |
+
$path = FL_BUILDER_DIR . 'css/animations/' . $settings->animation['style'] . '.css';
|
3021 |
|
3022 |
if ( file_exists( $path ) ) {
|
3023 |
$css = file_get_contents( $path );
|
3033 |
* @return string A CSS string.
|
3034 |
*/
|
3035 |
static public function render_all_animation_css() {
|
3036 |
+
$css = '';
|
3037 |
$animations = glob( FL_BUILDER_DIR . 'css/animations/*.css' );
|
3038 |
|
3039 |
if ( ! is_array( $animations ) ) {
|
3048 |
}
|
3049 |
|
3050 |
self::$enqueued_global_assets[] = 'animation-' . $key;
|
3051 |
+
$css .= file_get_contents( $path );
|
3052 |
}
|
3053 |
|
3054 |
return $css;
|
3063 |
*/
|
3064 |
static public function render_js( $include_global = true ) {
|
3065 |
// Get info on the new file.
|
3066 |
+
$nodes = FLBuilderModel::get_categorized_nodes();
|
3067 |
+
$global_settings = FLBuilderModel::get_global_settings();
|
3068 |
+
$layout_settings = FLBuilderModel::get_layout_settings();
|
3069 |
+
$rows = FLBuilderModel::get_nodes( 'row' );
|
3070 |
+
$asset_info = FLBuilderModel::get_asset_info();
|
3071 |
+
$enqueuemethod = FLBuilderModel::get_asset_enqueue_method();
|
3072 |
+
$js = '';
|
3073 |
+
$path = $include_global ? $asset_info['js'] : $asset_info['js_partial'];
|
3074 |
|
3075 |
// Render the global js.
|
3076 |
if ( $include_global && ! isset( $_GET['safemode'] ) ) {
|
3117 |
if ( ! self::is_debug() ) {
|
3118 |
try {
|
3119 |
$min = FLJSMin::minify( $js );
|
3120 |
+
} catch ( Exception $e ) {
|
3121 |
+
}
|
3122 |
|
3123 |
if ( isset( $min ) ) {
|
3124 |
$js = $min;
|
3130 |
fl_builder_filesystem()->file_put_contents( $path, $js );
|
3131 |
}
|
3132 |
|
3133 |
+
/**
|
3134 |
+
* After JS is compiled.
|
3135 |
+
* @see fl_builder_after_render_js
|
3136 |
+
*/
|
3137 |
do_action( 'fl_builder_after_render_js' );
|
3138 |
}
|
3139 |
|
3148 |
*/
|
3149 |
static public function render_global_js() {
|
3150 |
$global_settings = FLBuilderModel::get_global_settings();
|
3151 |
+
$js = '';
|
3152 |
|
3153 |
// Add the path legacy vars (FLBuilderLayoutConfig.paths should be used instead).
|
3154 |
$js .= "var wpAjaxUrl = '" . admin_url( 'admin-ajax.php' ) . "';";
|
3176 |
* @return string
|
3177 |
*/
|
3178 |
static public function render_row_js( $row_id ) {
|
3179 |
+
$row = is_object( $row_id ) ? $row_id : FLBuilderModel::get_node( $row_id );
|
3180 |
+
$settings = $row->settings;
|
3181 |
+
$id = $row->node;
|
3182 |
|
3183 |
ob_start();
|
3184 |
include FL_BUILDER_DIR . 'includes/row-js.php';
|
3193 |
* @return string
|
3194 |
*/
|
3195 |
static public function render_row_modules_js( $row_id ) {
|
3196 |
+
$row = is_object( $row_id ) ? $row_id : FLBuilderModel::get_node( $row_id );
|
3197 |
+
$nodes = FLBuilderModel::get_categorized_nodes();
|
3198 |
+
$template_post_id = FLBuilderModel::is_node_global( $row );
|
3199 |
+
$js = '';
|
3200 |
|
3201 |
// Render the JS.
|
3202 |
foreach ( $nodes['groups'] as $group ) {
|
3225 |
* @return string
|
3226 |
*/
|
3227 |
static public function render_column_group_modules_js( $group_id ) {
|
3228 |
+
$group = is_object( $group_id ) ? $group_id : FLBuilderModel::get_node( $group_id );
|
3229 |
+
$nodes = FLBuilderModel::get_categorized_nodes();
|
3230 |
+
$js = '';
|
3231 |
|
3232 |
// Render the JS.
|
3233 |
foreach ( $nodes['columns'] as $column ) {
|
3252 |
* @return string
|
3253 |
*/
|
3254 |
static public function render_column_modules_js( $col_id ) {
|
3255 |
+
$col = is_object( $col_id ) ? $col_id : FLBuilderModel::get_node( $col_id );
|
3256 |
+
$nodes = FLBuilderModel::get_categorized_nodes();
|
3257 |
+
$js = '';
|
3258 |
|
3259 |
// Render the JS.
|
3260 |
foreach ( $nodes['modules'] as $module ) {
|
3275 |
* @return string
|
3276 |
*/
|
3277 |
static public function render_module_js( $module_id ) {
|
3278 |
+
$module = is_object( $module_id ) ? $module_id : FLBuilderModel::get_module( $module_id );
|
3279 |
+
$global_settings = FLBuilderModel::get_global_settings();
|
3280 |
+
$js = '';
|
3281 |
|
3282 |
// Global module JS
|
3283 |
$file = $module->dir . 'js/frontend.js';
|
3284 |
|
3285 |
if ( fl_builder_filesystem()->file_exists( $file ) && ! in_array( $module->settings->type . '-module-js', self::$enqueued_global_assets ) ) {
|
3286 |
+
$js .= "\n" . fl_builder_filesystem()->file_get_contents( $file );
|
3287 |
self::$enqueued_global_assets[] = $module->settings->type . '-module-js';
|
3288 |
}
|
3289 |
|
3290 |
// Instance module JS
|
3291 |
+
$file = $module->dir . 'includes/frontend.js.php';
|
3292 |
+
$settings = $module->settings;
|
3293 |
+
$id = $module->node;
|
3294 |
|
3295 |
if ( ! in_array( $id, self::$enqueued_module_js_assets ) && fl_builder_filesystem()->file_exists( $file ) ) {
|
3296 |
self::$enqueued_module_js_assets[] = $id;
|
3309 |
* @since 1.7
|
3310 |
*/
|
3311 |
static public function render_global_nodes_custom_code( $type = 'css' ) {
|
3312 |
+
$code = '';
|
3313 |
+
$rendered = array();
|
3314 |
|
3315 |
if ( ! FLBuilderModel::is_post_node_template() ) {
|
3316 |
|
3317 |
+
$nodes = FLBuilderModel::get_layout_data();
|
3318 |
$node_status = FLBuilderModel::get_node_status();
|
3319 |
|
3320 |
foreach ( $nodes as $node_id => $node ) {
|
3324 |
if ( $template_post_id && ! in_array( $template_post_id, $rendered ) ) {
|
3325 |
|
3326 |
$rendered[] = $template_post_id;
|
3327 |
+
$code .= FLBuilderModel::get_layout_settings( $node_status, $template_post_id )->{ $type };
|
3328 |
}
|
3329 |
}
|
3330 |
}
|
3427 |
* @return string url
|
3428 |
*/
|
3429 |
static public function get_fa5_url() {
|
3430 |
+
|
3431 |
+
/**
|
3432 |
+
* Enable the PRO font-awesome-5 icon set.
|
3433 |
+
* This will also enqueue the CSS from the CDN.
|
3434 |
+
* @see fl_enable_fa5_pro
|
3435 |
+
*/
|
3436 |
+
$url = ( apply_filters( 'fl_enable_fa5_pro', false ) ) ? self::$fa5_pro_url : plugins_url( '/fonts/fontawesome/css/all.min.css', FL_BUILDER_FILE );
|
3437 |
+
|
3438 |
+
/**
|
3439 |
+
* Filter FA5 URL for enqueue.
|
3440 |
+
* @see fl_get_fa5_url
|
3441 |
+
* @since 2.2.1
|
3442 |
+
*/
|
3443 |
+
return apply_filters( 'fl_get_fa5_url', $url );
|
3444 |
}
|
3445 |
|
3446 |
/**
|
css/fl-builder-layout-auto-spacing.css
CHANGED
@@ -16,8 +16,6 @@
|
|
16 |
------------------------------------------------------ */
|
17 |
|
18 |
.fl-col[data-node] .fl-col-content {
|
19 |
-
border-left: none;
|
20 |
-
border-right: none;
|
21 |
margin: 0;
|
22 |
padding-left: 0;
|
23 |
padding-right: 0;
|
16 |
------------------------------------------------------ */
|
17 |
|
18 |
.fl-col[data-node] .fl-col-content {
|
|
|
|
|
19 |
margin: 0;
|
20 |
padding-left: 0;
|
21 |
padding-right: 0;
|
css/fl-builder-layout.css
CHANGED
@@ -227,7 +227,7 @@
|
|
227 |
.fl-builder-ie-11 .fl-row-full-height.fl-row-align-top .fl-row-content,
|
228 |
.fl-builder-ie-11 .fl-row-full-height.fl-row-align-bottom .fl-row-content,
|
229 |
.fl-builder-ie-11 .fl-row-custom-height.fl-row-align-top .fl-row-content,
|
230 |
-
.fl-builder-ie-11 .fl-row-custom-height.fl-row-align-bottom .fl-row-content
|
231 |
margin: 0 auto;
|
232 |
}
|
233 |
|
227 |
.fl-builder-ie-11 .fl-row-full-height.fl-row-align-top .fl-row-content,
|
228 |
.fl-builder-ie-11 .fl-row-full-height.fl-row-align-bottom .fl-row-content,
|
229 |
.fl-builder-ie-11 .fl-row-custom-height.fl-row-align-top .fl-row-content,
|
230 |
+
.fl-builder-ie-11 .fl-row-custom-height.fl-row-align-bottom .fl-row-content {
|
231 |
margin: 0 auto;
|
232 |
}
|
233 |
|
css/fl-builder-rtl.css
CHANGED
@@ -472,3 +472,11 @@ body .fl-dimension-field-units > *:last-child > * {
|
|
472 |
.fl-photo-field .fl-photo-replace, .fl-photo-field .fl-photo-remove {
|
473 |
margin: 0 8px 0 0;
|
474 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
472 |
.fl-photo-field .fl-photo-replace, .fl-photo-field .fl-photo-remove {
|
473 |
margin: 0 8px 0 0;
|
474 |
}
|
475 |
+
|
476 |
+
/* HTML editor
|
477 |
+
------------------------------------------------------ */
|
478 |
+
|
479 |
+
.fl-lightbox .ace_editor {
|
480 |
+
direction: ltr;
|
481 |
+
text-align: left;
|
482 |
+
}
|
css/fl-builder.css
CHANGED
@@ -3305,6 +3305,11 @@ form.fl-builder-settings {
|
|
3305 |
.fl-lightbox .mce-top-part::before {
|
3306 |
box-shadow:none !important;
|
3307 |
}
|
|
|
|
|
|
|
|
|
|
|
3308 |
.fl-lightbox div.mce-toolbar-grp {
|
3309 |
background: transparent;
|
3310 |
border:none;
|
@@ -4860,8 +4865,7 @@ span.select2-container.select2-container--open {
|
|
4860 |
.fl-field-connections-toggle {
|
4861 |
padding: 10px 0px;
|
4862 |
}
|
4863 |
-
.fl-field[data-type="editor"] .fl-field-connections-toggle
|
4864 |
-
.fl-field[data-type="code"] .fl-field-connections-toggle {
|
4865 |
align-items: flex-start;
|
4866 |
}
|
4867 |
.fl-field[data-type="link"] .fl-field-connections-toggle {
|
@@ -5664,8 +5668,7 @@ body > .fl-builder-tour-dimmed {
|
|
5664 |
.fl-field-connections-menu {
|
5665 |
z-index: 999999;
|
5666 |
}
|
5667 |
-
.fl-field[data-type="editor"] .fl-field-connections-toggle
|
5668 |
-
.fl-field[data-type="code"] .fl-field-connections-toggle {
|
5669 |
right: 5px !important;
|
5670 |
}
|
5671 |
.fl-field-connections-inline-toggle {
|
3305 |
.fl-lightbox .mce-top-part::before {
|
3306 |
box-shadow:none !important;
|
3307 |
}
|
3308 |
+
|
3309 |
+
.mce-container .mce-stack-layout span {
|
3310 |
+
color: initial;
|
3311 |
+
}
|
3312 |
+
|
3313 |
.fl-lightbox div.mce-toolbar-grp {
|
3314 |
background: transparent;
|
3315 |
border:none;
|
4865 |
.fl-field-connections-toggle {
|
4866 |
padding: 10px 0px;
|
4867 |
}
|
4868 |
+
.fl-field[data-type="editor"] .fl-field-connections-toggle {
|
|
|
4869 |
align-items: flex-start;
|
4870 |
}
|
4871 |
.fl-field[data-type="link"] .fl-field-connections-toggle {
|
5668 |
.fl-field-connections-menu {
|
5669 |
z-index: 999999;
|
5670 |
}
|
5671 |
+
.fl-field[data-type="editor"] .fl-field-connections-toggle {
|
|
|
5672 |
right: 5px !important;
|
5673 |
}
|
5674 |
.fl-field-connections-inline-toggle {
|
css/fl-builder.min.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.fl-color-picker-ui{width:300px}.fl-color-picker-ui.fl-color-alpha-enabled{width:334px}.fl-color-picker-ui .iris-picker{float:left;width:100%;height:224px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:300px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{box-sizing:border-box;width:calc(300px - 12px);margin:5px 6px 6px;border-radius:4px;position:relative;height:22px;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle:focus{outline:#00a0d2 solid 2px}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-ui .iris-picker .iris-square-value{width:0;height:0;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker{box-shadow:0 2px 4px 0 rgba(0,0,0,.12);background:url(../img/transp_bg.png) #fff;border-radius:4px;width:120px;height:36px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-color-picker-color{-ms-flex:1 1 100%;flex:1 1 100%;box-sizing:border-box!important;position:relative;border-radius:4px;background-color:transparent;cursor:pointer;border:2px solid transparent;padding:0;-ms-flex-pack:center;justify-content:center;display:-ms-flexbox;display:flex}.fl-color-picker-clear:hover,.fl-color-picker-color:hover{background:0 0;border:2px solid transparent}.fl-color-picker-clear:focus,.fl-color-picker-color.fl-color-picker-empty:focus,.fl-color-picker-color:focus{outline:0;top:0;border:2px solid #00a0d2;background:0 0}.fl-color-picker.fl-color-picker-has-reset .fl-color-picker-color:not(.fl-color-picker-empty){border-top-right-radius:0;border-bottom-right-radius:0}.fl-color-picker-icon{display:none;margin:auto}.fl-color-picker-color.fl-color-picker-empty{border-color:transparent}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon{display:block}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon path{fill:inherit}.fl-color-picker-clear{box-sizing:border-box;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 36px;flex:0 0 36px;-ms-flex-pack:center;justify-content:center;padding:0;border:2px solid transparent;fill:#A2AABE;background-color:#E7EBEF;cursor:pointer;border-radius:0 4px 4px 0}.fl-color-picker-clear:hover{fill:#6B6E75;background-color:#E7EBEF}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:1;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;box-shadow:0 9px 20px rgba(0,0,0,.17);transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1;z-index:999999}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#656c6e;background-color:#fff;border-radius:0;box-shadow:none}.fl-color-picker-ui .iris-square-value{transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#656c6e;border-radius:50%;cursor:pointer;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;transition:all .5s;transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#656c6e;visibility:visible;opacity:1;z-index:999999}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-no-preset{padding:18px 5px;text-align:center}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:40px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#333;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:auto;top:auto;margin:auto}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.8)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#6f7881}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;transform:rotate(45deg)}.fl-alpha-wrap{position:absolute;width:32px;height:215px;padding:0 5px;right:4px;border-top:none}.fl-alpha-slider{height:190px;position:absolute;top:12px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:12px;left:0;opacity:.9;position:absolute;right:0;width:30px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-theme-builder-preview-select-title i:before,body .fl-theme-builder-preview-select .fa-caret-down i:before,body .fl-theme-builder-preview-select-item-title i:before{content:"\f078"}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC) center;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:22px;transform:rotate(-90deg);bottom:48%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;z-index:100010}@keyframes fl-lightbox-zoom{from{transform:scale(.4)}to{transform:scale(1)}}.fl-lightbox-wrap{display:none;overflow:auto;padding:0;top:43px;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);pointer-events:none}.fl-builder-draggable-is-dragging .fl-lightbox-wrap,.fl-builder-resizable-is-resizing .fl-lightbox-wrap,.fl-lightbox,.fl-lightbox-mask{pointer-events:auto}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);top:0}.fl-lightbox{background:#F5F7F9;border-radius:4px;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;display:-ms-flexbox;display:flex;z-index:100011;transform-origin:center;animation-name:fl-lightbox-zoom;animation-duration:.25s}.fl-lightbox.fl-lightbox-prevent-animation{animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-lightbox :not(i){color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:14px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{box-sizing:content-box}#fl-ui-root .fl-nanoscroller-pane,.fl-builder--content-library-panel .fl-nanoscroller-pane,.fl-lightbox .fl-nanoscroller-pane{bottom:2px;right:2px;width:6px}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#bac0ca;transition-property:height,background-color;transition-duration:.25s}#wpadminbar,html{transition-duration:.35s}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider:hover{background-color:#c8cdd4}.fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#029fd2}.fl-lightbox .fa{font-family:FontAwesome!important}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.2) 0 7px 30px;-moz-box-shadow:rgba(0,0,0,.2) 0 7px 30px;-webkit-box-shadow:rgba(0,0,0,.2) 0 7px 30px}#wpadminbar,.fl-builder-bar.is-hidden{pointer-events:none}.fl-lightbox-resizable{height:500px;width:380px}@media (max-width:500px){.fl-lightbox-resizable{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-resizable .ui-resizable-handle{display:none!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:default!important}.fl-lightbox-controls{display:none}}.fl-lightbox-width-full{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-width-full .fl-lightbox-header{cursor:inherit!important}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#bdbdbd;font-size:14px;padding:5px}.fl-lightbox-controls .fa:hover{color:#aaa;cursor:pointer}.fl-lightbox-header-wrap{border-top-left-radius:4px;border-top-right-radius:4px}.fl-lightbox-header{position:relative}.fl-lightbox-header h1{color:#333!important;font-size:16px!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-weight:400!important;margin:0!important;padding:14px 34px 15px 28px!important;text-align:left!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;line-height:1}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-header h1 .fl-builder-badge{margin-left:10px;color:#fff;background-color:#F7A408}.fl-lightbox-content,.fl-lightbox-content-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 100%;flex:1 100%;max-width:100%}.fl-lightbox-footer{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;-ms-flex:0 0;flex:0 0;-ms-flex-preferred-size:44px;flex-basis:44px;padding:4px;text-align:right}.fl-lightbox-footer .fl-builder-button{height:36px;margin-left:5px!important;-ms-flex:0 0 0%;flex:0 0 0%;-ms-flex-pack:center;justify-content:center}.fl-lightbox-width-slim .fl-lightbox-footer{-ms-flex-pack:stretch;justify-content:stretch;padding:4px 5px}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button{-ms-flex:1 1 100%;flex:1 1 100%;display:block;text-align:center}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button:first-child{margin-left:0!important}.fl-lightbox table,.fl-lightbox td,.fl-lightbox th,.fl-lightbox tr{border:none}.fl-lightbox-wrap.fl-icon-selector{z-index:1000111}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:0;top:0;padding:10px 16px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-icons-filter select{vertical-align:middle;width:195px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:#000;border:2px solid #e4e7ea!important;border-right:none!important;margin:0;padding:2px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;-ms-flex:1 1 195px;flex:1 1 195px;border-radius:0}.fl-icons-filter input[type=text]{line-height:18px;vertical-align:middle;width:160px;-ms-flex:1 1 160px;flex:1 1 160px;border:2px solid #e4e7ea!important;border-radius:0!important;padding:2px 10px!important}.fl-icons-filter input[type=text]:focus,.fl-icons-filter select:focus{border:2px solid #00A0D2!important}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:40px;height:100px;line-height:100px;width:100px;background:0 0}.fl-icons-list i:hover{background:#fff;box-shadow:0 10px 20px rgba(0,0,0,.15);border-radius:4px}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}html{transition-property:margin}html.fl-builder-is-showing-toolbar{margin-top:calc(44px + 1px)!important}.fl-builder-edit body{position:static!important}.fl-builder-edit:after,.fl-builder-edit:before{z-index:0!important}.fl-builder-edit .fl-builder-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}#wpadminbar{transition-property:transform,opacity;transform-origin:bottom;transform-style:preserve-3d;transform:rotateX(89deg) translateY(46px);opacity:0;will-change:transform}html.fl-builder-show-admin-bar{margin-top:32px}html.fl-builder-show-admin-bar #wpadminbar{transform:rotateX(0) translateY(0);pointer-events:auto;opacity:1}@media screen and (max-width:782px){html.fl-builder-show-admin-bar{margin-top:46px}}.fl-clear{clear:both}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:12000000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.fl-field-loader{color:#B3B3B3!important;font-style:italic}.fl-builder-node-loading{opacity:.35!important}.fl-builder-node-loading-placeholder{background:url(../img/ajax-loader.svg) center center no-repeat;height:50px}.fl-col-group-has-child-loading{display:-ms-flexbox;display:flex}.fl-col-group-has-child-loading>.fl-builder-node-loading-placeholder{width:50px}.fl-node-hidden{display:none}.fl-builder-edit .fl-node-hidden{display:block}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-mobile{display:block!important}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-mobile{display:-ms-flexbox!important;display:flex!important}.fl-responsive-preview-enabled body{overflow:hidden!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:fixed;right:0;top:0;margin-top:50px;z-index:100000}.fl-builder-preview .fl-responsive-preview{margin:0!important}.fl-responsive-preview-content{background:#F5F7F9;padding:20px 20px 45px;overflow:scroll;position:absolute;top:45px;right:0;bottom:0;left:0}.fl-responsive-preview-content .fl-builder-content-editing{overflow:visible!important}.fl-responsive-preview-message{background:#F5F7F9;color:#b3b3b3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-size:14px;font-weight:400;padding:15px;text-align:center;position:absolute;top:0;left:0;right:0;z-index:999999}.fl-responsive-preview-message span{display:inline-block;margin-right:8px}.fl-responsive-preview-message .fl-builder-button{display:inline-block;margin-left:2px;padding:0 10px}.fl-responsive-preview-message .fl-builder-button i{font-size:14px;height:14px;width:14px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%;overflow:visible;position:relative}#fl-builder-preview-frame,#fl-builder-preview-mask{bottom:0;height:100%;position:fixed;top:0;width:100%;right:0}.fl-responsive-preview .fl-block-col-resize{display:none}.fl-builder-button,body .fl-builder-bar .fl-builder-bar-content{display:-ms-flexbox;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}#fl-builder-preview-mask{background:url(../img/ajax-loader.svg) center center no-repeat #F7F7F7;left:0;z-index:999999}#fl-builder-preview-frame{left:50%;transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);z-index:1000000}body button[class*=fl-builder],body button[class*=fl-builder]:focus,body button[class*=fl-builder]:hover{box-shadow:none;max-height:none;max-width:none;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none}.fl-builder-button{-webkit-appearance:none;-ms-flex-align:center;align-items:center;background:#e7ebef;border:2px solid transparent;border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;color:#676F7A!important;cursor:pointer;display:flex;fill:#676F7A!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:33px;letter-spacing:normal!important;line-height:1!important;margin:0;padding:0 12px;text-align:center;transition-property:background-color,width;transition-duration:.2s;white-space:nowrap;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder--search-results-panel,.fl-builder-bar,.fl-builder-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.fl-builder-button:hover{background:#dadfe5;color:#222;border:2px solid transparent!important}.fl-builder-button:active{background:#DCDCDC}button.fl-builder-button:focus{position:static;top:auto;outline:0;background:#E4E7EA;border:2px solid #00A0D0!important}.fl-builder-bar .fl-builder-button{height:auto}.fl-builder-button-primary,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button{background:#00A0D2;color:#fff!important;text-decoration:none;border:2px solid transparent!important}.fl-builder-button.fl-builder-button-primary:focus,body.fl-builder--layout-has-drafted-changes .fl-builder-button.fl-builder-done-button:focus{background:#00A0D2;border:2px solid #ffc217!important}.fl-builder-button-primary:hover,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:hover{background:#0197C6;color:#fff!important}.fl-builder-button-primary:active,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:active{background:#0484AC}.fl-builder-button-large{height:30px}.fl-builder-button-small{font-size:11px!important;line-height:1!important}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{line-height:45px!important}.fl-builder-content-panel-button,.fl-builder-content-panel-button:hover{fill:#00A0D2!important;font-size:30px!important;padding-bottom:4px}.fl-builder-button-silent,.fl-builder-button-silent:hover{padding:0 12px;background:0 0!important;border:2px solid transparent!important;box-shadow:none!important}.fl-builder-done-button,.fl-builder-done-button:hover{font-weight:600}.fl-field .fl-builder-button{display:inline-block;height:auto;padding:11px 12px;vertical-align:middle;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:middle}.fl-builder-badge-global{background:#ff9600;transform:translateY(0);transition-duration:.25s;transition-property:transform}.fl-builder-blocks-node-template .fl-builder-badge-global{position:absolute;right:0;top:0}.fl-builder-block:hover .fl-builder-badge-global{display:none}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:999999;user-select:none;transition-property:transform opacity;transition-duration:.35s;transform-style:preserve-3d;perspective:1100px}.fl-builder-bar.is-hidden .fl-builder-bar-content{transform:translateY(-100%) rotateX(90deg)}body .fl-builder-bar .fl-builder-bar-content{display:flex;box-sizing:border-box;background:#fff;border-bottom:1px solid #eceef1;color:#999;font-size:14px!important;height:calc(44px + 1px);transition-property:background-color,opacity,transform;transition-duration:.35s;pointer-events:auto}.fl-builder-draggable-is-dragging .fl-builder-content,.fl-builder-draggable-is-dragging .fl-builder-panel .fl-lightbox,.fl-builder-resizable-is-resizing .fl-builder-content,.fl-builder-resizable-is-resizing .fl-builder-panel .fl-lightbox,body .fl-builder-bar .fl-builder-bar-content.is-muted{pointer-events:none}body .fl-builder-bar .fl-builder-bar-content.is-muted>:not(.fl-builder-publish-actions){-webkit-filter:saturate(20%) blur(1px);filter:saturate(20%) blur(1px);opacity:.4}.fl-builder-bar-title{box-sizing:border-box;color:#333;display:-ms-flexbox;display:flex;-ms-flex:0 0 380px;flex:0 0 380px;max-width:380px;border-right:1px solid #eceef1;cursor:pointer}.fl-builder-bar-title:hover{background:#fff}.fl-builder-bar-title.is-showing-menu .fl-builder-bar-title-caret>svg{transform:rotate(180deg)}.fl-builder-simple .fl-builder-bar-title{cursor:auto}.fl-builder-simple .fl-builder-bar-title:hover{cursor:auto;background:0 0}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title-icon{box-sizing:border-box;background:0 0;-ms-flex:0 0 46px;flex:0 0 46px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:4px}.fl-builder-bar-title-icon img{max-width:100%!important;height:auto!important}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding-left:12px}.fl-builder-bar-title-area{box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:4px}.fl-builder-layout-title,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{font-size:16px;font-weight:400;line-height:1.3;color:#161B20;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret,.fl-builder-layout-pretitle,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{font-size:12px;font-weight:500;line-height:1.3;color:#656d77;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret i,.fl-theme-builder-preview-select-title i{color:inherit!important;font-size:14px}.fl-builder-bar-title-caret{margin-left:auto!important;-ms-flex:0 0 46px;flex:0 0 46px}.fl-theme-builder-preview-select-title i{padding:12px}.fl-theme-builder-preview-select.fl-builder-button{position:relative;border-radius:0;background:0 0;min-width:0;display:-ms-flexbox;display:flex;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;margin:0!important;padding:4px 10px;border:none!important;border-right:2px solid #d5dadd!important;box-shadow:none}.fl-theme-builder-preview-select.fl-builder-button:hover{border:none!important;border-right:2px solid #d5dadd!important}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fl-theme-builder-preview-select-title div{-ms-flex:1;flex:1}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{display:block}.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items{position:absolute;top:calc(48px + 10px);left:10px;width:calc(100% - 20px)!important;background:#fff;border-radius:4px;border:2px solid #D5DADD;border-top:3px solid #00a0d2;box-shadow:0 15px 45px 8px rgba(0,0,0,.04);margin:0!important;padding:0;z-index:-1;font-size:16px;overflow:visible;height:auto!important;max-height:calc(100vh - 66px);min-height:300px;display:-ms-flexbox!important;display:flex!important;-ms-flex-direction:column;flex-direction:column}.fl-theme-builder-preview-select-item{padding:4px 0!important;border-bottom:none!important;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:initial}.fl-theme-builder-preview-select-item:hover{text-decoration:none;color:#111;background:0 0!important}body .fl-theme-builder-preview-select .fa-caret-down{float:none}body .fl-theme-builder-preview-select-item-title{padding:10px 15px;color:#222;font-size:14px}body .fl-theme-builder-preview-select-item-children{overflow:auto}body .fl-theme-builder-preview-select-item-child{overflow:hidden;text-overflow:ellipsis;line-height:1.1;margin:0 10px;border:2px solid transparent;border-radius:4px;padding:8px 10px 10px;font-size:14px;font-weight:400;color:#222}body .fl-theme-builder-preview-select-item-child:hover{background:#e6eaed!important}.fl-theme-builder-preview-select-item .fa-caret-down{color:#606D77}.fl-builder-bar-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:1 1 100%;flex:1 1 100%;padding:4px}.fl-builder-bar .fl-builder-button{margin:0 0 0 4px}.fl-builder-bar-actions .fl-builder-button:last-child{margin:0}.fl-builder-bar-actions:after{clear:both}.fl-builder-bar .fl-builder-content-panel-button{-ms-flex-align:baseline!important;align-items:baseline!important;padding-top:1px;font-weight:400}.fl-builder-content-panel-button svg{transition-property:transform;transition-duration:.25s;transform:rotate(0) scale(1);transform-origin:center}.fl-builder-content-panel-is-showing .fl-builder-content-panel-button svg{transform:rotate(135deg) scale(1.1) translate(.5px,-.5px)}.fl-builder--saving-indicator{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;padding:0 10px;font-size:12px;font-style:italic;color:#676f7a;-ms-flex-align:center;align-items:center;line-height:1.2;min-width:180px;-ms-flex-pack:end;justify-content:flex-end}.fl-builder--saving-indicator:hover{color:#676f7a}.fl-builder--saving-indicator .fa-question-circle{font-size:13px;margin:3px 0 3px 5px}.fl-builder-buy-button,.fl-builder-feedback-button,.fl-builder-upgrade-button{background:#F7A407;color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-alt,.fl-builder-feedback-button i.fa-external-link-alt,.fl-builder-upgrade-button i.fa-external-link-alt{color:#FFC733;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-feedback-button:hover,.fl-builder-upgrade-button:hover{background:#EE8E0D;color:#fff!important}@media (max-width:980px){.fl-builder--main-menu-panel{width:calc(100% - 20px)!important}.fl-builder--main-menu-panel:before{right:auto;left:20px}.fl-builder-bar-title,.fl-theme-builder-preview-select{-ms-flex:1 .5 380px!important;flex:1 .5 380px!important}}@media (max-width:620px){.fl-theme-builder-preview-select.fl-builder-button{display:none}}@media (max-width:500px){#fl-builder-toggle-notifications,.fl-builder--main-menu-panel:before,.fl-builder--panel-arrow,.fl-builder-bar-title-area,.fl-builder-panel-drag-handle,.fl-builder-panel:before{display:none}.fl-builder--main-menu-panel,.fl-builder-panel{width:auto!important;top:44px!important;left:0!important;right:0!important;bottom:0!important;border-radius:0!important;box-shadow:none!important}.fl-builder--main-menu-panel{border-left:transparent!important;border-right:transparent!important;border-bottom:transparent!important;max-height:calc(100% - 44px)!important}.fl-builder-bar-title{-ms-flex:0 0 80px!important;flex:0 0 80px!important}.fl-builder-bar-title-caret{padding-left:0;padding-right:0;max-width:24px}.fl-builder-bar-actions{max-width:calc(100% - 80px);overflow:hidden}.fl-builder--panel-header{border-radius:0!important;cursor:default!important}.fl-builder--panel-header .fl-builder--tabs{cursor:default!important}.fl-builder-publish-actions{width:100%!important;padding-left:4px!important}.fl-builder-bar-actions .fl-builder-button{padding:0 8px!important}}.fl-builder--preview-actions{display:none;position:fixed;top:4px;left:4px;z-index:10000001;padding:4px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder-preview .fl-builder--preview-actions{display:-ms-flexbox;display:flex}.fl-builder--preview-actions .device-icons{color:#555;background:#e4e4e4;border:none!important;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;text-decoration:none;font-size:14px!important;line-height:1!important;margin:0 4px 0 0;padding:0 6px;cursor:pointer;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px}.fl-builder--preview-actions .device-icons i{margin:0 6px}@keyframes fl-builder-ui-pin-zone-pulse{0%,100%{opacity:1;filter:alpha( opacity=1 )}50%{opacity:.5;filter:alpha( opacity=35 )}}.fl-builder-ui-pin-zone{animation:fl-builder-ui-pin-zone-pulse 2s infinite;transition:width .3s ease;background:rgba(0,160,210,.5);bottom:0;top:0;position:fixed;width:35px;z-index:100001}.fl-builder-ui-show-pin-zone-left .fl-builder-ui-pin-zone-left,.fl-builder-ui-show-pin-zone-right .fl-builder-ui-pin-zone-right{width:75px}.fl-builder-ui-pin-zone-left{left:0}.fl-builder-ui-pin-zone-right{right:0}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button{display:-ms-flexbox!important;display:flex!important;background:rgba(0,160,210,.5)!important;padding:2px 4px;width:80px;animation:fl-builder-ui-pin-zone-pulse 2s infinite}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button svg{display:none}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button{width:120px}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button svg{display:none!important;width:100%;transform:none!important;fill:#00A0D2!important;border-radius:3px}.fl-builder-ui-is-pinned .fl-builder-content-panel-button,.fl-builder-ui-pinned-container .fl-lightbox-controls{display:none}.fl-builder-content-panel-pin-zone .fl-builder-done-button{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.fl-builder-panel.fl-builder-ui-pinned{top:45px!important;bottom:0!important;height:auto!important;border-radius:0;border:none;box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s;z-index:11}.fl-builder-panel.fl-builder-ui-pinned-right{left:auto!important;right:0;border-left:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned-left{left:0;right:auto;border-right:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-radius:0!important}.fl-builder-ui-pinned-container .fl-lightbox-wrap{position:absolute;z-index:11}.fl-builder-ui-pinned-container .fl-lightbox{position:absolute;top:0;bottom:0;left:0;right:0;width:auto!important;height:auto;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-builder-ui-pinned-container .fl-lightbox-header-wrap{border-radius:0}.fl-builder-ui-pinned-container .fl-lightbox.ui-draggable .fl-lightbox-header{cursor:auto}.fl-builder-ui-pinned-container .fl-lightbox-header h1{padding:12px 20px 10px!important}.fl-builder-ui-pinned-content-transform{transform:scale(1);transform-origin:center top 0}.fl-builder-ui-pinned-collapse{cursor:pointer;display:none;position:absolute!important;bottom:2px;padding:5px;border:2px solid transparent;background:0 0;width:36px;height:36px;border-radius:4px;fill:#778794;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.fl-builder-ui-pinned-collapse:focus,.fl-builder-ui-pinned-collapse:hover{top:auto!important;background:0 0;border:2px solid transparent;outline:0;fill:#00A0D2}.fl-builder-ui-pinned-collapse:focus{background:#E4E7EA}.fl-builder-ui-pinned-collapse>*{margin:auto;line-height:1}.fl-builder-ui-pinned-collapse svg g{fill:inherit}.fl-builder-ui-is-pinned-right .fl-builder-ui-pinned-right-collapse{display:-ms-flexbox;display:flex;left:-40px}.fl-builder-ui-is-pinned-left .fl-builder-ui-pinned-left-collapse{display:-ms-flexbox;display:flex;right:-40px}.fl-builder-ui-pinned-collapse i[data-toggle=show],.fl-builder-ui-pinned-is-collapsed i[data-toggle=hide]{display:none}.fl-builder-ui-pinned-is-collapsed i[data-toggle=show]{display:block}.fl-builder--panel-no-settings,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-content,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-controls,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--tab-wrap,.fl-builder-ui-pinned-is-collapsed .fl-builder--panel-header{display:none}.fl-builder-ui-is-pinned-left [data-toggle=hide],.fl-builder-ui-is-pinned-right [data-toggle=show]{transform:rotateY(180deg)}.fl-builder-ui-pinned-is-collapsed .fl-lightbox{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-header{background:0 0;border:none;z-index:10}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-wrap{top:0}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-header h1{padding:14px 28px 15px!important}.fl-builder-simple-pinned .fl-builder--panel-no-settings{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;right:0;bottom:0}@keyframes fl-builder-show-panel{from{transform:scale(.8)}to{transform:scale(1)}}.fl-builder--search-results-panel,.fl-builder-panel{box-sizing:border-box;position:fixed!important;right:20px;top:calc(43px + 10px);width:380px;bottom:20px;background:#F5F7F9;color:#676F7A;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;border-radius:4px;box-shadow:0 8px 40px 4px rgba(0,0,0,.3);z-index:10000007;will-change:transform;user-select:none}.fl-builder-panel{transform-origin:top right;animation-name:fl-builder-show-panel;animation-duration:.15s;animation-fill-mode:both;-ms-flex:1;flex:1;display:none}.fl-builder--search-results-panel{display:none;position:absolute;right:0;top:93px;left:0;bottom:0;width:auto!important;border:none;border-radius:0;box-shadow:none;min-height:100px;max-height:calc(100vh - 54px);overflow:auto;z-index:1}.fl-builder-content-panel-is-showing .fl-builder-panel,.fl-builder-search-results-panel-is-showing .fl-builder--search-results-panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-panel .fl-lightbox .fl-builder-panel-drag-handle,.fl-builder-ui-is-pinned .fl-builder--panel-arrow,.fl-lightbox-width-full .fl-builder-panel-drag-handle,body.fl-builder-draggable-is-dragging .fl-builder--panel-arrow{display:none}.fl-builder--search-results-panel .fl-builder--no-results{text-align:center;padding:50px 20px}.fl-builder--panel-arrow{position:absolute;top:-13px;right:10px}.fl-builder--panel-arrow polygon{fill:#00a0d2}.fl-builder--panel-header{border-top:3px solid #00a0d2;border-top-right-radius:4px;border-top-left-radius:4px}.fl-builder-ui-is-pinned .fl-builder--panel-header{border-top:none}.fl-builder-panel-drag-handle{position:absolute;top:7px;left:10px;fill:#ccd4da;width:6px}.fl-builder-ui-is-pinned-left .fl-builder-panel-drag-handle{left:auto;right:10px}.fl-builder--panel-header .fl-builder--panel-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-content-group-select{-ms-flex:1 1;flex:1 1}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-panel-search{-ms-flex:0 0;flex:0 0;padding:0 10px 6px 0;margin-left:-4px}.fl-builder--panel-controls .fl-builder-panel-search button{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:30px;background:0 0!important;border:2px solid transparent!important;font-size:inherit;height:36px;margin:0;padding:0}.fl-builder--panel-controls .fl-builder-panel-search button:active,.fl-builder--panel-controls .fl-builder-panel-search button:focus{top:0;outline:0}.fl-builder-panel-search button svg{height:auto;width:20px}.fl-builder-panel-search button.fl-builder-dismiss-panel-search svg{width:16px}.fl-builder-panel-search button svg .filled-shape{fill:#000}.fl-builder--panel-controls .fl-builder-panel-search button:active svg .filled-shape,.fl-builder--panel-controls .fl-builder-panel-search button:focus svg .filled-shape{fill:#00A0D2}.fl-builder-panel-search .fl-builder-panel-search-input{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background:#f5f7f9}.fl-builder-panel-search.is-showing-input .fl-builder-panel-search-input{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:0 10px 6px}.fl-builder-panel-search-input input{-ms-flex:1 1 100%;flex:1 1 100%;border:2px solid #e6eaed;background:#fff;border-radius:4px;margin:0 4px 0 0;padding:10px;color:#333}.fl-builder-panel-search-input input:focus{border-color:#0197C6;outline:0}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder--panel-view .fl-builder-blocks-section:first-child{border-top:none}.fl-builder-blocks-group:first-child{padding:20px 0 0}.fl-builder-blocks-group .fl-builder-blocks-section-group-name{display:block;padding:0 30px 15px;color:#000;font-size:20px;font-weight:600;line-height:1.4}.fl-builder-blocks-section .fl-builder-block{display:block;line-height:1.1;padding:15px 20px}.fl-builder--template-collection-section-header,.fl-builder-blocks-section .fl-builder-blocks-section-header{line-height:1.2;color:#333;margin:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e7ebef;border-top:4px solid #e7ebef;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-blocks-section .fl-builder-blocks-section-title{background:#F5F7F9;color:#353535;padding:2px 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section-content{overflow:auto;padding:10px 10px 20px}.fl-builder-blocks-section-content:before{content:none}.fl-builder-blocks-section-content:after{float:none;clear:both}.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@supports (display:grid){.fl-builder--template-collection-section-content,.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.fl-builder--template-collection-section-content>*,.fl-builder-blocks-section-content.fl-builder-modules>*,.fl-builder-blocks-section-content.fl-builder-rows>*,.fl-builder-blocks-section-content.fl-builder-widgets>*{width:auto!important}}.fl-builder-blocks-section-content .fl-builder-block-module,.fl-builder-blocks-section-content .fl-builder-block-row{-ms-flex:1 1 50%;flex:1 1 50%;width:50%;box-sizing:border-box}.fl-builder--search-results-panel .fl-builder-blocks-section-content .fl-builder-block-module{-ms-flex:1 1 100%;flex:1 1 100%;width:100%}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:13px;line-height:1.1;font-weight:400;color:#38404a}.fl-builder-block{position:relative;height:47px}.fl-builder-block.fl-builder-block-col-group{height:84px}.fl-builder-block.fl-builder-block-has-thumbnail{height:auto!important;padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover{padding:0!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-content{position:relative!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover .fl-builder-block-content{padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-details{margin:0 10px 4px!important}.fl-builder-block:hover{overflow:visible;z-index:1}.fl-builder-block:hover .fl-builder-block-content{display:block;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;padding:15px 20px;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-decoration:none;color:#111;cursor:move;overflow:hidden}.fl-builder-blocks-node-template .fl-builder-block,.fl-builder-blocks-section-content .fl-builder-block .fl-builder-block-details{position:relative}.fl-builder-block-module:hover .fl-builder-block-content{width:auto;min-width:100%}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual{display:block;margin-bottom:7px}.fl-builder-block-drag-helper .fl-builder-block-content .fl-builder-block-visual{display:none!important}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual.fl-cols-visual{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;height:30px}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{-ms-flex:1 100%;flex:1 100%;background:#464a4c;height:30px;margin:0 2px;border-radius:2px}.fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#000}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:first-child{margin-left:0!important}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:last-child{margin-right:0!important}.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:last-child,.fl-cols-visual.left-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.right-sidebar .fl-cols-visual-col:last-child{-ms-flex-preferred-size:60px;flex-basis:60px}.fl-builder-block-saved-column.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-column:hover .fl-builder-block-title,.fl-builder-block-saved-module.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-module:hover .fl-builder-block-title,.fl-builder-block-saved-row.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-row:hover .fl-builder-block-title{margin-right:70px}.fl-builder-block-module:nth-child(even):hover .fl-builder-block-content{left:auto;right:0}.fl-builder-block-thumbnail{border-radius:4px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:rgba(0,0,0,.06);margin-bottom:10px;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder-block:hover .fl-builder-block-thumbnail{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder-block .fl-builder-block-icon{margin-right:7px;fill:#000;display:inline-block;width:20px;height:20px;vertical-align:middle}.fl-builder-block-thumbnail:before{content:"";display:block;padding-top:50%}.fl-builder-block-thumbnail img{max-width:100%;max-height:160px;margin:0;-o-object-fit:cover;object-fit:cover}.fl-builder-blocks-section-content .fl-builder-block{box-shadow:0 0 0 transparent;transition-property:box-shadow;transition-duration:.15s}.fl-builder-blocks-section-content .fl-builder-block i,.fl-user-template-actions i{color:#000;margin-right:10px}.fl-builder-blocks-separator{background:#f1f1f1;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder--panel-message{text-align:center;padding:40px 20px;font-size:16px}.fl-builder--panel-message .fl-builder-button{display:inline-block;padding:10px}.fl-builder--panel-cta{padding:20px 30px;font-size:16px;text-align:center}.fl-builder--panel-cta a{color:inherit;text-decoration:none}.fl-builder--panel-cta a:hover{text-decoration:none}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%;border:1px solid #dfdfdf}.fl-builder-block .fl-builder-block-title{overflow:hidden;text-overflow:ellipsis;vertical-align:middle;line-height:1.3}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}@keyframes fl-builder-template-item-enter{from{transform:translateY(100px) scale(.3);opacity:0}to{transform:scale(1);opacity:1}}.fl-builder--template-collection{clear:both;padding:10px 0}.fl-builder--template-collection-section-content{padding:0 10px}.fl-builder--template-collection-item{box-sizing:border-box;width:50%;float:left;padding:10px;cursor:pointer;font-size:13px;transform-origin:center;opacity:1}.fl-builder--template-thumbnail{background-size:cover;background-clip:content-box;background-position:center top;background-color:#fff;border:2px solid transparent;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder--template-collection-item[data-id="0"] .fl-builder--template-thumbnail,.fl-user-template .fl-builder--template-thumbnail{border-color:#e4e7ea}.fl-builder--template-thumbnail:before{display:block;content:"";padding-top:120%}.fl-builder--template-thumbnail:hover{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder--template-name{text-align:center;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fl-builder--template-collection-section{padding-bottom:10px;border-bottom:1px solid #dfdfdf}.fl-builder--template-collection-section:last-child{border-bottom:none}.fl-builder--template-collection-section:after,.fl-builder--template-collection-section:before{content:"";display:block;clear:both}.fl-builder--template-collection-section-name{padding:15px 10px 10px}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px;text-align:center}span.fl-builder-block-no-node-templates:hover{cursor:default}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{display:inline;cursor:pointer;margin:0;padding:15px 10px;text-align:center;width:30px}.fl-builder-block-details .fl-builder-node-template-delete,.fl-builder-block-details .fl-builder-node-template-edit{padding-top:0!important}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#444}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder--tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:center;align-items:center}.fl-builder-panel .fl-builder--panel-header{cursor:move}.fl-builder-panel .fl-builder--tabs{-ms-flex-pack:distribute;justify-content:space-around;padding:4px 24px;cursor:pointer}.fl-builder--tab-wrap{-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;margin:auto;max-width:400px}.fl-builder--tabs button,.fl-builder--tabs button:active,.fl-builder--tabs button:focus,.fl-builder--tabs button:hover{-ms-flex:1 1 100%;flex:1 1 100%;display:inline-block;text-decoration:none;text-transform:none;color:inherit;text-align:center;letter-spacing:normal!important;margin:0;padding:5px;cursor:pointer;font-size:13px!important;font-weight:500!important;line-height:1.3!important;background:0 0!important;outline:0!important;border:2px solid transparent;border-radius:4px;min-height:36px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;top:0;transition-property:background,color;transition-duration:.25s}.fl-builder--tabs button:focus{background:#e6eaed!important}.fl-builder--tabs button.is-showing{color:#0086b0}.fl-builder--panel-content{-ms-flex:1;flex:1}.fl-builder--panel-view{display:none;overflow:hidden}.fl-builder--panel-view.is-showing{display:block}.fl-builder--content-library-panel.ui-draggable-dragging{height:500px!important}.fl-builder--content-library-panel .fl-builder-drop-zone{display:none!important}.fl-builder--panel-header .fl-builder--tabs{cursor:move}.fl-builder--category-select{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.fl-builder--selector-display{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:justify;justify-content:space-between;color:#161B20;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;cursor:pointer;font-size:13px;font-weight:700;line-height:16px;border-radius:4px;-ms-flex-align:stretch;align-items:stretch}.fl-builder--selector-display-label{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;font-size:inherit;line-height:inherit;width:100%;margin:0!important;padding:0!important;color:#6D6D6D;background:0 0;border:2px solid transparent;box-shadow:0 1px 2px 0 rgba(0,0,0,.12)!important;border-radius:4px;font-family:inherit;text-transform:none}.fl-builder--selector-display-label:hover{top:0;color:inherit;background:0 0;border:2px solid transparent;border-radius:4px}.fl-builder--selector-display-label:active{top:0;color:inherit;background:0 0;border:2px solid #e4e7ea;border-radius:4px}.fl-builder--selector-display-label:focus{top:0;color:inherit;background:0 0;border:2px solid #00A0D2;outline:0}.fl-builder--group-label{color:inherit;-ms-flex:0 0 0%;flex:0 0 0%;padding:4px 12px 4px 10px;background:#e7ebef;border-radius:3px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-builder--current-view-name{-ms-flex:1 1 100%;flex:1 1 100%;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;padding:8px 10px;text-align:left}.fl-builder--selector-menu{display:none;color:#293138;position:absolute;top:46px;left:0;width:100%;background:#fff;border-radius:4px;box-shadow:0 0 20px 2px rgba(0,0,0,.2);overflow:visible;z-index:2}.fl-builder--selector-menu:before{bottom:100%;right:8px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.fl-builder--category-select.is-showing .fl-builder--selector-menu{display:-ms-flexbox;display:flex;max-height:calc(100vh - 150px)}.fl-builder--category-select.is-showing .fl-builder--selector-menu .fl-builder--menu{margin:10px 0;-ms-flex:1 100%;flex:1 100%;overflow:auto}button.fl-builder-button.fl-builder-bar-title-caret{margin:4px}button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#e6eaed!important;border-color:transparent!important}.fl-builder--category-select.is-showing .fl-builder-bar-title-caret i{transform:rotate(180deg)}.fl-builder--menu{margin-bottom:2px}.fl-builder--menu>a,.fl-builder--menu>button,.fl-builder--menu>span{display:block;padding:8px 10px 10px;border-radius:4px;color:inherit;text-decoration:none;background:0 0!important;border:2px solid transparent!important;font-weight:400;font-family:inherit}.fl-builder--menu>a:active,.fl-builder--menu>a:focus,.fl-builder--menu>a:hover,.fl-builder--menu>button:active,.fl-builder--menu>button:focus,.fl-builder--menu>button:hover{background:#e6eaed!important;border:2px solid transparent!important;top:0}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging,.fl-builder-drop-zone,.fl-builder-empty{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder--menu>a:focus,.fl-builder--menu>button:focus{outline:0;color:inherit;text-decoration:none}.fl-builder--menu .fl-has-children>svg{float:right;margin:0 7px 0 0;height:16px;width:9px;transition-property:transform;transition-duration:.15s;transform:rotate(-90deg)}.fl-builder--menu .fl-has-children.fl-has-children-showing>svg{transform:rotate(0)}.fl-builder--menu .fl-inset{display:none;padding-left:35px;font-size:14px;line-height:1.25}.fl-builder--menu a.fl-template-collection{color:#161B20}.fl-builder--menu>:after{clear:both}.fl-builder--menu * .fl-builder--menu-item-accessory{float:right;color:#000;text-transform:uppercase;text-align:center;min-width:20px;letter-spacing:2px}.fl-builder--menu * .fl-builder--menu-item-accessory i{font-size:1em;margin-top:2px}.fl-builder--menu .fl-builder-video-wrap iframe{display:block;margin:4px 0;width:100%}.fl-builder-publish-actions{display:-ms-flexbox;display:flex;box-sizing:border-box;position:absolute;top:0;right:0;width:380px;max-width:100%;height:44px;padding:4px 4px 4px 0;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;opacity:1;pointer-events:auto;transform:scaleX(1) translateX(0);transform-origin:right;transition-property:transform,opacity;transition-duration:.15s}.fl-builder-publish-actions.is-hidden{transform:scaleX(.23) translateX(68px);opacity:0;pointer-events:none}.fl-builder-bar .fl-builder-button-group{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%}.fl-builder-bar .fl-builder-button-group>.fl-builder-button{border-radius:0;margin-left:0;-ms-flex-preferred-size:100%;flex-basis:100%;text-align:center;-ms-flex-pack:distribute;justify-content:space-around;box-shadow:none}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-builder-publish-actions-click-away-mask{display:none;position:fixed;top:0;left:0;right:0;height:100vh;background:0 0}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{display:none;border:2px dashed #969696;border-radius:8px;color:#909090;font-size:20px;font-weight:700;margin:10px;padding:250px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-drop-zone,.fl-builder-has-submenu>ul.fl-builder-submenu li a{font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-edit .fl-builder-empty{display:block}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.95)!important;border:2px solid #000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#333!important;font-size:13px!important;height:47px!important;line-height:40px!important;overflow:hidden;padding:0 20px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:180px!important;z-index:100010!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start}.fl-builder-block.fl-builder-block-drag-helper:hover{padding:0;box-shadow:none}.fl-builder-block-drag-helper:hover .fl-builder-block-content{position:static;padding:0 20px}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-block-saved-column.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-module.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-row.fl-builder-block-drag-helper:hover .fl-builder-block-content{padding:14px 20px}.fl-builder-block-drag-helper .fl-builder-block-icon{fill:#000;margin-top:-10px}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 2s infinite;background:#00A2D7;border-radius:4px;color:#fff!important;display:block;font-size:12px;letter-spacing:1px;line-height:14px;margin:10px;padding:6px 8px 5px;position:relative;text-align:left;text-shadow:none;text-transform:none;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#00A2D7}50%{background-color:#79DEFF}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 2s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:2px dashed rgba(203,205,206,.5);padding:8px;border-radius:6px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#00a0d2!important;border-radius:4px;min-height:100px;overflow-x:hidden;border-width:2px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(0,160,210,.05);border:2px solid #00A0D2;border-radius:4px;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-node-global .fl-col-highlight-guide{border-color:#ff9600!important;background-color:rgba(255,150,0,.06)!important}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-col-group:focus,.fl-col:focus,.fl-module:focus,.fl-row:focus{outline:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none;-webkit-touch-callout:none;transition-property:border-color;transition-duration:.3s}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#00A0D2;float:left;height:30px;margin:-1px -1px 0;padding:0 4px;text-shadow:none;border-bottom-right-radius:5px;border-top-left-radius:3px;transition-property:background-color;transition-duration:.3s}.fl-row-overlay-header-bottom .fl-block-overlay-actions{border-radius:0 5px 0 3px}.fl-builder-col-resizing .fl-block-overlay-actions,.fl-builder-row-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:16px!important;height:28px!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:32px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-has-rules{color:#00A0D2!important;cursor:pointer;padding:7px;position:absolute;right:0;top:0}.fl-block-overlay-title,.fl-builder-has-submenu>ul.fl-builder-submenu li a{color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-block-overlay-title{float:left;font-size:14px;height:30px;line-height:29px;margin-right:2px;padding:0 12px 0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(190,239,255,0);color:#fff}.fl-row-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-33px;right:0;z-index:100006}.fl-row-overlay.fl-row-menu-active,.fl-row-overlay.fl-row-menu-active.fl-block-overlay.fl-block-overlay-global{z-index:100007}.fl-row-full-width .fl-row-overlay{left:2px;right:2px;bottom:2px}.fl-row-overlay-header-bottom{bottom:-32px!important;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-builder-row-resizing .fl-col.fl-block-overlay-active,.fl-builder-row-resizing .fl-module.fl-block-overlay-active{position:static}.fl-col-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100008}.fl-module-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-col-bg-overlay .fl-block-overlay-active.fl-module{z-index:100008}.fl-block-overlay-global{background:rgba(255,150,0,0);border:2px solid #F7A407;border-radius:4px}.fl-block-overlay-global .fl-block-overlay-actions{background:#F7A407}.fl-block-overlay-title-global{background:#fff;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:default;z-index:100006}.fl-block-overlay-global.fl-row-overlay .fl-block-col-resize{display:none}.fl-block-overlay-muted .fl-row-overlay{background:rgba(85,93,102,0);border:2px solid #555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-has-rules{color:#555D66!important}.fl-block-overlay-muted .fl-row-overlay .fl-block-col-resize{display:none}.fl-node-disabled .fl-row-content-wrap,.fl-node-disabled>.fl-col-content{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-2px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-7px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:2px solid #00A0D2;border-radius:50%;height:12px;width:12px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#00A0D2;box-shadow:0 0 20px rgba(0,0,0,.2);border-radius:0 4px 4px;display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:165px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-has-submenu.fl-builder-submenu-open>ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;display:block;line-height:13px;font-size:13px;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#0197C6;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message{color:#333!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa,.fl-builder-has-submenu .fl-builder-submenu .far,.fl-builder-has-submenu .fl-builder-submenu .fas{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows-alt{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows-alt{display:block!important;float:right;line-height:12px!important;height:12px!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{display:block;width:300px;border-radius:4px}.fl-builder-actions-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-actions-lightbox .fl-builder-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:7px;min-height:36px}.fl-builder-alert-lightbox{padding:20px;z-index:30000000;top:0;pointer-events:auto}.fl-builder-alert-lightbox .fl-lightbox{max-width:440px;width:auto}.fl-lightbox-width-slim .fl-compound-field,.fl-lightbox-width-slim .fl-dimension-field-units{max-width:none}.fl-builder-alert-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-alert-lightbox .fl-lightbox-message{line-height:24px;padding:30px}@keyframes fl-builder-content-section-entry{from{transform:translateY(150px) translateX(100px) scale(.3);opacity:0}to{transform:translateY(0) translateX(0) scale(1);opacity:1}}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-bottom:1px solid #dfdfdf;padding:10px 0 20px}.fl-builder--user-templates-section-content{border-bottom:2px solid #e6eaed;padding:10px}.fl-builder--user-templates-section-content:first-child{padding-top:0}.fl-builder--user-templates-section-content:last-child,.fl-user-templates:last-child{border-bottom:none}.fl-builder--user-templates-section-name{font-weight:700;font-size:16px;color:#333;z-index:9999;padding:15px 10px;margin:0 10px}@keyframes fl-list-item-entry{from{opacity:0;transform:scale(.5) translateY(100px)}to{opacity:1;transform:scale(1) translateY(0)}}.fl-builder--save-new-user-template,.fl-user-template{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:16px;font-weight:200;line-height:1.1;padding:10px 20px;color:#6d6d6d}.fl-user-template:hover{cursor:pointer;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.08);text-decoration:none;color:#111;padding-right:68px}.fl-user-template-name{overflow:hidden;text-overflow:ellipsis;-ms-flex:1;flex:1}.fl-user-template-actions{display:none;bottom:0;position:absolute;right:0;top:0}.fl-user-template:hover .fl-user-template-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-user-template-actions a{display:inline-block;padding:15px 0;width:30px}.fl-user-template:hover a:hover i{color:#444!important}.fl-user-templates-message{display:none}.fl-user-template-thumbnail{-ms-flex:0;flex:0;margin-right:20px}.fl-user-template-thumbnail .fl-builder--template-thumbnail{background-size:cover;background-position:center top;width:45px}.fl-user-template-thumbnail .fl-builder--template-thumbnail:hover{box-shadow:none;transform:scale(1);transition-property:none}.fl-builder--save-new-user-template .fl-user-template-thumbnail .fl-builder--template-thumbnail{border-style:dashed;border-width:2px;border-color:#ccd4da}.fl-builder--save-new-user-template .fl-save-control{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1}.fl-builder--save-new-user-template .fl-save-control input{background:0 0;border:none!important;-ms-flex:1;flex:1;font-size:16px;margin-right:10px;margin-left:-12px;color:#000}.fl-builder--save-new-user-template .fl-save-control input::-webkit-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input::-moz-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-ms-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-moz-placeholder{color:#777}@keyframes fl-slide-in-right{from{transform:translateX(50px)}to{transform:translateX(0)}}.fl-builder--save-new-user-template .fl-save-control button{display:none;animation-name:fl-slide-in-right;animation-duration:.25s;background-color:#00a0d2;border:none;padding:0 15px}.fl-save-control-mask{display:none;background:0 0;position:absolute;top:-50px;left:0;bottom:0;right:0;z-index:-1;min-height:80vh}.fl-builder-templates-cta{margin-bottom:20px}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.single-fl-builder-template .fl-content{width:100%!important}form.fl-builder-settings{height:100%;margin:0;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-2px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}@keyframes fl-grab-attention{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.fl-lightbox-width-slim .fl-form-table{margin:10px 12px 10px 10px!important;width:calc(100% - 40px)}.fl-lightbox-width-slim .fl-form-table th{display:block;position:relative;padding:10px 0 0 12px!important;width:auto!important}.fl-lightbox-width-slim .fl-form-table td{display:block}.fl-lightbox-width-slim .fl-form-table .fl-field[data-type=editor] td:first-child,.fl-lightbox-width-slim .fl-form-table td:first-child{padding-left:0!important}.fl-field-label .fl-field-responsive-toggle,.fl-lightbox-width-slim .fl-field-control-wrapper .fl-field-responsive-toggle{display:none}.fl-lightbox-width-slim .fl-field-label .fl-field-responsive-toggle{display:inline-block;padding:0 5px!important}.fl-lightbox-width-slim input.text-full+.fl-field-description,.fl-lightbox-width-slim select+.fl-field-description{display:block;padding:8px 10px;margin:0}.fl-lightbox-width-slim .fl-builder-settings-fields select{width:100%}.fl-lightbox-width-slim .fl-color-picker{display:-ms-flexbox;display:flex;width:auto}.fl-lightbox-width-slim .fl-color-picker-clear{-ms-flex:0 0 40px;flex:0 0 40px}.fl-lightbox-width-slim .fl-field[data-type=dimension] .fl-field-responsive-setting{width:100%}.fl-lightbox-width-slim .fl-dimension-field-unit-select select{width:auto!important}.fl-lightbox-width-slim .fl-gradient-picker-color-row{width:50%}.fl-lightbox-width-slim .fl-color-picker.fl-gradient-picker-color,.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-option{width:100%}.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-options{float:none}.fl-lightbox-width-slim .mce-menubtn.mce-fixed-width button{width:72px!important}.fl-lightbox-width-slim .fl-builder-settings-tab-description{margin:20px 10px}.fl-lightbox-width-micro .mce-menubtn.mce-fixed-width button{width:38px!important}.fl-lightbox-width-micro .mce-btn[aria-label=Fullscreen],.fl-lightbox-width-micro .mce-btn[aria-label=Blockquote]{display:none}.fl-lightbox-width-micro .mce-toolbar i.mce-ico{width:18px}.fl-lightbox-width-slim .fl-field[data-type=editor] .fl-field-control-wrapper,.fl-lightbox-width-slim .fl-field[data-type=code] .fl-field-control-wrapper{margin-left:-10px;margin-right:-30px}.fl-lightbox .wp-editor-tools{padding-left:6px;padding-right:28px}.fl-lightbox .mce-top-part::before{box-shadow:none!important}.fl-lightbox div.mce-toolbar-grp{background:0 0;border:none}.fl-lightbox div.mce-toolbar-grp>div{padding:0 3px}.fl-lightbox .fl-builder-settings .wp-switch-editor{background:#e7ebef;border:1px solid transparent}.fl-lightbox .html-active .switch-html,.fl-lightbox .quicktags-toolbar,.fl-lightbox .tmce-active .switch-tmce{background:#fff}.fl-lightbox .quicktags-toolbar,.fl-lightbox .wp-editor-container{border:none}.fl-lightbox .mce-toolbar .mce-container-body{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-lightbox-width-slim .mce-toolbar .mce-container-body{-ms-flex-pack:center;justify-content:center}.fl-lightbox textarea.wp-editor-area{line-height:1.5;padding:20px;width:calc(100% - 10px)}.fl-lightbox .wp-core-ui .button,.fl-lightbox .wp-core-ui .button-secondary{border:none;box-shadow:none;background:#e7ebef}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units{width:auto}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units input{max-width:none;width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-control,.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-label{width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-form-field-preview-text{max-width:225px}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-builder-field-actions{position:absolute!important;top:0;right:0;width:70px;z-index:1}.fl-lightbox-width-slim .fl-builder-field-actions-single .fl-builder-field-copy{float:right!important;margin-right:5px}.fl-lightbox-width-slim .fl-field[data-type=time] select{width:auto}.fl-builder-settings-tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;height:32px;background:#e7ebef}.fl-builder-content-group-select{padding:0 10px 6px;display:none}.fl-builder-content-group-select select{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;padding:8px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;border:2px solid #e4e7ea;color:#161B20}select:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;outline:0!important}.fl-legacy-settings-tab{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings-tab:first-child .fl-legacy-settings-tab{background:0 0;height:auto}body .fl-builder-settings-tabs>*{box-sizing:border-box;color:#676F7A!important;fill:#676F7A!important;background:0 0;border:2px solid transparent;border-radius:0;margin:0;outline:0;padding:1px 16px;text-decoration:none!important;font-size:13px;font-weight:400!important;-ms-flex:0 0 auto;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}body .fl-lightbox-width-slim .fl-builder-settings-tabs>*{-ms-flex:1 1 auto;flex:1 1 auto}body .fl-builder-settings-tabs>.fl-builder-settings-tabs-more{-ms-flex:0 0 60px;flex:0 0 60px;display:none;margin-left:auto;-ms-flex-pack:center;justify-content:center}.fl-builder-settings-tabs-more svg{width:16px;height:auto;margin:auto}.fl-builder-settings-tabs-more g,.fl-builder-settings-tabs-more path,.fl-builder-settings-tabs-more svg{fill:inherit}body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more{display:-ms-flexbox;display:flex}.fl-builder-settings-tabs>:active,.fl-builder-settings-tabs>:hover{top:0;color:#333;background:0 0;border:2px solid transparent}.fl-builder-settings-tabs>:focus{top:0;outline:0;border:2px solid transparent;background:0 0;color:#0086b0;fill:#0086b0}.fl-builder-settings-tabs .fl-active,.fl-builder-settings-tabs-more.fl-contains-active,.fl-builder-settings-tabs-overflow-menu .fl-active{color:#0086b0!important;fill:#0086b0!important;position:relative;background:#fff}.fl-builder-settings-tabs .fl-active.fl-overflowed,.fl-builder-settings-tabs .fl-overflowed{display:none!important}.fl-builder-settings-tabs .error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs .error .fl-error-icon,.fl-builder-settings-tabs-overflow-menu .error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tabs-more.fl-contains-errors{fill:#d03436!important}.fl-builder-settings-tab{display:none;width:auto!important}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#e4e7ea;padding:10px 15px;border-radius:4px;margin:20px}.fl-builder-settings-tab-description a{text-decoration:underline!important}.fl-builder-settings-tab-description a:hover{color:#333}.fl-builder-settings-tabs-overflow-menu{display:none;position:absolute;left:0;right:0;border:2px solid #e6eaed;border-top:3px solid #00a0d2;border-radius:4px;background:#fff;z-index:9999;margin:0 6px;padding:10px;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 20px 2px rgba(0,0,0,.2)}.fl-builder-settings-tabs-overflow-menu:before{bottom:100%;right:20px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:10px;margin-left:-10px}.fl-builder-settings-tabs-overflow-menu>a{display:block;padding:10px 15px;font-size:14px;font-weight:600!important;border:2px solid transparent;border-radius:4px;outline:0}.fl-builder-settings-tabs-overflow-menu>a:hover{background:#e6eaed;text-decoration:none}.fl-builder-settings-tabs-overflow-click-mask{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:0 0;z-index:11}.fl-form-table{background:none;border:none;width:calc(100% - 35px)}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table td,.fl-form-table th{background:0 0!important;border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table th{padding:10px 15px 10px 30px!important;vertical-align:top!important;width:200px!important}.fl-form-table td:first-child{padding-left:30px!important}.fl-form-table th label{color:#333;width:auto;max-width:100%}.fl-form-table th label i{color:grey}.fl-form-table th label i:hover{color:#555}.fl-form-table td{padding:8px 10px}.fl-lightbox-width-slim .fl-form-table td{padding:4px 0 5px}.fl-builder-settings-fields{margin:0;overflow:hidden;position:relative;-ms-flex:1 100%;flex:1 100%;visibility:hidden}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:4px 0 0}.fl-builder-settings-fields .fl-field-control-wrapper{position:relative}.fl-field{animation-duration:.25s;animation-delay:.1s}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:transparent!important;border-style:solid;border-width:2px;border-radius:4px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);color:#333!important;display:inline;font-size:13px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px 6px;width:auto;box-sizing:border-box}i.fl-dimension-field-link,i.fl-field-responsive-toggle{line-height:18px!important;cursor:pointer;vertical-align:middle}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select:not(multiple){height:36px!important}.fl-builder-settings-fields select,.fl-builder-settings-fields select[multiple]{height:auto!important}.fl-builder-settings-fields input[type=number]{width:70px}.fl-builder-lightbox .fl-builder-settings-fields input[type=date]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=email]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=file]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=number]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=password]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=search]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=text]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=url]:focus,.fl-builder-lightbox .fl-builder-settings-fields select:focus,.fl-builder-lightbox .fl-builder-settings-fields textarea:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)!important}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields label{display:inline-block;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:3px;font-size:12px}.fl-builder-settings-fields select{-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;color:#000;margin:0 0 2px;padding:2px 10px;padding-right:30px!important;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important}.fl-dimension-field-unit input[type=number],.fl-unit-field-inputs input[type=number]{-moz-appearance:textfield}.fl-builder-settings-fields select[multiple]{height:60px;background-image:none!important}.fl-builder-custom-field select,.fl-photo-field select{box-shadow:none;border-color:#e6eaed!important}.fl-builder-settings-section:first-child{border-top:none!important}.fl-builder-settings-section-header{background-color:#e7ebef;border-top:4px solid #e7ebef;cursor:pointer;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:20px 0}.fl-builder-settings-fields .fl-builder-settings-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background:#F5F7F9;color:#353535;padding:2px 10px;margin:0;font-size:13px!important;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:2px solid transparent;border-radius:0}.fl-builder-settings-fields .fl-builder-settings-title:active,.fl-builder-settings-fields .fl-builder-settings-title:hover{top:0}.fl-builder-settings-fields .fl-builder-settings-title:focus{top:0;border-color:#e0e4ea}.fl-builder-settings-fields .fl-builder-settings-title>svg{height:6px;width:9px;margin-right:7px;transition-property:transform;transition-duration:.15s}.fl-builder-settings-section-collapsed{margin-bottom:4px}.fl-builder-settings-section-collapsed .fl-builder-settings-section-content{display:none}.fl-builder-settings-section-collapsed .fl-builder-settings-title{background:0 0;-ms-flex:1 1 100%;flex:1 1 100%}.fl-builder-settings-section-collapsed .fl-builder-settings-title>svg{transform:rotate(-90deg)}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6,.wp-core-ui p{color:#333;font-family:inherit}.wp-core-ui #media-attachment-date-filters{width:275px}.wp-core-ui input[type=search]::-webkit-input-placeholder{color:#333}.wp-core-ui input[type=search]:-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::placeholder{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400}.wp-core-ui input[type=date],.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=date]:focus,.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block;width:100%}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}.fl-field-control-wrapper i.fl-field-responsive-toggle{padding:9px 0 0;position:absolute;left:-25px}i.fl-field-responsive-toggle{color:grey;display:inline-block;font-size:15px!important;height:auto;text-align:left;width:20px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:100%}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields .fl-text-field-add-value{min-width:50%;margin-top:.62em}.fl-field[data-type=shadow] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-shadow-field .fl-color-picker{margin-bottom:15px;width:100%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear{box-sizing:border-box}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-gradient-picker-type{display:-ms-flexbox;display:flex;margin-bottom:15px}.fl-gradient-picker-type input{margin:0!important}.fl-gradient-picker-type select{margin-bottom:0!important}.fl-gradient-picker-type-select{margin-right:10px!important}.fl-gradient-picker-colors{display:-ms-flexbox;display:flex}.fl-gradient-picker-color-row{display:-ms-flexbox;display:flex;margin-right:15px}.fl-color-picker.fl-gradient-picker-color,.fl-gradient-picker-color-row:last-child{margin-right:0}.fl-color-picker.fl-gradient-picker-color .fl-color-picker-color{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-gradient-picker .fl-gradient-picker-stop input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;margin:0!important}.fl-field[data-type=dimension] .fl-field-label label{padding-right:35px}.fl-field[data-type=dimension] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=dimension] .fl-field-description{padding:9px 0 0 5px}.fl-field[data-type=dimension] .fl-field-responsive-setting{width:auto}.fl-dimension-field-units{border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;height:36px;margin:1px 1px 20px;position:relative;max-width:350px}.fl-dimension-field-units>*{border-right:1px solid #e6eaed;width:100%}body .fl-dimension-field-units>:last-child{border-right:none!important}body .fl-dimension-field-units>:first-child>input[type]{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}body .fl-dimension-field-units>:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-dimension-field-unit input[type],.fl-dimension-field-units .fl-field-unit-select{box-shadow:none!important;margin:0!important;border-radius:0!important}.fl-dimension-field-unit input{width:100%!important}.fl-dimension-field-unit input::-webkit-inner-spin-button,.fl-dimension-field-unit input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-dimension-field-unit label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-dimension-field-unit .fl-field-popup-slider{margin-top:27px}i.fl-dimension-field-link{color:grey;font-size:15px!important;height:auto;text-align:left;width:20px}i.fl-dimension-field-link:hover{color:#000}i.fl-dimension-field-link.dashicons-editor-unlink,i.fl-dimension-field-link.dashicons-editor-unlink:hover{color:#0086b0}.fl-field-label .fl-dimension-field-link,.fl-lightbox-width-slim .fl-dimension-field-link{display:none}.fl-lightbox-width-slim .fl-field-label .fl-dimension-field-link{display:inline-block}.fl-field-control-wrapper .fl-dimension-field-link{padding:9px 0 0;left:-50px;position:absolute}.fl-dimension-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}.fl-field[data-type=unit] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=unit] .fl-field-description{margin-left:7px!important;padding-top:9px}.fl-field[data-type=unit] .fl-field-responsive-setting{width:auto}.fl-unit-field-inputs{background:0 0;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex}.fl-unit-field-inputs .fl-field-unit-select,.fl-unit-field-inputs input[type]{box-shadow:none!important;margin:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-unit-field-inputs .fl-field-unit-select{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.fl-unit-field-inputs input::-webkit-inner-spin-button,.fl-unit-field-inputs input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-unit-field-input{border-right:1px solid #e6eaed!important}body .fl-unit-field-input:last-child{border-right:none!important}body .fl-unit-field-input:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-unit-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}select.fl-field-unit-select{background-color:#E7EBEF!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}div.fl-field-unit-select{background-color:#E7EBEF!important;padding:9px 7px!important;width:100%}.fl-field-popup-slider{background:#fff;border-radius:4px;box-shadow:0 4px 25px 0 rgba(0,0,0,.18);display:none;margin-top:10px;padding:15px;position:absolute;left:0;right:0;z-index:9999}.fl-field-popup-slider-top{margin-top:0!important;top:-100%;transform:translateY(-10px)}.fl-field-popup-slider-input{background:#E7EBEF;cursor:pointer;height:4px;text-align:left;position:relative;border-radius:3px}.fl-field-popup-slider-input .ui-slider-handle{background:#fff;border:2px solid #3AA4CC;border-radius:100%;cursor:pointer;height:12px;width:12px;position:absolute;top:-6px;margin-left:-7px}.fl-field-popup-slider-input .ui-slider-handle:focus{outline:0}.fl-field-popup-slider-arrow{position:absolute;top:-22px}.fl-field-popup-slider-arrow:after{content:' ';border-color:transparent transparent #fff;border-style:solid;border-width:0 8px 8px;width:0;height:0}.fl-field-popup-slider-top .fl-field-popup-slider-arrow{top:auto;bottom:-24px}.fl-field-popup-slider-top .fl-field-popup-slider-arrow:after{border-bottom-width:0;border-top-width:8px;border-top-color:#fff}input[type=number].fl-field-popup-slider-focus{border:2px solid #00a0d2!important}.fl-font-field{display:-ms-flexbox;display:flex}.fl-font-field label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-font-field .fl-font-field-font-wrapper{margin-right:8px;width:70%!important}.fl-font-field .fl-font-field-weight-wrapper{width:30%!important}.fl-compound-field{max-width:350px}.fl-compound-field-section-toggle{background:#E7EAEF;border-radius:4px;border-top:2px solid transparent;border-bottom:2px solid transparent;cursor:pointer;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:32px;margin-bottom:8px;padding:0 12px}.fl-compound-field-section-toggle:hover{background:#dadfe5}.fl-compound-field-section-toggle .dashicons{font-size:15px;height:15px;margin-right:5px;width:15px}.fl-compound-field-section:last-child .fl-compound-field-section-toggle{margin-bottom:0}.fl-compound-field-section.fl-compound-field-section-visible{padding-bottom:12px}.fl-compound-field-section.fl-compound-field-section-visible:last-child{padding-bottom:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle{background:0 0;border-top:2px solid #E7EBEF;border-radius:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle:hover{background:0 0}.fl-compound-field-section-visible .fl-compound-field-section-toggle .dashicons:before{content:'\f347'}.fl-compound-field-row{display:none;padding-bottom:12px}.fl-compound-field-section-visible .fl-compound-field-row{display:-ms-flexbox;display:flex}.fl-compound-field-label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-compound-field-label-bottom{padding:6px 0 0 12px}.fl-compound-field-label .fl-dimension-field-link{display:inline-block;padding:0 0 0 2px;position:relative;left:auto;top:-1px}.fl-compound-field-setting{padding-right:8px;width:100%}.fl-compound-field-setting:last-child{padding-right:0}.fl-compound-field-setting select{margin:0!important;width:100%}.fl-compound-field-setting .fl-unit-field-input input{width:100%!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-compound-field-setting .fl-unit-field-input{width:50%!important}.fl-compound-field-setting .fl-unit-field-input select.fl-field-unit-select{background-position:center right 2px!important;padding:2px 5px!important;width:100%;font-size:11px}.fl-typography-field .fl-font-field-font-wrapper{margin-right:8px!important}.fl-typography-field-spacing{width:calc(33.33% - 8px)}.fl-typography-field-transform{width:66.66%}.fl-typography-field-transform .fl-button-group-field-options{float:none}.fl-typography-field-transform .fl-button-group-field-option{width:100%;padding:0 7px}.fl-typography-field .fl-shadow-field{display:-ms-flexbox;display:flex}.fl-typography-field .fl-shadow-field .fl-color-picker{margin:0 8px 0 0;width:calc(33.33% - 8px)}.fl-typography-field .fl-shadow-field .fl-dimension-field-units{margin-left:0;margin-top:0;margin-right:0;width:66.66%}.fl-button-group-field-options{background:#E7EBEF;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;float:left;height:36px;overflow:hidden}.fl-button-group-field-option{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:0 5px;border-radius:0;border:2px solid transparent;background:0 0}.fl-button-group-field-option:hover{top:0;background-color:transparent;color:#000;border:2px solid transparent}.fl-button-group-field-option:focus{top:0;background-color:transparent;border:2px solid #00a0d2;color:#333}.fl-button-group-field-option:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-button-group-field-option:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-button-group-field-option[data-selected="1"]{background-color:#fff;color:#000}.fl-button-group-field-option i{color:#6B6E75}.fl-button-group-field-option:hover i{color:#333}.fl-compound-field-cell{width:50%;display:block;float:left;padding-top:13px}.fl-compound-field-cell:first-child{padding-right:4px}.fl-compound-field-cell:last-child{padding-left:4px}.fl-compound-field-cell label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-shape-transform-field .fl-compound-field-row{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-compound-field-row>*{width:auto;-ms-flex:1 1 auto;flex:1 1 auto}.fl-shape-transform-field .fl-compound-field-row>:first-child{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-shape-orientation-controls>*{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>*,.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>* button{border-radius:0}.fl-shape-orientation-controls .fl-button-group-field:first-child>*,.fl-shape-orientation-controls .fl-button-group-field:first-child>* button{border-top-left-radius:4px;border-bottom-left-radius:4px}.fl-shape-orientation-controls .fl-button-group-field:last-child>*,.fl-shape-orientation-controls .fl-button-group-field:last-child>* button{border-top-right-radius:4px;border-bottom-right-radius:4px}.fl-builder-custom-field{background:#fff;border:2px solid transparent;border-radius:4px;padding:7px 10px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);min-height:36px;box-sizing:border-box}.fl-builder-field-multiple .fl-builder-custom-field{cursor:move}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-preview{display:-ms-flexbox;display:flex}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:calc(100% - 10px)}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview select{display:none}.fl-photo-field .fl-photo-preview-filename{display:none;font-size:13px;font-weight:700;margin:5px 0 9px 11px}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview-filename{display:inline-block;word-break:break-all}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings,.fl-photo-field.fl-photo-no-attachment .fl-photo-edit{display:none}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal{z-index:9999991}.fl-builder-edit .media-modal-backdrop{z-index:999999}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden;backface-visibility:hidden}.fl-builder-edit .media-modal-content h1{font-family:inherit}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail{margin-bottom:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail img{max-width:none}.fl-builder-edit button.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}span.select2-container.select2-container--open{z-index:9999999}.fl-multiple-photos-field .fl-multiple-photos-add{margin:0 0 0 8px}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-img .dashicons.dashicons-media-video{display:block;font-size:60px;height:60px;line-height:60px;width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 5px 11px}.fl-video-field .fl-video-remove,.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-hidden-editor{display:none}.fl-builder-settings .wp-switch-editor{border-radius:0;color:#333;margin-top:2px}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.fl-builder-settings .mce-menubtn.mce-fixed-width span{width:100%}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.fl-code-field{border:1px solid #E6E6E6;border-left:none}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field .fl-link-field-input-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-link-field-input{width:auto!important;-ms-flex:1 1 100%;flex:1 1 100%}.fl-link-field .fl-link-field-input-wrap button{-ms-flex:0 0 0%;flex:0 0 0%;height:36px;margin:1px 1px 1px 5px}.fl-link-field-options-wrap{padding:7px 0 0 12px}.fl-link-field-options-wrap label{margin-right:7px}.fl-link-field-options-wrap span{font-size:11px;font-weight:700;color:inherit!important;text-align:center;opacity:.5}.fl-link-field-search{display:none;border:2px solid #e6eaed;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-link-field-search input{box-shadow:none!important;width:100%!important;padding:3px 9px!important}.fl-link-field-search #as-original-link-search{width:100%}.fl-field-connections-toggle{padding:10px 0}.fl-field[data-type=editor] .fl-field-connections-toggle,.fl-field[data-type=code] .fl-field-connections-toggle{-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connections-toggle{height:24px;margin-top:1px;-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connection{bottom:25px}.fl-field-connections-menu[data-field=fl-field-text]{margin-top:30px}.fl-help-tooltip{display:inline-block;position:relative}.fl-lightbox-width-slim .fl-help-tooltip{position:static}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{box-sizing:border-box;background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000;border-radius:4px}.fl-lightbox-width-slim .fl-help-tooltip-text{top:30px;left:0;width:100%}.fl-field-control .fl-form-field{margin-bottom:0}.fl-form-field[data-preview-text=icon]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-form-field-preview-text i{display:inline-block;font-size:18px;line-height:22px;margin-right:10px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;line-height:29px!important;width:16px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single .fl-builder-field-delete,.fl-builder-field-actions-single .fl-builder-field-move{display:none!important}.fl-builder-field-multiple .fl-builder-field-actions,.fl-builder-field-multiple .fl-field-control,.fl-builder-field-multiple .fl-field-label{padding-top:2px!important;padding-bottom:2px!important}.fl-builder-field-multiple .fl-builder-field-actions{min-width:70px!important}.fl-builder-field-multiple[data-field=icons] .fl-builder-field-actions{width:70px!important}.fl-builder-field-multiple.ui-sortable-helper .fl-field-control{width:60%}.fl-builder-field-multiple.ui-sortable-helper .fl-builder-field-actions{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{color:#d03436!important}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#464646;font-style:normal;margin-left:2px}.fl-lightbox .fl-field-connection{right:-1px}.fl-lightbox .fl-field-connection-content{border:2px solid transparent!important;background:#e7ebef!important}.fl-field-connection-content .fl-field-connection-label{color:#676f7a!important}.fl-field-connections-toggle{pointer-events:none;width:20px;right:-25px}.has-scrollbar .fl-field-connections-toggle{right:-22px}.fl-field-connections-toggle-open{transform:none!important}.fl-field-connections-toggle i{pointer-events:auto;color:#abb1ba;font-size:13px!important;transition-property:transform;transition-duration:.15s}.fl-field-connections-toggle-open i{transform:rotate(-45deg)}ul.as-selections{background-color:#fff;border:none;border-radius:4px;box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.svg) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;font-size:11px;line-height:14px;padding:8px 15px;border-radius:4px;margin:2px}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0;box-shadow:none}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;box-shadow:0 0 10px rgba(0,0,0,.1);border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important;font-weight:700}.fl-custom-query-filter{display:none}.fl-custom-query .fl-field[data-type=suggest] select{margin-bottom:5px;width:100%}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}.fl-lightbox-width-slim .fl-builder-service-account-delete{display:block;padding-top:7px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-ordering-field-option{background:#fff;border:1px solid #dfdfdf;border-radius:3px;cursor:move;margin-bottom:5px;padding:5px 10px}.fl-ordering-field-option .fa{color:#ccc;float:right;line-height:16px}#tiptip_holder{z-index:1000000}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:#333}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:#333}#tiptip_holder.tip_right #tiptip_arrow_inner{border-right-color:#333}#tiptip_holder.tip_left #tiptip_arrow_inner{border-left-color:#333}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.popover-navigation button{min-height:36px}.fl-builder-shortcode-mask-wrap{position:relative}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-builder--search{border:2px solid transparent;position:relative;padding:0;width:54px;transition-property:width;transition-delay:.1s;transition-duration:.15s}.fl-builder--search.is-expanded{border:2px solid #00A0D0}.fl-builder--search input[type=text],.fl-builder--search input[type=text]:focus{background-color:transparent;border:none!important;box-sizing:border-box;width:100%;font-size:16px;text-align:center}.fl-builder--search:before{display:-ms-flexbox;display:flex;top:0;left:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;content:"\f002";font:normal normal normal 14px/1 Font Awesome\ 5 Free;text-align:center;width:100%;height:100%;position:absolute;pointer-events:none;color:rgba(128,128,128,.6);font-size:17px;opacity:1;transition-property:opacity;transition-duration:.15s}.fl-builder--main-menu-panel,.fl-builder-ui-keyboard-shortcuts{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}.fl-builder--search.has-text:before,.fl-builder--search.is-expanded:before{opacity:0}.fl-builder--search input::-webkit-input-placeholder{color:rgba(128,128,128,0)!important;transition:color .25s}.fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(128,128,128,.4)!important}.fl-builder--search .search-label{cursor:text}.fl-builder--search .search-clear{display:none;padding:10px 10px 10px 30px;color:#a7a7a7;font-size:12px;position:absolute;right:0;top:0;background-color:#eff1f2;background:linear-gradient(to left,#e4e7ea,#e4e7ea 75%,rgba(228,231,234,0))}.fl-builder--search.has-text .search-clear,.fl-builder--search.is-expanded input{display:inline-block}.fl-builder--search:hover .search-clear{color:#888;background-color:#eff1f2;background:linear-gradient(to left,#dadfe5,#dadfe5 75%,rgba(218,223,229,0))}.fl-builder--search.is-expanded{width:246px}@keyframes fl-builder-show-menu-item{from{transform:translateY(10px) scale(.8);opacity:0}to{transform:translateX(0) translateY(0) scale(1);opacity:1}}.fl-builder--main-menu-panel{display:none;box-sizing:border-box;position:fixed;top:calc(45px + 10px);left:10px;width:360px;color:#222;max-height:calc(100% - 66px);border-radius:4px;background:#fff;border:none;border-top:3px solid #00a0d2;box-shadow:0 11px 45px 8px rgba(0,0,0,.1);font-size:14px!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000009;pointer-events:auto}.fl-builder--main-menu-panel.is-showing{display:-ms-flexbox;display:flex}.fl-builder--main-menu-panel:before,.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items:before{bottom:100%;right:6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:13px;margin-left:-13px}.fl-builder--main-menu-panel-views{-ms-flex:1 1 100%;flex:1 1 100%;overflow:auto}.fl-builder--main-menu-panel-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000119}.fl-builder--main-menu-panel .fl-builder--tabs{padding-left:20px;padding-top:15px}.fl-builder--main-menu-panel-view{display:none}.fl-builder--main-menu-panel-view.is-showing{display:block}.fl-builder--main-menu-panel-view-title{font-size:24px;font-weight:600;padding:25px 22px 0;line-height:1;white-space:nowrap}.fl-builder--main-menu-panel-view-title .title-accessory{float:right;color:#b1b1b1}.fl-builder--main-menu-panel-view-title .title-accessory>i{font-size:20px!important;width:25px!important}.fl-builder--main-menu-panel-view-title .title-accessory>i:hover{color:#222}.fl-builder--main-menu-panel-view-title .pop-view{padding:10px;margin-left:-10px;opacity:.5;font-size:25px;font-weight:400;cursor:pointer;background:0 0;outline:0;border:none;color:inherit}.fl-builder--main-menu-panel-view-title .pop-view:focus{outline:0;top:0;background:#E5EAED!important}.fl-builder--menu-item:before{display:block;content:"";float:none;clear:both}.fl-builder--menu-item{color:inherit;text-align:left;box-sizing:border-box;display:block;padding:10px 15px;margin:0 10px;width:calc(100% - 20px);background:0 0;border:none;border-radius:4px;font-size:14px;line-height:1.1;cursor:pointer;opacity:1;text-transform:none}.fl-builder--menu-item:hover{background:#eaf1f8;border:none;text-decoration:none;color:#000}.fl-builder--selector-menu .fl-builder--menu-item:hover{background:#fff}.fl-builder--menu-item-accessory{float:right;text-align:center;display:inline-block;min-width:40px;font-size:14px}.fl-builder--menu-item-accessory.view-arrow{font-size:18px}.fl-builder--menu{padding:0;margin:20px 0}.fl-builder--menu hr{margin:8px 0;background:#e6eaed!important;height:1px;border:none}.fl-builder--menu .fl-builder-video-wrap{padding:0 10px 10px}.fl-revision-list-item{display:-ms-flexbox;display:flex}.fl-revision-list-item-text{padding-left:15px}.fl-revision-list-item-date{padding-bottom:5px}.fl-builder--revision-actions{display:none;position:fixed;top:4px;left:4px;z-index:100008;padding:4px 4px 6px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder--revision-actions *{margin-right:5px}.fl-builder--revision-actions :last-child{margin:0}.fl-builder--menu-item[data-event=noRevisionsMessage]:hover{background:0 0;box-shadow:none;cursor:default}.fl-no-revisions-message-title{font-weight:700;margin-bottom:10px}.fl-no-revisions-message-text{line-height:22px}.fl-builder-module-placeholder-message{border:1px dashed #ccc;overflow:hidden;padding:20px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fl-field-connections-menu{z-index:999999}.fl-field[data-type=editor] .fl-field-connections-toggle,.fl-field[data-type=code] .fl-field-connections-toggle{right:5px!important}.fl-field-connections-inline-toggle{display:inline;color:#9a9b9c;margin-left:6px}.fl-field-connections-inline-toggle i{transition-property:transform;transition-duration:.15s}.fl-field-connections-inline-toggle.fl-field-connections-toggle-open i{transform:rotate(45deg)}.fl-builder-add-ultimate-presets-button,.fl-builder-add-ultimate-rows-button,.fl-builder-pp-add-template-button,.pp-preview-button,.uabb-live-preview-button{display:none!important}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;background:0 0;transition-property:background;transition-duration:.15s}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{width:12px;height:12px}.ui-resizable-se{cursor:se-resize;right:-4px;bottom:-4px}.ui-resizable-sw{cursor:sw-resize;left:-4px;bottom:-4px}.ui-resizable-nw{cursor:nw-resize;left:-4px;top:-4px}.ui-resizable-ne{cursor:ne-resize;right:-4px;top:-4px}.fl-builder-resizable-iframe-fix{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100000000}.fl-builder-panel .ui-resizable-handle:active,.fl-builder-panel .ui-resizable-handle:hover,.fl-lightbox .ui-resizable-handle:active,.fl-lightbox .ui-resizable-handle:hover{background:#00a0d2}.fl-builder-panel .ui-resizable-n,.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-n,.fl-lightbox .ui-resizable-s{height:6px}.fl-builder-panel .ui-resizable-n,.fl-lightbox .ui-resizable-n{top:-3px}.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-s{bottom:-3px}.fl-builder-panel .ui-resizable-e,.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-e,.fl-lightbox .ui-resizable-w{width:6px}.fl-builder-panel .ui-resizable-e,.fl-lightbox .ui-resizable-e{right:-3px}.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-w{left:-3px}.fl-lightbox .ui-resizable-ne,.fl-lightbox .ui-resizable-nw,.fl-lightbox .ui-resizable-se,.fl-lightbox .ui-resizable-sw{background:0 0;border:6px solid transparent}.fl-lightbox .ui-resizable-ne:active,.fl-lightbox .ui-resizable-ne:hover,.fl-lightbox .ui-resizable-nw:active,.fl-lightbox .ui-resizable-nw:hover,.fl-lightbox .ui-resizable-se:active,.fl-lightbox .ui-resizable-se:hover,.fl-lightbox .ui-resizable-sw:active,.fl-lightbox .ui-resizable-sw:hover{background:0 0;border-color:#00a0d2}.fl-lightbox .ui-resizable-ne{border-bottom:none;border-left:none;border-top-right-radius:4px}.fl-lightbox .ui-resizable-nw{border-bottom:none;border-right:none;border-top-left-radius:4px}.fl-lightbox .ui-resizable-se{border-top:none;border-left:none;border-bottom-right-radius:4px}.fl-lightbox .ui-resizable-sw{border-top:none;border-right:none;border-bottom-left-radius:4px}.fl-builder-ui-keyboard-shortcuts{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:999999;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(50,50,50,.88);font-size:15px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-ui-keyboard-shortcuts.is-showing{display:-ms-flexbox;display:flex}.fl-builder-ui-keyboard-shortcuts-content{box-sizing:border-box;width:500px;background:#f5f7f9;border-radius:4px;padding:30px 0 0;box-shadow:0 10px 30px rgba(0,0,0,.15)}.fl-builder-ui-keyboard-shortcut-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;padding:12px 40px}.fl-builder-ui-keyboard-shortcut-item:nth-child(even){background:#eef2f5}.fl-builder-ui-shortcut-keycode{margin-left:auto;text-transform:uppercase;letter-spacing:2px}.fl-builder-ui-keyboard-shortcust-footer{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;padding:10px}.dismiss-shortcut-ui{padding:10px;border-radius:4px;background:#fff;color:#000;font-size:14px;border:2px solid #fff}.dismiss-shortcut-ui:focus,.dismiss-shortcut-ui:hover{top:0;color:#000;background:#eef2f5;border:2px solid #eef2f5}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel,.fl-builder-ui-skin--dark .fl-builder--preview-actions,.fl-builder-ui-skin--dark .fl-builder--search-results-panel,.fl-builder-ui-skin--dark .fl-builder-panel,.fl-builder-ui-skin--dark .fl-lightbox,body.fl-builder-ui-skin--dark .fl-builder-bar .fl-builder-bar-content{background:#23282d;color:#b4b9be;border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-header{color:#b4b9be;border-bottom-color:#1d1d1d;border-top-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-top-color:#1d2227}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel:before{border-bottom-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-arrow polygon{fill:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel-search .fl-builder-panel-search-input{background:#24282e}.fl-builder-ui-skin--dark .fl-responsive-preview-content{background:#131619}.fl-builder-ui-skin--dark .fl-form-table th{background:#23282d!important;color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--preview-actions .device-icons,.fl-builder-ui-skin--dark .fl-builder-button{background:#2c333a}.fl-builder-ui-skin--dark .fl-builder-button:focus{background:#131a22}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-primary{color:#fff!important;fill:#fff!important;background:#00A0D2}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-buy-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-feedback-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-upgrade-button{background-color:#F7A407;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-silent:focus{border:2px solid #00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{color:#00A0D2!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:hover,.fl-builder-ui-skin--dark .fl-builder--menu>button:hover{background:#101215!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:focus,.fl-builder-ui-skin--dark .fl-builder--menu>button:focus{background:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-bar-title{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:#181b1f}.fl-builder-simple.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:transparent}.fl-builder-ui-skin--dark .fl-builder-layout-title{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-bar-title-caret i,.fl-builder-ui-skin--dark .fl-builder-layout-pretitle,.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{color:#7d8690}.fl-builder-ui-skin--dark button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#101215!important}.fl-builder-ui-skin--dark .fl-builder--search:before{color:rgba(162,173,184,.73)}.fl-builder-ui-skin--dark .fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(162,173,184,.73)!important}.fl-builder-ui-skin--dark .fl-builder--search .search-clear{color:rgba(162,173,184,.5);background-color:#e4e4e4;background:linear-gradient(to left,#383f46,#383f46 75%,rgba(56,63,70,0))}.fl-builder-ui-skin--dark .fl-builder--menu hr{background-color:#23282d!important;border:none}.fl-builder-ui-skin--dark .fl-builder--tabs{border-color:#383f46!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing,.fl-builder-ui-skin--dark .fl-builder-settings-tabs a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-more.fl-contains-active{color:#fff!important;fill:#fff!important;background:#181b20!important}.fl-builder-ui-skin--dark .fl-builder--tabs :focus{background-color:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing:focus{color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder--menu-item:hover{background:#383f46;color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--menu * .fl-builder--menu-item-accessory,.fl-builder-ui-skin--dark .fl-builder-blocks-section-group-name{color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--selector-display{color:#c6cdd6;background:url(../img/svg/select-arrow-down-alt2-light.svg) center right 10px no-repeat #1a1b22!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label{color:#b5becb}.fl-builder-ui-skin--dark .fl-builder-panel-search-input input{border-color:#5b656f;color:#b8c2ce;background:#171b1f!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label:focus,.fl-builder-ui-skin--dark .fl-builder-panel-search-input input:focus{border-color:#00a0d2}.fl-builder-ui-skin--dark .fl-builder--group-label{color:#aaafb5!important;background:#24282e}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu{border-color:#101215!important;color:#7c858e;background-color:#101215}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu:before{border-bottom-color:#101215}.fl-builder-ui-skin--dark .fl-builder--menu>a,.fl-builder-ui-skin--dark .fl-builder--menu>button,.fl-builder-ui-skin--dark .fl-builder--menu>span{color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:hover{background:#23282d!important;color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:focus{background:#23282d!important;color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-panel-drag-handle{fill:#5b656f}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-header,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-header,.fl-builder-ui-skin--dark .fl-builder-settings-section-header{background-color:#191b21;border-color:#191b21}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-name,.fl-builder-ui-skin--dark .fl-builder--user-templates-section-name,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-title,.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title{color:#7d8690!important;fill:#7d8690;background:#24282e}.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title:focus{border-color:#7d8690}.fl-builder-ui-skin--dark .fl-builder-blocks-section-content .fl-builder-block,.fl-builder-ui-skin--dark .fl-user-template{color:#b8c2ce}.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-content,.fl-builder-ui-skin--dark .fl-user-template:hover{background:#171b1f;color:#fff}.fl-builder-ui-skin--dark .fl-builder-block:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover i{color:#6d7782!important}.fl-builder-ui-skin--dark .fl-builder-block:hover a:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover a:hover i{color:#9eacbb!important}.fl-builder-ui-skin--dark .fl-builder-block .fl-builder-block-icon{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col,.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#7d8690}.fl-builder-ui-skin--dark .fl-user-templates{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder--template-thumbnail{border-color:#393f44}.fl-builder-ui-skin--dark .fl-builder--menu a.fl-template-collection{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-lightbox .fl-lightbox-header h1{color:#fff!important}.fl-builder-ui-skin--dark .fl-form-table th label{color:#a8b3bf!important}.fl-builder-ui-skin--dark .fl-builder-settings-tabs{background-color:#2c333a!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields h3.fl-builder-settings-title{background:#24282e}.fl-builder-ui-skin--dark h3.fl-builder-settings-title .fl-builder-settings-title-text-wrap{color:#a8b3bf;background-color:#1b2025}.fl-builder-ui-skin--dark .fl-lightbox :not(i){color:#a7b1bb!important}.fl-builder-ui-skin--dark .fl-builder-button{color:#c6cdd6!important;fill:#c6cdd6!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{fill:#00A0D2!important}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-button.fl-builder-button-primary{color:#fff!important}.fl-builder-ui-skin--dark .fl-color-picker-color.fl-color-picker-empty{background:#1a1b22}.fl-color-picker-color.fl-color-picker-empty .fl-color-picker-icon{fill:#6f7881}.fl-builder-ui-skin--dark .fl-color-picker-clear{background-color:#121a23}.fl-builder-ui-skin--dark .fl-color-picker-clear:hover{background-color:#373f46}.fl-builder-ui-skin--dark span.fl-builder-block-no-node-templates:hover{background:#1d2025}.fl-builder-ui-skin--dark .fl-builder-settings-tab-description{background:#1d2227}.fl-builder-ui-skin--dark .fl-builder-panel-search button svg .filled-shape{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-custom-field,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url],.fl-builder-ui-skin--dark .fl-builder-settings-fields select,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields select:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea:focus{border-color:#00a0d2!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields select{background-image:url(../img/svg/select-arrow-down-alt2-light.svg)!important}.fl-builder-ui-skin--dark .fl-builder-custom-field select,.fl-builder-ui-skin--dark .fl-photo-field select{border-color:#7d8690!important}.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle{color:#6b747d}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel-view-title,.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle:hover{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--saving-indicator{color:#858f99}.fl-builder-ui-skin--dark .fl-icons-list i:hover{background-color:#16191d;color:#fff}.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:after,.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:before{background:#6f7881}.fl-builder-ui-skin--dark .fl-builder--user-templates-section-content{border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button{background:0 0;border-right-color:#101215!important}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button:hover{background:#181b1f}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu{background:#131a22;border-color:#353c43 #131a22 #131a22}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu:before{border-bottom-color:#353c43}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:focus,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover{background:#383f46}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover.fl-active{color:#fff!important;background:#383f46}.fl-builder-ui-skin--dark ul.as-selections{background-color:#121a23}.fl-builder-ui-skin--dark .fl-custom-query .fl-builder-settings-section{border-top:2px solid #1b2026!important}.fl-builder-ui-skin--dark div.fl-field-unit-select{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-dimension-field-units>*{border-right:1px solid #383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider,.fl-builder-ui-skin--dark .fl-field-popup-slider-input .ui-slider-handle{background:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-arrow:after{border-bottom-color:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-input{background-color:#121a23}.fl-builder-ui-skin--dark .fl-unit-field-input{border-right:1px solid #383f46!important}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"]{background-color:#383f46;color:#fff}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"] i{color:#fff!important}.fl-builder-ui-skin--dark .fl-button-group-field-options{background:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle{background-color:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle:hover{background-color:#383f46}.fl-builder-ui-skin--dark .fl-compound-field-section-visible .fl-compound-field-section-toggle{border-top-color:#121a23!important;background-color:transparent}.fl-builder-ui-skin--dark .fl-field-connections-toggle i{color:#7c8590}.fl-builder-ui-skin--dark .fl-lightbox .fl-field-connection-content{background-color:#191b20!important}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#181b20}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane:hover>.fl-nanoscroller-slider{background-color:#5a646f}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#00A0D2}.fl-builder-ui-skin--dark .fl-lightbox div.mce-panel{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox .mce-toolbar .mce-ico{color:#a7b1bb}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary{background:#383f46;border:none;box-shadow:none}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-settings .wp-switch-editor{background:#23282d}.fl-builder-ui-skin--dark .fl-lightbox .html-active .switch-html,.fl-builder-ui-skin--dark .fl-lightbox .quicktags-toolbar,.fl-builder-ui-skin--dark .fl-lightbox .tmce-active .switch-tmce{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox textarea.wp-editor-area{background:0 0!important}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:hover{background:#191b20}
|
1 |
+
.fl-color-picker-ui{width:300px}.fl-color-picker-ui.fl-color-alpha-enabled{width:334px}.fl-color-picker-ui .iris-picker{float:left;width:100%;height:224px;display:block;position:relative;border-top:1px solid rgba(0,0,0,.1)}.fl-color-picker-ui .iris-picker .iris-square-inner,.fl-color-picker-ui .iris-picker-inner{position:absolute;left:0;top:0;bottom:0;right:0}.fl-color-picker-ui .iris-picker,.iris-picker *{box-sizing:content-box}.fl-color-picker-ui .iris-error{background-color:#ffafaf}.fl-color-picker-ui .iris-picker .iris-square{width:300px;height:200px}.fl-color-picker-ui .iris-picker .iris-palette,.fl-color-picker-ui .iris-picker .iris-slider,.fl-color-picker-ui .iris-picker .iris-square-inner{height:100%;width:12.5%}.fl-color-picker-ui .iris-picker .iris-placeholder,.fl-color-picker-ui .iris-picker .iris-square{position:relative}.fl-color-picker-ui .iris-picker .iris-square-inner{width:auto;margin:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square,.fl-color-picker-ui .iris-ie-9 .iris-square-inner{box-shadow:none;border-radius:0}.fl-color-picker-ui .iris-ie-9 .iris-palette,.fl-color-picker-ui .iris-ie-9 .iris-slider,.fl-color-picker-ui .iris-ie-9 .iris-square{outline:rgba(0,0,0,.1) solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-palette,.fl-color-picker-ui .iris-ie-lt9 .iris-slider,.fl-color-picker-ui .iris-ie-lt9 .iris-square,.fl-color-picker-ui .iris-ie-lt9 .iris-square-inner{outline:#999 solid 1px}.fl-color-picker-ui .iris-ie-lt9 .iris-square .ui-slider-handle{outline:#999 solid 1px;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"}.fl-color-picker-ui .iris-ie-lt9 .iris-square .iris-square-handle{background:0 0;border:3px solid #fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"}.fl-color-picker-ui .iris-picker .iris-strip{box-sizing:border-box;width:calc(300px - 12px);margin:5px 6px 6px;border-radius:4px;position:relative;height:22px;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle{width:6px;position:absolute;right:0;top:-2px;bottom:-2px;margin:0;border-radius:3px;background:#fff;box-shadow:0 0 2px rgba(0,0,0,.5);z-index:5;cursor:ew-resize}.fl-color-picker-ui .iris-picker .iris-strip .ui-slider-handle:focus{outline:#00a0d2 solid 2px}.fl-color-picker-ui .iris-picker .iris-slider-offset{position:absolute;top:0;left:6px;right:0;bottom:0;width:auto;height:auto;background:0 0;border:none;border-radius:0;transform:rotate(180deg)}.fl-color-picker-ui .iris-picker .iris-square-handle{background:0 0;border:5px solid #999;border-radius:50%;border-color:rgba(128,128,128,.5);box-shadow:none;width:12px;height:12px;position:absolute;left:-10px;top:-10px;cursor:move;opacity:1;z-index:10}.fl-color-picker-ui .iris-picker .ui-state-focus .iris-square-handle{opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover{border-color:#999}.fl-color-picker-ui .iris-picker .iris-square-value:focus .iris-square-handle{box-shadow:0 0 2px rgba(0,0,0,.75);opacity:.8}.fl-color-picker-ui .iris-picker .iris-square-handle:hover::after{border-color:#fff}.fl-color-picker-ui .iris-picker .iris-square-handle::after{position:absolute;bottom:-4px;right:-4px;left:-4px;top:-4px;border:3px solid #f9f9f9;border-color:rgba(255,255,255,.8);border-radius:50%;content:" "}.fl-color-picker-ui .iris-picker .iris-square-value{width:0;height:0;position:absolute}.iris-ie-lt9 .iris-square-value,.iris-mozilla .iris-square-value{width:1px;height:1px}.fl-color-picker-wrapper{position:relative;width:48px;height:32px}.fl-color-picker{box-shadow:0 2px 4px 0 rgba(0,0,0,.12);background:url(../img/transp_bg.png) #fff;border-radius:4px;width:120px;height:36px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-color-picker-color{-ms-flex:1 1 100%;flex:1 1 100%;box-sizing:border-box!important;position:relative;border-radius:4px;background-color:transparent;cursor:pointer;border:2px solid transparent;padding:0;-ms-flex-pack:center;justify-content:center;display:-ms-flexbox;display:flex}.fl-color-picker-clear:hover,.fl-color-picker-color:hover{background:0 0;border:2px solid transparent}.fl-color-picker-clear:focus,.fl-color-picker-color.fl-color-picker-empty:focus,.fl-color-picker-color:focus{outline:0;top:0;border:2px solid #00a0d2;background:0 0}.fl-color-picker.fl-color-picker-has-reset .fl-color-picker-color:not(.fl-color-picker-empty){border-top-right-radius:0;border-bottom-right-radius:0}.fl-color-picker-icon{display:none;margin:auto}.fl-color-picker-color.fl-color-picker-empty{border-color:transparent}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon{display:block}.fl-color-picker-color.fl-color-picker-empty svg.fl-color-picker-icon path{fill:inherit}.fl-color-picker-clear{box-sizing:border-box;position:relative;display:-ms-flexbox;display:flex;-ms-flex:0 0 36px;flex:0 0 36px;-ms-flex-pack:center;justify-content:center;padding:0;border:2px solid transparent;fill:#A2AABE;background-color:#E7EBEF;cursor:pointer;border-radius:0 4px 4px 0}.fl-color-picker-clear:hover{fill:#6B6E75;background-color:#E7EBEF}.fl-color-picker-color.fl-color-picker-empty+.fl-color-picker-clear{display:none}.fl-color-picker-ui{display:inline-block;font-family:Helvetica,Verdana,sans-serif;z-index:1;position:fixed;overflow:hidden;padding-bottom:45px;border:1px solid rgba(0,0,0,.1);color:#999;background-color:#FAFAFA;border-radius:3px;box-shadow:0 9px 20px rgba(0,0,0,.17);transition:opacity .2s,visibility .2s;visibility:hidden;opacity:0;-webkit-transform:translate3d(0,0,0)}.fl-color-picker-ui.fl-color-picker-active{visibility:visible;opacity:1;z-index:999999}.fl-color-picker-ui .fl-color-picker-input,.fl-color-picker-ui .fl-color-picker-input:focus{width:100%;height:30px;border:none!important;font-size:14px!important;padding:0 8px;vertical-align:middle;color:#656c6e;background-color:#fff;border-radius:0;box-shadow:none}.fl-color-picker-ui .iris-square-value{transition:none}.fl-color-picker-preset-add{position:absolute;top:8px;right:8px;width:14px;height:14px;background-color:#656c6e;border-radius:50%;cursor:pointer;transition:all .2s}.fl-color-picker-preset-add:hover{background-color:#333}.fl-color-picker-preset-add:after,.fl-color-picker-preset-add:before{content:'';display:block;position:relative;background-color:#fff}.fl-color-picker-preset-add:before{top:6px;left:3px;width:8px;height:2px}.fl-color-picker-preset-add:after{left:6px;top:1px;width:2px;height:8px}.fl-color-picker-presets{position:absolute;left:0;bottom:0;width:100%;z-index:15;overflow:auto;border-top:1px solid rgba(0,0,0,.1);background-color:#FAFAFA}.fl-color-picker-presets-list .fl-color-picker-preset:hover,.fl-color-picker-presets-toggle:hover{background-color:#EDEDED}.fl-color-picker-presets-toggle{position:relative;overflow:hidden;width:100%;height:35px;text-align:center;line-height:35px;font-size:12px;font-weight:700;cursor:pointer;transition:all .1s}.fl-color-picker-presets-close-label,.fl-color-picker-presets-open-label{position:absolute;top:50%;left:50%;visibility:hidden;color:#999;transition:all .5s;transform:translate(-50%,-50%);opacity:0;width:100%}.fl-color-picker-presets-close-label.fl-color-picker-active,.fl-color-picker-presets-open-label.fl-color-picker-active{color:#656c6e;visibility:visible;opacity:1;z-index:999999}.fl-color-picker-presets-list{width:100%;list-style:none;margin:0;padding:0;overflow:auto}.fl-color-picker-presets-list .fl-color-picker-no-preset,.fl-color-picker-presets-list .fl-color-picker-preset{position:relative;padding:5px;font-size:12px;border-top:1px solid rgba(0,0,0,.1);transition:all .1s}.fl-color-picker-presets-list .fl-color-picker-no-preset{padding:18px 5px;text-align:center}.fl-color-picker-presets-list .fl-color-picker-preset-color{display:inline-block;width:40px;height:20px;margin-right:3px;vertical-align:middle;border:1px solid rgba(0,0,0,.1);border-radius:2px;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-label{vertical-align:middle;color:#333;cursor:pointer}.fl-color-picker-presets-list .fl-color-picker-preset-remove{position:absolute;top:50%;cursor:pointer;transform:translateY(-50%)}.fl-color-picker-clear .fl-color-picker-icon-remove{right:auto;top:auto;margin:auto}.fl-color-picker-presets-list .fl-color-picker-preset-remove{right:5px}.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:after,.fl-color-picker-presets-list .fl-color-picker-preset-remove:hover:before{background-color:#333}.fl-color-picker-added{position:absolute;width:100%;top:0;left:0;right:0;bottom:35px;z-index:10;color:#fff;text-align:center;background-color:rgba(0,0,0,.8)}.fl-color-picker-added-text{position:absolute;top:50%;left:50%;width:80%;font-size:14px;color:#fff!important;transform:translate(-50%,-50%)}.fl-color-picker-icon-check{position:relative;width:50px;height:50px;margin:5px auto}.fl-color-picker-icon-check:before{content:'';display:block;position:relative;width:15px;height:30px;margin-left:14px;border:7px solid #fff;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-down,.fl-color-picker-icon-arrow-up{display:inline-block;position:relative;width:10px;height:10px;margin-left:5px}.fl-color-picker-icon-arrow-down:before,.fl-color-picker-icon-arrow-up:before{content:'';display:block;position:relative;width:6px;height:6px;border:2px solid #999;border-left:none;border-top:none;transform:rotate(45deg)}.fl-color-picker-icon-arrow-up{top:2px;transform:rotate(180deg)}.fl-color-picker-icon-remove{width:15px;height:15px}.fl-color-picker-icon-remove:after,.fl-color-picker-icon-remove:before{content:'';display:block;position:relative;background-color:#6f7881}.fl-color-picker-icon-remove:before{left:6px;width:2px;height:10px;margin-top:3px;transform:rotate(-45deg)}.fl-color-picker-icon-remove:after{left:6px;width:2px;height:10px;margin-top:-10px;transform:rotate(45deg)}.fl-alpha-wrap{position:absolute;width:32px;height:215px;padding:0 5px;right:4px;border-top:none}.fl-alpha-slider{height:190px;position:absolute;top:12px;width:28px}.fl-alpha-slider .ui-slider-handle{background:rgba(0,0,0,0);border-color:#aaa;border-radius:4px;border-style:solid;border-width:4px;box-shadow:0 1px 2px rgba(0,0,0,.2);-moz-box-shadow:0 1px 2px rgba(0,0,0,.2);-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);cursor:ns-resize;height:12px;left:0;opacity:.9;position:absolute;right:0;width:30px;z-index:14}.fl-alpha-slider .ui-slider-handle:before{content:" ";position:absolute;left:-2px;right:-2px;top:-3px;bottom:-3px;border:2px solid #fff;border-radius:3px}.fl-theme-builder-preview-select-title i:before,body .fl-theme-builder-preview-select .fa-caret-down i:before,body .fl-theme-builder-preview-select-item-title i:before{content:"\f078"}.fl-alpha-slider-offset{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAASCAYAAAAe/ZHXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNEQUQ0ODM4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNEQUQ0ODQ4RUE0MTFFNEExOEJFN0E5M0VFOTg0QUQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0RBRDQ4MThFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0RBRDQ4MjhFQTQxMUU0QTE4QkU3QTkzRUU5ODRBRCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/r/N8AAAWYSURBVHjarFvvR3VBEN45JZGIPkREHyIiIhJJf3qUSERE9CGiDxERkcg9z9u92uucvTszz5z7xnHPj93Z2d359cxscn5+jpTS+EoiMr3/+51cZ2dn4+e29i2/u7y8RKf/pO3vc+o+n5ycoNK31+f6+jrfZ37yuG2mf3R01H3fa5N/b29vU6dP5qft0G4PDg5MGuPr/v4+jz1t27mfvN/b21P75+fHx8eZfiV/Ozs7rUJnSu/5+RlFv+m6ZJpbW1s1PnrvXl9fZ/qX89zY2LB4mfy+v7/nsdV1XltbK/dr5vnz87OcV5bJabuVlRVLBifjfX9/l/xkGtM+S0tLNXnu0szfU/P3IMn/k0678h6ddqjQFGccVL6hoCsVfsq+NZ5QtCv5rfFS41sq37W+UPhMyhxEWTetvce3NR8oewqD39qalXuGAK/WPltjajIC4x2c9Ye1f43SGcqGwRBeTZjhMNntL4pCWZMQYhE05RVl02EovRgC4RkCbUNSQAGhGB/GsKG4h6FQoigDa2i8fRBy3uLMXYIG3Vr3aZvRaCRdBYlYIMZywhBGCVhgzzOlgRuUSOvC0GMEWxOM/+EtQFh1OIIXtfwg1tRaayGjg5px0jyZKEaTle3e+AsLCygVRAh3FlEgKbReE3oYGj9EgIR00QiEgKw3ZBQbRGjBeAMtDETQmHiKDsezJNLgCTFGItZXlAgCSiQggblP+9c8SDI0lXWlFv5g3K63KZ51FOcZzthQ3LomoNHwJmKIQISI3vqzSpwIQ8liSjGMFQjDpoVgaQ6cWgvLhOC7qiAwiHrWbEg4JMSmeUrBuHoYwioOQNXmhmAcrs096s1gJCGi3hSEVU8DQxYElYHhKwUUGAa+NqOBMsSSAQJuhQhCAH4vxozExsxiihPuaIrjCVYKWlYEsjSM52G8Kxxryngl5j0j+EyGTIiED4s1Itm0ZGWxMFCLJaBAcEI6OBkmFgNBoc8Cait2ZnENE/6wQN8LJSJeSMNAjKVm+LUMAIt3PR5AQgIGp1Z5zxhE8PtXUYReYeXi4mKmOPNXBMzt2tPT07LIUtJqr66uusXEbkFnWiQ6Pj72ikrtzc1NKopuvbbj58PDwxqNHp27u7tuYWumUDV+v7+/Xyu6pc59+/DwUCsC9ujt7u6qRbt8//T01C3elbyN70fb29uZ/1FSincvLy/lPGb42tzc9IqJeHt7q61Pr2C6vr7u7tfHx8fMPhV0sLq6WhZtU0n36+uru8elPE7aLi8v1wqJPXn++fmZKYgX8ozFxcXJb0NaQTHClZT8+gBjsYdaFc+zWcUkGTCWENY66ta92oSVzo3WI6IZKGtukeyfBLFKBNAj6bUOBgaoe9wE4n04IBNkLMoC7+Skj630ZlTJMYdyMsU2T8AwpzALkVFilZgJcT2l9PCWDDSAMBSjVlJgZNk0lE1AIby0qCiCnBQNj6aBGQslZIZJ5hB6D/AzQHto5Z9Nk8tARdN4q2ExBnsyIJ311EymShyjan2rKk0zh1Ay1oQVWAZQRnkUA8RFw7TahjBnmNgMVMQrsCGZJezRtGlU0cUZ1zuaxGZPpbhApM+ZpFQqQ6xadoMtBrEKpBVo4GRXvNSxpaRixKiR+TChCYhsDwZkfFj8IkErjAHejcUI0XQrgwehhNSMHAz21E0wZ23FcCAmj8Sd/PXy2xLYLAuwRw4IMsqjFaWYOpMEhDySAPFCWyFkgAHrEcA+BNeJ4UE8HCzJPpCrerUmQIx1pWJkjqxJD8EikUo2c5aI8ZYgsAkM4WQtnHd0ns0ORgVTBghy5ISy928SGsbTMqYg523RUY8oNYG4FIYiyRyZCnFCJC87IoRAIMVOqQ7BKexxCS2hYVl9JhvlpYjnAe4MhmRPMWhhvLfXINaI9WKM0Zu0+SfAAFLE1EgfVSv7AAAAAElFTkSuQmCC) center;box-shadow:0 0 5px rgba(0,0,0,.4) inset;-moz-box-shadow:0 0 5px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4) inset;width:200px;height:22px;transform:rotate(-90deg);bottom:48%;left:-80px;position:absolute}.fl-alpha-text{width:30px;font-size:12px;text-align:center;color:#999;position:absolute;bottom:-5px}.fl-lightbox-mask,.fl-lightbox-wrap{bottom:0;left:0;position:fixed;right:0;z-index:100010}@keyframes fl-lightbox-zoom{from{transform:scale(.4)}to{transform:scale(1)}}.fl-lightbox-wrap{display:none;overflow:auto;padding:0;top:43px;-webkit-backface-visibility:hidden;-webkit-transform:translateZ(0);pointer-events:none}.fl-builder-draggable-is-dragging .fl-lightbox-wrap,.fl-builder-resizable-is-resizing .fl-lightbox-wrap,.fl-lightbox,.fl-lightbox-mask{pointer-events:auto}.fl-lightbox-mask{background:#000;opacity:.7;filter:alpha(opacity=70);top:0}.fl-lightbox{background:#F5F7F9;border-radius:4px;box-shadow:rgba(0,0,0,1) 0 4px 30px;-moz-box-shadow:rgba(0,0,0,1) 0 4px 30px;-webkit-box-shadow:rgba(0,0,0,1) 0 4px 30px;position:relative;display:-ms-flexbox;display:flex;z-index:100011;transform-origin:center;animation-name:fl-lightbox-zoom;animation-duration:.25s}.fl-lightbox.fl-lightbox-prevent-animation{animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-lightbox :not(i){color:#333;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:12px;line-height:14px;text-decoration:none;text-transform:none}.fl-lightbox *,.fl-lightbox :after,.fl-lightbox :before{box-sizing:content-box}#fl-ui-root .fl-nanoscroller-pane,.fl-builder--content-library-panel .fl-nanoscroller-pane,.fl-lightbox .fl-nanoscroller-pane{bottom:2px;right:2px;width:6px}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#bac0ca;transition-property:height,background-color;transition-duration:.25s}#wpadminbar,html{transition-duration:.35s}.fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider:hover{background-color:#c8cdd4}.fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#029fd2}.fl-lightbox .fa{font-family:FontAwesome!important}.fl-lightbox .dashicons{font-family:dashicons}.fl-lightbox.ui-draggable{box-shadow:rgba(0,0,0,.2) 0 7px 30px;-moz-box-shadow:rgba(0,0,0,.2) 0 7px 30px;-webkit-box-shadow:rgba(0,0,0,.2) 0 7px 30px}#wpadminbar,.fl-builder-bar.is-hidden{pointer-events:none}.fl-lightbox-resizable{height:500px;width:380px}@media (max-width:500px){.fl-lightbox-resizable{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-resizable .ui-resizable-handle{display:none!important}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:default!important}.fl-lightbox-controls{display:none}}.fl-lightbox-width-full{left:0!important;right:0!important;top:0!important;height:100%!important;width:100%!important}.fl-lightbox-width-full .fl-lightbox-header{cursor:inherit!important}.fl-lightbox-controls{position:absolute;right:10px;top:10px;z-index:5}.fl-lightbox-controls .fa{color:#bdbdbd;font-size:14px;padding:5px}.fl-lightbox-controls .fa:hover{color:#aaa;cursor:pointer}.fl-lightbox-header-wrap{border-top-left-radius:4px;border-top-right-radius:4px}.fl-lightbox-header{position:relative}.fl-lightbox-header h1{color:#333!important;font-size:16px!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-weight:400!important;margin:0!important;padding:14px 34px 15px 28px!important;text-align:left!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;line-height:1}.fl-lightbox.ui-draggable .fl-lightbox-header{cursor:move}.fl-lightbox-header h1 .fl-builder-badge{margin-left:10px;color:#fff;background-color:#F7A408}.fl-lightbox-content,.fl-lightbox-content-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:1 100%;flex:1 100%;max-width:100%}.fl-lightbox-footer{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;-ms-flex:0 0;flex:0 0;-ms-flex-preferred-size:44px;flex-basis:44px;padding:4px;text-align:right}.fl-lightbox-footer .fl-builder-button{height:36px;margin-left:5px!important;-ms-flex:0 0 0%;flex:0 0 0%;-ms-flex-pack:center;justify-content:center}.fl-lightbox-width-slim .fl-lightbox-footer{-ms-flex-pack:stretch;justify-content:stretch;padding:4px 5px}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button{-ms-flex:1 1 100%;flex:1 1 100%;display:block;text-align:center}.fl-lightbox-width-slim .fl-lightbox-footer .fl-builder-button:first-child{margin-left:0!important}.fl-lightbox table,.fl-lightbox td,.fl-lightbox th,.fl-lightbox tr{border:none}.fl-lightbox-wrap.fl-icon-selector{z-index:1000111}.fl-icon-selector .fl-lightbox{height:100%}.fl-icons-filter{height:auto!important;margin:0!important;position:absolute!important;right:0;top:0;padding:10px 16px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-icons-filter select{vertical-align:middle;width:195px;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-sizing:border-box;color:#000;border:2px solid #e4e7ea!important;border-right:none!important;margin:0;padding:2px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;-ms-flex:1 1 195px;flex:1 1 195px;border-radius:0}.fl-icons-filter input[type=text]{line-height:18px;vertical-align:middle;width:160px;-ms-flex:1 1 160px;flex:1 1 160px;border:2px solid #e4e7ea!important;border-radius:0!important;padding:2px 10px!important}.fl-icons-filter input[type=text]:focus,.fl-icons-filter select:focus{border:2px solid #00A0D2!important}.fl-icons-list{bottom:52px;left:0;overflow:auto;padding:20px;position:absolute;right:0;top:48px}.fl-icons-list::-webkit-scrollbar{background-color:#ccc;-webkit-appearance:none;width:10px}.fl-icons-list::-webkit-scrollbar-thumb{background-color:#666;border:1px solid #ccc}.fl-icons-section{text-align:center}.fl-icons-section h2{border-bottom:1px solid #dfdfdf;color:#333!important;font-family:Helvetica,Verdana,sans-serif!important;font-size:16px!important;font-weight:700!important;margin:0 0 20px!important;padding:0 0 10px!important;text-align:left}.fl-icons-list i,.fl-icons-list i:before{cursor:pointer;display:inline-block;font-size:40px;height:100px;line-height:100px;width:100px;background:0 0}.fl-icons-list i:hover{background:#fff;box-shadow:0 10px 20px rgba(0,0,0,.15);border-radius:4px}.fl-icon-selector-footer{bottom:0;left:0;position:absolute;right:0}html{transition-property:margin}html.fl-builder-is-showing-toolbar{margin-top:calc(44px + 1px)!important}.fl-builder-edit body{position:static!important}.fl-builder-edit:after,.fl-builder-edit:before{z-index:0!important}.fl-builder-edit .fl-builder-content{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none}#wpadminbar{transition-property:transform,opacity;transform-origin:bottom;transform-style:preserve-3d;transform:rotateX(89deg) translateY(46px);opacity:0;will-change:transform}html.fl-builder-show-admin-bar{margin-top:32px}html.fl-builder-show-admin-bar #wpadminbar{transform:rotateX(0) translateY(0);pointer-events:auto;opacity:1}@media screen and (max-width:782px){html.fl-builder-show-admin-bar{margin-top:46px}}.fl-clear{clear:both}.screen-reader-text{position:absolute;left:-1000em;top:-1000em;height:1px;width:1px;overflow:hidden}.fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(240,240,240,.8);bottom:0;display:none;left:0;position:fixed;right:0;text-align:center;top:0;z-index:12000000}.fl-builder-settings .fl-builder-loading{background:url(../img/ajax-loader.svg) center center no-repeat rgba(255,255,255,.8);display:block;position:absolute}.fl-field-loader{color:#B3B3B3!important;font-style:italic}.fl-builder-node-loading{opacity:.35!important}.fl-builder-node-loading-placeholder{background:url(../img/ajax-loader.svg) center center no-repeat;height:50px}.fl-col-group-has-child-loading{display:-ms-flexbox;display:flex}.fl-col-group-has-child-loading>.fl-builder-node-loading-placeholder{width:50px}.fl-node-hidden{display:none}.fl-builder-edit .fl-node-hidden{display:block}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-visible-mobile{display:block!important}html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-desktop-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-medium-mobile,html:not(.fl-responsive-preview-enabled) .fl-builder-content-editing .fl-col-group-equal-height .fl-col.fl-visible-mobile{display:-ms-flexbox!important;display:flex!important}.fl-responsive-preview-enabled body{overflow:hidden!important}.fl-responsive-preview-mask{background:#F7F7F7;bottom:0;left:0;position:fixed;right:0;top:0;z-index:99999}.fl-responsive-preview{bottom:0;left:0;position:fixed;right:0;top:0;margin-top:50px;z-index:100000}.fl-builder-preview .fl-responsive-preview{margin:0!important}.fl-responsive-preview-content{background:#F5F7F9;padding:20px 20px 45px;overflow:scroll;position:absolute;top:45px;right:0;bottom:0;left:0}.fl-responsive-preview-content .fl-builder-content-editing{overflow:visible!important}.fl-responsive-preview-message{background:#F5F7F9;color:#b3b3b3;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;font-size:14px;font-weight:400;padding:15px;text-align:center;position:absolute;top:0;left:0;right:0;z-index:999999}.fl-responsive-preview-message span{display:inline-block;margin-right:8px}.fl-responsive-preview-message .fl-builder-button{display:inline-block;margin-left:2px;padding:0 10px}.fl-responsive-preview-message .fl-builder-button i{font-size:14px;height:14px;width:14px}.fl-responsive-preview .fl-builder-content{box-shadow:0 0 8px rgba(0,0,0,.2);margin-left:auto;margin-right:auto;max-width:100%;overflow:visible;position:relative}#fl-builder-preview-frame,#fl-builder-preview-mask{bottom:0;height:100%;position:fixed;top:0;width:100%;right:0}.fl-responsive-preview .fl-block-col-resize{display:none}.fl-builder-button,body .fl-builder-bar .fl-builder-bar-content{display:-ms-flexbox;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}#fl-builder-preview-mask{background:url(../img/ajax-loader.svg) center center no-repeat #F7F7F7;left:0;z-index:999999}#fl-builder-preview-frame{left:50%;transform:translateX(-50%);-moz-transform:translateX(-50%);-webkit-transform:translateX(-50%);z-index:1000000}body button[class*=fl-builder],body button[class*=fl-builder]:focus,body button[class*=fl-builder]:hover{box-shadow:none;max-height:none;max-width:none;text-decoration:none;text-indent:0;text-shadow:none;text-transform:none}.fl-builder-button{-webkit-appearance:none;-ms-flex-align:center;align-items:center;background:#e7ebef;border:2px solid transparent;border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;color:#676F7A!important;cursor:pointer;display:flex;fill:#676F7A!important;font-size:14px!important;font-style:normal!important;font-weight:500!important;height:33px;letter-spacing:normal!important;line-height:1!important;margin:0;padding:0 12px;text-align:center;transition-property:background-color,width;transition-duration:.2s;white-space:nowrap;width:auto;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder--search-results-panel,.fl-builder-bar,.fl-builder-panel{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-touch-callout:none}.fl-builder-button:hover{background:#dadfe5;color:#222;border:2px solid transparent!important}.fl-builder-button:active{background:#DCDCDC}button.fl-builder-button:focus{position:static;top:auto;outline:0;background:#E4E7EA;border:2px solid #00A0D0!important}.fl-builder-bar .fl-builder-button{height:auto}.fl-builder-button-primary,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button{background:#00A0D2;color:#fff!important;text-decoration:none;border:2px solid transparent!important}.fl-builder-button.fl-builder-button-primary:focus,body.fl-builder--layout-has-drafted-changes .fl-builder-button.fl-builder-done-button:focus{background:#00A0D2;border:2px solid #ffc217!important}.fl-builder-button-primary:hover,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:hover{background:#0197C6;color:#fff!important}.fl-builder-button-primary:active,body.fl-builder--layout-has-drafted-changes .fl-builder-done-button:active{background:#0484AC}.fl-builder-button-large{height:30px}.fl-builder-button-small{font-size:11px!important;line-height:1!important}.fl-builder-help-button{color:#b3b3b3;font-size:16px!important}.fl-builder-help-button i{position:relative;top:-1px}.fl-builder-help-button:hover{color:#666}.fl-builder-publish-button{line-height:45px!important}.fl-builder-content-panel-button,.fl-builder-content-panel-button:hover{fill:#00A0D2!important;font-size:30px!important;padding-bottom:4px}.fl-builder-button-silent,.fl-builder-button-silent:hover{padding:0 12px;background:0 0!important;border:2px solid transparent!important;box-shadow:none!important}.fl-builder-done-button,.fl-builder-done-button:hover{font-weight:600}.fl-field .fl-builder-button{display:inline-block;height:auto;padding:11px 12px;vertical-align:middle;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)}.fl-builder-badge{background:#333;border-radius:2px;color:#fff!important;display:inline;font-size:11px!important;font-weight:400;letter-spacing:1px;margin-left:2px;padding:2px 4px;vertical-align:middle}.fl-builder-badge-global{background:#ff9600;transform:translateY(0);transition-duration:.25s;transition-property:transform}.fl-builder-blocks-node-template .fl-builder-badge-global{position:absolute;right:0;top:0}.fl-builder-block:hover .fl-builder-badge-global{display:none}.fl-builder-bar{left:0;position:fixed;right:0;top:0;z-index:999999;user-select:none;transition-property:transform opacity;transition-duration:.35s;transform-style:preserve-3d;perspective:1100px}.fl-builder-bar.is-hidden .fl-builder-bar-content{transform:translateY(-100%) rotateX(90deg)}body .fl-builder-bar .fl-builder-bar-content{display:flex;box-sizing:border-box;background:#fff;border-bottom:1px solid #eceef1;color:#999;font-size:14px!important;height:calc(44px + 1px);transition-property:background-color,opacity,transform;transition-duration:.35s;pointer-events:auto}.fl-builder-draggable-is-dragging .fl-builder-content,.fl-builder-draggable-is-dragging .fl-builder-panel .fl-lightbox,.fl-builder-resizable-is-resizing .fl-builder-content,.fl-builder-resizable-is-resizing .fl-builder-panel .fl-lightbox,body .fl-builder-bar .fl-builder-bar-content.is-muted{pointer-events:none}body .fl-builder-bar .fl-builder-bar-content.is-muted>:not(.fl-builder-publish-actions){-webkit-filter:saturate(20%) blur(1px);filter:saturate(20%) blur(1px);opacity:.4}.fl-builder-bar-title{box-sizing:border-box;color:#333;display:-ms-flexbox;display:flex;-ms-flex:0 0 380px;flex:0 0 380px;max-width:380px;border-right:1px solid #eceef1;cursor:pointer}.fl-builder-bar-title:hover{background:#fff}.fl-builder-bar-title.is-showing-menu .fl-builder-bar-title-caret>svg{transform:rotate(180deg)}.fl-builder-simple .fl-builder-bar-title{cursor:auto}.fl-builder-simple .fl-builder-bar-title:hover{cursor:auto;background:0 0}.fl-builder-bar-title span{vertical-align:middle}.fl-builder-bar-title-icon{box-sizing:border-box;background:0 0;-ms-flex:0 0 46px;flex:0 0 46px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:4px}.fl-builder-bar-title-icon img{max-width:100%!important;height:auto!important}.fl-builder-bar-title.fl-builder-bar-title-no-icon{padding-left:12px}.fl-builder-bar-title-area{box-sizing:border-box;-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:4px}.fl-builder-layout-title,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{font-size:16px;font-weight:400;line-height:1.3;color:#161B20;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret,.fl-builder-layout-pretitle,.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{font-size:12px;font-weight:500;line-height:1.3;color:#656d77;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.fl-builder-bar-title-caret i,.fl-theme-builder-preview-select-title i{color:inherit!important;font-size:14px}.fl-builder-bar-title-caret{margin-left:auto!important;-ms-flex:0 0 46px;flex:0 0 46px}.fl-theme-builder-preview-select-title i{padding:12px}.fl-theme-builder-preview-select.fl-builder-button{position:relative;border-radius:0;background:0 0;min-width:0;display:-ms-flexbox;display:flex;-ms-flex:0 0 360px;flex:0 0 360px;max-width:360px;margin:0!important;padding:4px 10px;border:none!important;border-right:2px solid #d5dadd!important;box-shadow:none}.fl-theme-builder-preview-select.fl-builder-button:hover{border:none!important;border-right:2px solid #d5dadd!important}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:end;justify-content:flex-end;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.fl-theme-builder-preview-select-title div{-ms-flex:1;flex:1}.fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{display:block}.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items{position:absolute;top:calc(48px + 10px);left:10px;width:calc(100% - 20px)!important;background:#fff;border-radius:4px;border:2px solid #D5DADD;border-top:3px solid #00a0d2;box-shadow:0 15px 45px 8px rgba(0,0,0,.04);margin:0!important;padding:0;z-index:-1;font-size:16px;overflow:visible;height:auto!important;max-height:calc(100vh - 66px);min-height:300px;display:-ms-flexbox!important;display:flex!important;-ms-flex-direction:column;flex-direction:column}.fl-theme-builder-preview-select-item{padding:4px 0!important;border-bottom:none!important;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;text-align:initial}.fl-theme-builder-preview-select-item:hover{text-decoration:none;color:#111;background:0 0!important}body .fl-theme-builder-preview-select .fa-caret-down{float:none}body .fl-theme-builder-preview-select-item-title{padding:10px 15px;color:#222;font-size:14px}body .fl-theme-builder-preview-select-item-children{overflow:auto}body .fl-theme-builder-preview-select-item-child{overflow:hidden;text-overflow:ellipsis;line-height:1.1;margin:0 10px;border:2px solid transparent;border-radius:4px;padding:8px 10px 10px;font-size:14px;font-weight:400;color:#222}body .fl-theme-builder-preview-select-item-child:hover{background:#e6eaed!important}.fl-theme-builder-preview-select-item .fa-caret-down{color:#606D77}.fl-builder-bar-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:1 1 100%;flex:1 1 100%;padding:4px}.fl-builder-bar .fl-builder-button{margin:0 0 0 4px}.fl-builder-bar-actions .fl-builder-button:last-child{margin:0}.fl-builder-bar-actions:after{clear:both}.fl-builder-bar .fl-builder-content-panel-button{-ms-flex-align:baseline!important;align-items:baseline!important;padding-top:1px;font-weight:400}.fl-builder-content-panel-button svg{transition-property:transform;transition-duration:.25s;transform:rotate(0) scale(1);transform-origin:center}.fl-builder-content-panel-is-showing .fl-builder-content-panel-button svg{transform:rotate(135deg) scale(1.1) translate(.5px,-.5px)}.fl-builder--saving-indicator{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-item-align:center;align-self:center;padding:0 10px;font-size:12px;font-style:italic;color:#676f7a;-ms-flex-align:center;align-items:center;line-height:1.2;min-width:180px;-ms-flex-pack:end;justify-content:flex-end}.fl-builder--saving-indicator:hover{color:#676f7a}.fl-builder--saving-indicator .fa-question-circle{font-size:13px;margin:3px 0 3px 5px}.fl-builder-buy-button,.fl-builder-feedback-button,.fl-builder-upgrade-button{background:#F7A407;color:#fff!important;text-decoration:none}.fl-builder-buy-button i.fa-external-link-alt,.fl-builder-feedback-button i.fa-external-link-alt,.fl-builder-upgrade-button i.fa-external-link-alt{color:#FFC733;margin:0 0 0 6px}.fl-builder-buy-button:hover,.fl-builder-feedback-button:hover,.fl-builder-upgrade-button:hover{background:#EE8E0D;color:#fff!important}@media (max-width:980px){.fl-builder--main-menu-panel{width:calc(100% - 20px)!important}.fl-builder--main-menu-panel:before{right:auto;left:20px}.fl-builder-bar-title,.fl-theme-builder-preview-select{-ms-flex:1 .5 380px!important;flex:1 .5 380px!important}}@media (max-width:620px){.fl-theme-builder-preview-select.fl-builder-button{display:none}}@media (max-width:500px){#fl-builder-toggle-notifications,.fl-builder--main-menu-panel:before,.fl-builder--panel-arrow,.fl-builder-bar-title-area,.fl-builder-panel-drag-handle,.fl-builder-panel:before{display:none}.fl-builder--main-menu-panel,.fl-builder-panel{width:auto!important;top:44px!important;left:0!important;right:0!important;bottom:0!important;border-radius:0!important;box-shadow:none!important}.fl-builder--main-menu-panel{border-left:transparent!important;border-right:transparent!important;border-bottom:transparent!important;max-height:calc(100% - 44px)!important}.fl-builder-bar-title{-ms-flex:0 0 80px!important;flex:0 0 80px!important}.fl-builder-bar-title-caret{padding-left:0;padding-right:0;max-width:24px}.fl-builder-bar-actions{max-width:calc(100% - 80px);overflow:hidden}.fl-builder--panel-header{border-radius:0!important;cursor:default!important}.fl-builder--panel-header .fl-builder--tabs{cursor:default!important}.fl-builder-publish-actions{width:100%!important;padding-left:4px!important}.fl-builder-bar-actions .fl-builder-button{padding:0 8px!important}}.fl-builder--preview-actions{display:none;position:fixed;top:4px;left:4px;z-index:10000001;padding:4px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder-preview .fl-builder--preview-actions{display:-ms-flexbox;display:flex}.fl-builder--preview-actions .device-icons{color:#555;background:#e4e4e4;border:none!important;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;text-decoration:none;font-size:14px!important;line-height:1!important;margin:0 4px 0 0;padding:0 6px;cursor:pointer;-webkit-border-radius:3px;-webkit-appearance:none;border-radius:3px}.fl-builder--preview-actions .device-icons i{margin:0 6px}@keyframes fl-builder-ui-pin-zone-pulse{0%,100%{opacity:1;filter:alpha( opacity=1 )}50%{opacity:.5;filter:alpha( opacity=35 )}}.fl-builder-ui-pin-zone{animation:fl-builder-ui-pin-zone-pulse 2s infinite;transition:width .3s ease;background:rgba(0,160,210,.5);bottom:0;top:0;position:fixed;width:35px;z-index:100001}.fl-builder-ui-show-pin-zone-left .fl-builder-ui-pin-zone-left,.fl-builder-ui-show-pin-zone-right .fl-builder-ui-pin-zone-right{width:75px}.fl-builder-ui-pin-zone-left{left:0}.fl-builder-ui-pin-zone-right{right:0}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button{display:-ms-flexbox!important;display:flex!important;background:rgba(0,160,210,.5)!important;padding:2px 4px;width:80px;animation:fl-builder-ui-pin-zone-pulse 2s infinite}.fl-builder-content-panel-pin-zone .fl-builder-content-panel-button svg{display:none}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button{width:120px}.fl-builder-content-panel-pin-zone-hover .fl-builder-content-panel-button svg{display:none!important;width:100%;transform:none!important;fill:#00A0D2!important;border-radius:3px}.fl-builder-ui-is-pinned .fl-builder-content-panel-button,.fl-builder-ui-pinned-container .fl-lightbox-controls{display:none}.fl-builder-content-panel-pin-zone .fl-builder-done-button{-webkit-filter:grayscale(100%);filter:grayscale(100%)}.fl-builder-panel.fl-builder-ui-pinned{top:45px!important;bottom:0!important;height:auto!important;border-radius:0;border:none;box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s;z-index:11}.fl-builder-panel.fl-builder-ui-pinned-right{left:auto!important;right:0;border-left:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned-left{left:0;right:auto;border-right:1px solid #eceef1}.fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-radius:0!important}.fl-builder-ui-pinned-container .fl-lightbox-wrap{position:absolute;z-index:11}.fl-builder-ui-pinned-container .fl-lightbox{position:absolute;top:0;bottom:0;left:0;right:0;width:auto!important;height:auto;border-radius:0;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;animation-duration:0s;-moz-animation-duration:0s;-webkit-animation-duration:0s;-o-animation-duration:0s}.fl-builder-ui-pinned-container .fl-lightbox-header-wrap{border-radius:0}.fl-builder-ui-pinned-container .fl-lightbox.ui-draggable .fl-lightbox-header{cursor:auto}.fl-builder-ui-pinned-container .fl-lightbox-header h1{padding:12px 20px 10px!important}.fl-builder-ui-pinned-content-transform{transform:scale(1);transform-origin:center top 0}.fl-builder-ui-pinned-collapse{cursor:pointer;display:none;position:absolute!important;bottom:2px;padding:5px;border:2px solid transparent;background:0 0;width:36px;height:36px;border-radius:4px;fill:#778794;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.fl-builder-ui-pinned-collapse:focus,.fl-builder-ui-pinned-collapse:hover{top:auto!important;background:0 0;border:2px solid transparent;outline:0;fill:#00A0D2}.fl-builder-ui-pinned-collapse:focus{background:#E4E7EA}.fl-builder-ui-pinned-collapse>*{margin:auto;line-height:1}.fl-builder-ui-pinned-collapse svg g{fill:inherit}.fl-builder-ui-is-pinned-right .fl-builder-ui-pinned-right-collapse{display:-ms-flexbox;display:flex;left:-40px}.fl-builder-ui-is-pinned-left .fl-builder-ui-pinned-left-collapse{display:-ms-flexbox;display:flex;right:-40px}.fl-builder-ui-pinned-collapse i[data-toggle=show],.fl-builder-ui-pinned-is-collapsed i[data-toggle=hide]{display:none}.fl-builder-ui-pinned-is-collapsed i[data-toggle=show]{display:block}.fl-builder--panel-no-settings,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-content,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-controls,.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--tab-wrap,.fl-builder-ui-pinned-is-collapsed .fl-builder--panel-header{display:none}.fl-builder-ui-is-pinned-left [data-toggle=hide],.fl-builder-ui-is-pinned-right [data-toggle=show]{transform:rotateY(180deg)}.fl-builder-ui-pinned-is-collapsed .fl-lightbox{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-builder--panel-header{background:0 0;border:none;z-index:10}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-wrap{top:0}.fl-builder-simple-pinned .fl-builder--content-library-panel .fl-lightbox-header h1{padding:14px 28px 15px!important}.fl-builder-simple-pinned .fl-builder--panel-no-settings{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;right:0;bottom:0}@keyframes fl-builder-show-panel{from{transform:scale(.8)}to{transform:scale(1)}}.fl-builder--search-results-panel,.fl-builder-panel{box-sizing:border-box;position:fixed!important;right:20px;top:calc(43px + 10px);width:380px;bottom:20px;background:#F5F7F9;color:#676F7A;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;border-radius:4px;box-shadow:0 8px 40px 4px rgba(0,0,0,.3);z-index:10000007;will-change:transform;user-select:none}.fl-builder-panel{transform-origin:top right;animation-name:fl-builder-show-panel;animation-duration:.15s;animation-fill-mode:both;-ms-flex:1;flex:1;display:none}.fl-builder--search-results-panel{display:none;position:absolute;right:0;top:93px;left:0;bottom:0;width:auto!important;border:none;border-radius:0;box-shadow:none;min-height:100px;max-height:calc(100vh - 54px);overflow:auto;z-index:1}.fl-builder-content-panel-is-showing .fl-builder-panel,.fl-builder-search-results-panel-is-showing .fl-builder--search-results-panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-panel .fl-lightbox .fl-builder-panel-drag-handle,.fl-builder-ui-is-pinned .fl-builder--panel-arrow,.fl-lightbox-width-full .fl-builder-panel-drag-handle,body.fl-builder-draggable-is-dragging .fl-builder--panel-arrow{display:none}.fl-builder--search-results-panel .fl-builder--no-results{text-align:center;padding:50px 20px}.fl-builder--panel-arrow{position:absolute;top:-13px;right:10px}.fl-builder--panel-arrow polygon{fill:#00a0d2}.fl-builder--panel-header{border-top:3px solid #00a0d2;border-top-right-radius:4px;border-top-left-radius:4px}.fl-builder-ui-is-pinned .fl-builder--panel-header{border-top:none}.fl-builder-panel-drag-handle{position:absolute;top:7px;left:10px;fill:#ccd4da;width:6px}.fl-builder-ui-is-pinned-left .fl-builder-panel-drag-handle{left:auto;right:10px}.fl-builder--panel-header .fl-builder--panel-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-content-group-select{-ms-flex:1 1;flex:1 1}.fl-builder--panel-header .fl-builder--panel-controls .fl-builder-panel-search{-ms-flex:0 0;flex:0 0;padding:0 10px 6px 0;margin-left:-4px}.fl-builder--panel-controls .fl-builder-panel-search button{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:30px;background:0 0!important;border:2px solid transparent!important;font-size:inherit;height:36px;margin:0;padding:0}.fl-builder--panel-controls .fl-builder-panel-search button:active,.fl-builder--panel-controls .fl-builder-panel-search button:focus{top:0;outline:0}.fl-builder-panel-search button svg{height:auto;width:20px}.fl-builder-panel-search button.fl-builder-dismiss-panel-search svg{width:16px}.fl-builder-panel-search button svg .filled-shape{fill:#000}.fl-builder--panel-controls .fl-builder-panel-search button:active svg .filled-shape,.fl-builder--panel-controls .fl-builder-panel-search button:focus svg .filled-shape{fill:#00A0D2}.fl-builder-panel-search .fl-builder-panel-search-input{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background:#f5f7f9}.fl-builder-panel-search.is-showing-input .fl-builder-panel-search-input{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:0 10px 6px}.fl-builder-panel-search-input input{-ms-flex:1 1 100%;flex:1 1 100%;border:2px solid #e6eaed;background:#fff;border-radius:4px;margin:0 4px 0 0;padding:10px;color:#333}.fl-builder-panel-search-input input:focus{border-color:#0197C6;outline:0}.fl-builder-panel-content-wrap{bottom:0;height:auto;left:0;overflow:hidden;position:absolute;right:0;top:43px}.fl-builder-panel-content{padding-bottom:60px}.fl-builder--panel-view .fl-builder-blocks-section:first-child{border-top:none}.fl-builder-blocks-group:first-child{padding:20px 0 0}.fl-builder-blocks-group .fl-builder-blocks-section-group-name{display:block;padding:0 30px 15px;color:#000;font-size:20px;font-weight:600;line-height:1.4}.fl-builder-blocks-section .fl-builder-block{display:block;line-height:1.1;padding:15px 20px}.fl-builder--template-collection-section-header,.fl-builder-blocks-section .fl-builder-blocks-section-header{line-height:1.2;color:#333;margin:0!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#e7ebef;border-top:4px solid #e7ebef;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-blocks-section .fl-builder-blocks-section-title{background:#F5F7F9;color:#353535;padding:2px 16px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-builder-blocks-section .fl-builder-blocks-section-title i{color:#bfbfbf;float:right}.fl-builder-blocks-section-content{overflow:auto;padding:10px 10px 20px}.fl-builder-blocks-section-content:before{content:none}.fl-builder-blocks-section-content:after{float:none;clear:both}.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@supports (display:grid){.fl-builder--template-collection-section-content,.fl-builder-blocks-section-content.fl-builder-modules,.fl-builder-blocks-section-content.fl-builder-rows,.fl-builder-blocks-section-content.fl-builder-widgets{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr))}.fl-builder--template-collection-section-content>*,.fl-builder-blocks-section-content.fl-builder-modules>*,.fl-builder-blocks-section-content.fl-builder-rows>*,.fl-builder-blocks-section-content.fl-builder-widgets>*{width:auto!important}}.fl-builder-blocks-section-content .fl-builder-block-module,.fl-builder-blocks-section-content .fl-builder-block-row{-ms-flex:1 1 50%;flex:1 1 50%;width:50%;box-sizing:border-box}.fl-builder--search-results-panel .fl-builder-blocks-section-content .fl-builder-block-module{-ms-flex:1 1 100%;flex:1 1 100%;width:100%}.fl-builder-blocks-section.fl-active .fl-builder-blocks-section-content{display:block}.fl-builder-blocks-section-content .fl-builder-block{box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:13px;line-height:1.1;font-weight:400;color:#38404a}.fl-builder-block{position:relative;height:47px}.fl-builder-block.fl-builder-block-col-group{height:84px}.fl-builder-block.fl-builder-block-has-thumbnail{height:auto!important;padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover{padding:0!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-content{position:relative!important}.fl-builder-block.fl-builder-block-has-thumbnail:hover .fl-builder-block-content{padding:10px!important}.fl-builder-block.fl-builder-block-has-thumbnail .fl-builder-block-details{margin:0 10px 4px!important}.fl-builder-block:hover{overflow:visible;z-index:1}.fl-builder-block:hover .fl-builder-block-content{display:block;box-sizing:border-box;position:absolute;top:0;left:0;width:100%;padding:15px 20px;border-radius:4px;background:#fff;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);text-decoration:none;color:#111;cursor:move;overflow:hidden}.fl-builder-blocks-node-template .fl-builder-block,.fl-builder-blocks-section-content .fl-builder-block .fl-builder-block-details{position:relative}.fl-builder-block-module:hover .fl-builder-block-content{width:auto;min-width:100%}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual{display:block;margin-bottom:7px}.fl-builder-block-drag-helper .fl-builder-block-content .fl-builder-block-visual{display:none!important}.fl-builder-block .fl-builder-block-content .fl-builder-block-visual.fl-cols-visual{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;height:30px}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{-ms-flex:1 100%;flex:1 100%;background:#464a4c;height:30px;margin:0 2px;border-radius:2px}.fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#000}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:first-child{margin-left:0!important}.fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col:last-child{margin-right:0!important}.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.left-right-sidebar .fl-cols-visual-col:last-child,.fl-cols-visual.left-sidebar .fl-cols-visual-col:first-child,.fl-cols-visual.right-sidebar .fl-cols-visual-col:last-child{-ms-flex-preferred-size:60px;flex-basis:60px}.fl-builder-block-saved-column.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-column:hover .fl-builder-block-title,.fl-builder-block-saved-module.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-module:hover .fl-builder-block-title,.fl-builder-block-saved-row.fl-builder-block-global .fl-builder-block-title,.fl-builder-block-saved-row:hover .fl-builder-block-title{margin-right:70px}.fl-builder-block-module:nth-child(even):hover .fl-builder-block-content{left:auto;right:0}.fl-builder-block-thumbnail{border-radius:4px;background-size:contain;background-repeat:no-repeat;background-position:center;background-color:rgba(0,0,0,.06);margin-bottom:10px;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder-block:hover .fl-builder-block-thumbnail{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder-block .fl-builder-block-icon{margin-right:7px;fill:#000;display:inline-block;width:20px;height:20px;vertical-align:middle}.fl-builder-block-thumbnail:before{content:"";display:block;padding-top:50%}.fl-builder-block-thumbnail img{max-width:100%;max-height:160px;margin:0;-o-object-fit:cover;object-fit:cover}.fl-builder-blocks-section-content .fl-builder-block{box-shadow:0 0 0 transparent;transition-property:box-shadow;transition-duration:.15s}.fl-builder-blocks-section-content .fl-builder-block i,.fl-user-template-actions i{color:#000;margin-right:10px}.fl-builder-blocks-separator{background:#f1f1f1;height:6px}.fl-builder-block:hover .fl-builder-badge{background:#2ea2cc}.ui-sortable-helper .fl-builder-badge{display:none!important}.fl-builder-modules-cta a{color:#999!important;display:block!important;font-size:12px!important;font-style:italic!important;padding:15px 20px!important;line-height:16px!important}.fl-builder-modules-cta a:hover{background:#e5e5e5!important;color:#666!important;text-decoration:none!important}.fl-builder-modules-cta a:focus{text-decoration:none!important}.fl-builder-modules-cta .fa{float:right!important;font-size:14px!important;margin:3px 0 0 9px!important}.fl-builder--panel-message{text-align:center;padding:40px 20px;font-size:16px}.fl-builder--panel-message .fl-builder-button{display:inline-block;padding:10px}.fl-builder--panel-cta{padding:20px 30px;font-size:16px;text-align:center}.fl-builder--panel-cta a{color:inherit;text-decoration:none}.fl-builder--panel-cta a:hover{text-decoration:none}.fl-builder-block-template-image{margin:5px 0 10px;max-width:100%;border:1px solid #dfdfdf}.fl-builder-block .fl-builder-block-title{overflow:hidden;text-overflow:ellipsis;vertical-align:middle;line-height:1.3}.ui-sortable-helper .fl-builder-block-template-image{display:none!important}@keyframes fl-builder-template-item-enter{from{transform:translateY(100px) scale(.3);opacity:0}to{transform:scale(1);opacity:1}}.fl-builder--template-collection{clear:both;padding:10px 0}.fl-builder--template-collection-section-content{padding:0 10px}.fl-builder--template-collection-item{box-sizing:border-box;width:50%;float:left;padding:10px;cursor:pointer;font-size:13px;transform-origin:center;opacity:1}.fl-builder--template-thumbnail{background-size:cover;background-clip:content-box;background-position:center top;background-color:#fff;border:2px solid transparent;transform-origin:bottom;transition-property:transform,box-shadow;transition-duration:.15s}.fl-builder--template-collection-item[data-id="0"] .fl-builder--template-thumbnail,.fl-user-template .fl-builder--template-thumbnail{border-color:#e4e7ea}.fl-builder--template-thumbnail:before{display:block;content:"";padding-top:120%}.fl-builder--template-thumbnail:hover{transform:scale(1.05);box-shadow:0 20px 40px rgba(0,0,0,.08)}.fl-builder--template-name{text-align:center;padding:4px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fl-builder--template-collection-section{padding-bottom:10px;border-bottom:1px solid #dfdfdf}.fl-builder--template-collection-section:last-child{border-bottom:none}.fl-builder--template-collection-section:after,.fl-builder--template-collection-section:before{content:"";display:block;clear:both}.fl-builder--template-collection-section-name{padding:15px 10px 10px}span.fl-builder-block-no-node-templates{display:block;padding:15px 20px;text-align:center}span.fl-builder-block-no-node-templates:hover{cursor:default}.fl-builder-blocks-section-content .fl-builder-node-template-actions{bottom:0;cursor:default;display:none;position:absolute;right:0;top:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete,.fl-builder-blocks-section-content .fl-builder-node-template-edit{display:inline;cursor:pointer;margin:0;padding:15px 10px;text-align:center;width:30px}.fl-builder-block-details .fl-builder-node-template-delete,.fl-builder-block-details .fl-builder-node-template-edit{padding-top:0!important}.fl-builder-blocks-section-content .fl-builder-node-template-delete i,.fl-builder-blocks-section-content .fl-builder-node-template-edit i{margin:0}.fl-builder-blocks-section-content .fl-builder-node-template-delete:hover i,.fl-builder-blocks-section-content .fl-builder-node-template-edit:hover i{color:#444}.fl-builder-blocks-node-template .fl-builder-block:hover .fl-builder-node-template-actions{display:block}.ui-sortable-helper .fl-builder-node-template-delete,.ui-sortable-helper .fl-builder-node-template-edit{display:none!important}.fl-builder--tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:start;justify-content:flex-start;-ms-flex-align:center;align-items:center}.fl-builder-panel .fl-builder--panel-header{cursor:move}.fl-builder-panel .fl-builder--tabs{-ms-flex-pack:distribute;justify-content:space-around;padding:4px 24px;cursor:pointer}.fl-builder--tab-wrap{-ms-flex:1 1 100%;flex:1 1 100%;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;margin:auto;max-width:400px}.fl-builder--tabs button,.fl-builder--tabs button:active,.fl-builder--tabs button:focus,.fl-builder--tabs button:hover{-ms-flex:1 1 100%;flex:1 1 100%;display:inline-block;text-decoration:none;text-transform:none;color:inherit;text-align:center;letter-spacing:normal!important;margin:0;padding:5px;cursor:pointer;font-size:13px!important;font-weight:500!important;line-height:1.3!important;background:0 0!important;outline:0!important;border:2px solid transparent;border-radius:4px;min-height:36px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important;top:0;transition-property:background,color;transition-duration:.25s}.fl-builder--tabs button:focus{background:#e6eaed!important}.fl-builder--tabs button.is-showing{color:#0086b0}.fl-builder--panel-content{-ms-flex:1;flex:1}.fl-builder--panel-view{display:none;overflow:hidden}.fl-builder--panel-view.is-showing{display:block}.fl-builder--content-library-panel.ui-draggable-dragging{height:500px!important}.fl-builder--content-library-panel .fl-builder-drop-zone{display:none!important}.fl-builder--panel-header .fl-builder--tabs{cursor:move}.fl-builder--category-select{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;position:relative}.fl-builder--selector-display{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;position:relative;-ms-flex-pack:justify;justify-content:space-between;color:#161B20;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;cursor:pointer;font-size:13px;font-weight:700;line-height:16px;border-radius:4px;-ms-flex-align:stretch;align-items:stretch}.fl-builder--selector-display-label{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;font-size:inherit;line-height:inherit;width:100%;margin:0!important;padding:0!important;color:#6D6D6D;background:0 0;border:2px solid transparent;box-shadow:0 1px 2px 0 rgba(0,0,0,.12)!important;border-radius:4px;font-family:inherit;text-transform:none}.fl-builder--selector-display-label:hover{top:0;color:inherit;background:0 0;border:2px solid transparent;border-radius:4px}.fl-builder--selector-display-label:active{top:0;color:inherit;background:0 0;border:2px solid #e4e7ea;border-radius:4px}.fl-builder--selector-display-label:focus{top:0;color:inherit;background:0 0;border:2px solid #00A0D2;outline:0}.fl-builder--group-label{color:inherit;-ms-flex:0 0 0%;flex:0 0 0%;padding:4px 12px 4px 10px;background:#e7ebef;border-radius:3px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-builder--current-view-name{-ms-flex:1 1 100%;flex:1 1 100%;color:inherit;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;padding:8px 10px;text-align:left}.fl-builder--selector-menu{display:none;color:#293138;position:absolute;top:46px;left:0;width:100%;background:#fff;border-radius:4px;box-shadow:0 0 20px 2px rgba(0,0,0,.2);overflow:visible;z-index:2}.fl-builder--selector-menu:before{bottom:100%;right:8px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:10px;margin-left:-10px}.fl-builder--category-select.is-showing .fl-builder--selector-menu{display:-ms-flexbox;display:flex;max-height:calc(100vh - 150px)}.fl-builder--category-select.is-showing .fl-builder--selector-menu .fl-builder--menu{margin:10px 0;-ms-flex:1 100%;flex:1 100%;overflow:auto}button.fl-builder-button.fl-builder-bar-title-caret{margin:4px}button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#e6eaed!important;border-color:transparent!important}.fl-builder--category-select.is-showing .fl-builder-bar-title-caret i{transform:rotate(180deg)}.fl-builder--menu{margin-bottom:2px}.fl-builder--menu>a,.fl-builder--menu>button,.fl-builder--menu>span{display:block;padding:8px 10px 10px;border-radius:4px;color:inherit;text-decoration:none;background:0 0!important;border:2px solid transparent!important;font-weight:400;font-family:inherit}.fl-builder--menu>a:active,.fl-builder--menu>a:focus,.fl-builder--menu>a:hover,.fl-builder--menu>button:active,.fl-builder--menu>button:focus,.fl-builder--menu>button:hover{background:#e6eaed!important;border:2px solid transparent!important;top:0}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging,.fl-builder-drop-zone,.fl-builder-empty{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder--menu>a:focus,.fl-builder--menu>button:focus{outline:0;color:inherit;text-decoration:none}.fl-builder--menu .fl-has-children>svg{float:right;margin:0 7px 0 0;height:16px;width:9px;transition-property:transform;transition-duration:.15s;transform:rotate(-90deg)}.fl-builder--menu .fl-has-children.fl-has-children-showing>svg{transform:rotate(0)}.fl-builder--menu .fl-inset{display:none;padding-left:35px;font-size:14px;line-height:1.25}.fl-builder--menu a.fl-template-collection{color:#161B20}.fl-builder--menu>:after{clear:both}.fl-builder--menu * .fl-builder--menu-item-accessory{float:right;color:#000;text-transform:uppercase;text-align:center;min-width:20px;letter-spacing:2px}.fl-builder--menu * .fl-builder--menu-item-accessory i{font-size:1em;margin-top:2px}.fl-builder--menu .fl-builder-video-wrap iframe{display:block;margin:4px 0;width:100%}.fl-builder-publish-actions{display:-ms-flexbox;display:flex;box-sizing:border-box;position:absolute;top:0;right:0;width:380px;max-width:100%;height:44px;padding:4px 4px 4px 0;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:end;justify-content:flex-end;opacity:1;pointer-events:auto;transform:scaleX(1) translateX(0);transform-origin:right;transition-property:transform,opacity;transition-duration:.15s}.fl-builder-publish-actions.is-hidden{transform:scaleX(.23) translateX(68px);opacity:0;pointer-events:none}.fl-builder-bar .fl-builder-button-group{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%}.fl-builder-bar .fl-builder-button-group>.fl-builder-button{border-radius:0;margin-left:0;-ms-flex-preferred-size:100%;flex-basis:100%;text-align:center;-ms-flex-pack:distribute;justify-content:space-around;box-shadow:none}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:first-child{margin-left:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-builder-bar .fl-builder-button-group>.fl-builder-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-builder-publish-actions-click-away-mask{display:none;position:fixed;top:0;left:0;right:0;height:100vh;background:0 0}.fl-builder-dragging .fl-builder-content:not(.fl-builder-empty){padding:16px 0}.fl-builder-empty{display:none;border:2px dashed #969696;border-radius:8px;color:#909090;font-size:20px;font-weight:700;margin:10px;padding:250px 20px;position:relative;text-align:center;text-transform:uppercase}.fl-builder-drop-zone,.fl-builder-has-submenu>ul.fl-builder-submenu li a{font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fl-builder-edit .fl-builder-empty{display:block}.fl-builder-block-drag-helper,.fl-builder-block.ui-draggable-dragging{background:rgba(255,255,255,.95)!important;border:2px solid #000;border-radius:4px;box-shadow:0 0 8px rgba(0,0,0,.2);-moz-box-shadow:0 0 8px rgba(0,0,0,.2);-webkit-box-shadow:0 0 8px rgba(0,0,0,.2);color:#333!important;font-size:13px!important;height:47px!important;line-height:40px!important;overflow:hidden;padding:0 20px;position:fixed!important;text-overflow:ellipsis;white-space:nowrap;width:180px!important;z-index:100010!important;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-line-pack:center;align-content:center;-ms-flex-pack:start;justify-content:flex-start}.fl-builder-block.fl-builder-block-drag-helper:hover{padding:0;box-shadow:none}.fl-builder-block-drag-helper:hover .fl-builder-block-content{position:static;padding:0 20px}.fl-col-has-highlight-guide .fl-col-content,.fl-col-highlight,.fl-row-highlight .fl-col-group{position:relative}.fl-builder-block-saved-column.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-module.fl-builder-block-drag-helper:hover .fl-builder-block-content,.fl-builder-block-saved-row.fl-builder-block-drag-helper:hover .fl-builder-block-content{padding:14px 20px}.fl-builder-block-drag-helper .fl-builder-block-icon{fill:#000;margin-top:-10px}.fl-builder-drop-zone{animation:fl-builder-drop-zone-pulse 2s infinite;background:#00A2D7;border-radius:4px;color:#fff!important;display:block;font-size:12px;letter-spacing:1px;line-height:14px;margin:10px;padding:6px 8px 5px;position:relative;text-align:left;text-shadow:none;text-transform:none;z-index:10}@keyframes fl-builder-drop-zone-pulse{0%,100%{background-color:#00A2D7}50%{background-color:#79DEFF}}.fl-builder-drop-zone-global{animation:fl-builder-drop-zone-global-pulse 2s infinite;background:#ff9600}@keyframes fl-builder-drop-zone-global-pulse{0%,100%{background-color:#FFBC5C}50%{background-color:#ff9600}}.fl-builder-content>.fl-builder-drop-zone{margin:10px 20px}.fl-row-content>.fl-builder-drop-zone{margin:3px 7px}.fl-col-has-cols>.fl-col-content>.fl-builder-drop-zone{margin:3px 10px}.fl-sortable-disabled>.fl-builder-drop-zone{display:none!important}.fl-col-group-equal-height.fl-col-group-align-center .fl-col-content>.fl-builder-drop-zone{width:100%}.fl-row-highlight{padding:16px 0}.fl-row-highlight .fl-row-content{border:2px dashed rgba(203,205,206,.5);padding:8px;border-radius:6px}.fl-row-highlight.fl-node-global .fl-row-content{border-color:#ff9600}.fl-col-highlight{padding:8px}.fl-col-highlight .fl-col-content{border-style:dashed!important;border-color:#00a0d2!important;border-radius:4px;min-height:100px;overflow-x:hidden;border-width:2px!important}.fl-col-has-cols.fl-col-highlight>.fl-col-content{padding:8px}.fl-col-highlight.fl-node-global .fl-col-content{border-color:#ff9600!important}.fl-builder-simple .fl-col-highlight .fl-col-content{border:none!important}.fl-col-highlight-guide{background:rgba(0,160,210,.05);border:2px solid #00A0D2;border-radius:4px;bottom:4px;left:4px;position:absolute;right:4px;top:4px;z-index:1}.fl-node-global .fl-col-highlight-guide{border-color:#ff9600!important;background-color:rgba(255,150,0,.06)!important}.fl-col-has-highlight-guide .fl-block-overlay{background:0 0;border-color:transparent}.fl-col-has-highlight-guide .fl-block-col-resize{display:none}.fl-col-has-highlight-guide .fl-col-highlight .fl-col-content{border-color:transparent!important}.fl-col-drop-target{bottom:8px;display:none;left:-9px;position:absolute;top:8px;width:18px;z-index:1}.fl-col-highlight .fl-col-drop-target{display:block}.fl-col-drop-target-last{left:auto;right:-9px}.fl-col-drop-target .fl-builder-drop-zone{bottom:0;left:2px;margin:0;padding:0;position:absolute;right:2px;top:0}.fl-col-group-drop-target{display:none;left:8px;height:18px;position:absolute;right:8px;top:-9px;z-index:1}.fl-row-highlight .fl-col-group-drop-target{display:block}.fl-col-group-drop-target-last{top:auto;bottom:-9px}.fl-col-group-drop-target .fl-builder-drop-zone{bottom:2px;left:0;margin:0;padding:0;position:absolute;right:0;top:2px}.fl-row-content>.fl-col-group-drop-target{position:static}.fl-row-content>.fl-col-group-drop-target .fl-builder-drop-zone{height:18px;position:static}.fl-row-drop-target{display:none;left:0;height:24px;margin-top:-28px;position:absolute;right:0;z-index:1}.fl-row-highlight .fl-row-drop-target{display:block}.fl-row-drop-target-last{margin-top:4px}.fl-row .fl-row-drop-target .fl-builder-drop-zone{bottom:0;left:4px;margin:0;position:absolute;right:4px;top:0}.fl-builder-content>.fl-row-drop-target{margin:0;position:static}.fl-builder-dragging .fl-builder-content.fl-builder-empty>.fl-row-drop-target{bottom:10px;display:block;height:auto;left:0;position:absolute;right:0;top:10px}.fl-builder-content .fl-row-drop-target .fl-builder-drop-zone{margin-bottom:0;margin-top:0}.fl-col-group:focus,.fl-col:focus,.fl-module:focus,.fl-row:focus{outline:0}.fl-sortable-proxy{display:none}.fl-block-overlay,.fl-block-overlay *{text-shadow:none;-webkit-touch-callout:none;transition-property:border-color;transition-duration:.3s}.fl-block-overlay-active{position:relative}.fl-block-overlay-actions{background:#00A0D2;float:left;height:30px;margin:-1px -1px 0;padding:0 4px;text-shadow:none;border-bottom-right-radius:5px;border-top-left-radius:3px;transition-property:background-color;transition-duration:.3s}.fl-row-overlay-header-bottom .fl-block-overlay-actions{border-radius:0 5px 0 3px}.fl-builder-col-resizing .fl-block-overlay-actions,.fl-builder-row-resizing .fl-block-overlay-actions{overflow:hidden}.fl-block-overlay-actions>span{display:block;float:left}.fl-block-overlay-actions i{color:#fff!important;cursor:pointer;display:block!important;float:left;font-size:16px!important;height:28px!important;line-height:28px!important;opacity:.8;filter:alpha(opacity=80);text-align:center;width:32px!important}.fl-block-overlay-actions i:hover{opacity:1;filter:alpha(opacity=100)}.fl-block-overlay-actions>i:first-child{padding-left:4px}.fl-block-overlay-actions>i:last-child{padding-right:2px}.fl-block-overlay-actions .fl-block-move{cursor:move}.fl-block-has-rules{color:#00A0D2!important;cursor:pointer;padding:7px;position:absolute;right:0;top:0}.fl-block-overlay-title,.fl-builder-has-submenu>ul.fl-builder-submenu li a{color:#fff!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-block-overlay-title{float:left;font-size:14px;height:30px;line-height:29px;margin-right:2px;padding:0 12px 0 8px}.fl-col-overlay,.fl-module-overlay,.fl-row-overlay{background:rgba(190,239,255,0);color:#fff}.fl-row-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:0;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;left:0;position:absolute;top:-33px;right:0;z-index:100006}.fl-row-overlay.fl-row-menu-active,.fl-row-overlay.fl-row-menu-active.fl-block-overlay.fl-block-overlay-global{z-index:100007}.fl-row-full-width .fl-row-overlay{left:2px;right:2px;bottom:2px}.fl-row-overlay-header-bottom{bottom:-32px!important;top:0}.fl-row-overlay-header-bottom .fl-block-overlay-header{position:absolute;bottom:0}.fl-block-overlay-active .fl-row-content-wrap{position:relative}.fl-block-overlay-active .fl-row-content{position:relative;z-index:100007!important}.fl-builder-row-resizing .fl-col.fl-block-overlay-active,.fl-builder-row-resizing .fl-module.fl-block-overlay-active{position:static}.fl-col-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:8px;cursor:pointer;left:8px;position:absolute;right:8px;top:8px;z-index:100008}.fl-module-overlay{border:2px solid #00A0D2;border-radius:4px;bottom:4px;cursor:pointer;left:4px;min-height:32px;position:absolute;right:4px;top:4px;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-module-overlay{cursor:default}.fl-module-adjust-height{padding-bottom:15px;padding-top:15px}.fl-col-bg-overlay .fl-block-overlay-active.fl-module{z-index:100008}.fl-block-overlay-global{background:rgba(255,150,0,0);border:2px solid #F7A407;border-radius:4px}.fl-block-overlay-global .fl-block-overlay-actions{background:#F7A407}.fl-block-overlay-title-global{background:#fff;color:#ff9600!important;font-size:11px;letter-spacing:1px;margin-left:4px;padding:2px 4px;vertical-align:top}.fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:pointer;z-index:100007}.fl-builder-global-templates-locked .fl-block-overlay-global.fl-row-overlay{cursor:default}.fl-builder-row-template .fl-block-overlay-global.fl-row-overlay{background:rgba(255,150,0,0);cursor:default;z-index:100006}.fl-block-overlay-global.fl-row-overlay .fl-block-col-resize{display:none}.fl-block-overlay-muted .fl-row-overlay{background:rgba(85,93,102,0);border:2px solid #555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-overlay-actions{background:#555D66}.fl-block-overlay-muted .fl-row-overlay .fl-block-has-rules{color:#555D66!important}.fl-block-overlay-muted .fl-row-overlay .fl-block-col-resize{display:none}.fl-node-disabled .fl-row-content-wrap,.fl-node-disabled>.fl-col-content{opacity:.3}.fl-block-col-resize{bottom:0!important;position:absolute;top:0!important;width:6px}.fl-block-col-resize-e{cursor:ew-resize;left:auto!important;right:-2px!important}.fl-block-col-resize-w{cursor:ew-resize;left:-7px!important}.fl-block-col-resize-handle-wrap{margin:-4px 0 0 -5px;padding:0 5px;position:absolute;top:50%!important}.fl-block-col-resize-e .fl-block-col-resize-handle-wrap{margin-left:-6px}.fl-block-col-resize-handle{background:#fff;border:2px solid #00A0D2;border-radius:50%;height:12px;width:12px}.fl-node-global .fl-block-col-resize-handle{border-color:#ff9600}.fl-block-col-resize-feedback{color:#333!important;display:none;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:11px!important;position:absolute}.fl-block-col-resize-feedback-left,.fl-block-col-resize-feedback-right{background:#fff;border:1px solid #3ba0ff;padding:2px 4px}.fl-block-col-resize-feedback-left{right:20px;top:-7px}.fl-block-col-resize-feedback-right{left:20px;top:-7px}.fl-builder-has-submenu{position:relative}.fl-builder-has-submenu>ul.fl-builder-submenu{background:#00A0D2;box-shadow:0 0 20px rgba(0,0,0,.2);border-radius:0 4px 4px;display:none;left:0;list-style:none;margin:0;padding:6px 0;position:absolute;text-align:left;top:100%;width:165px;z-index:100008}.fl-builder-has-submenu>ul.fl-builder-submenu li{list-style:none;margin:0;padding:0}.fl-builder-submenu-right ul.fl-builder-submenu{left:auto;right:0}.fl-builder-has-submenu.fl-builder-submenu-open>ul.fl-builder-submenu{display:block}.fl-builder-has-submenu>ul.fl-builder-submenu li a{border-bottom:0 none;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;display:block;line-height:13px;font-size:13px;opacity:.8;filter:alpha(opacity=80);padding:6px 12px;text-decoration:none}.fl-builder-has-submenu>ul.fl-builder-submenu li a:hover{background:#0197C6;color:#fff;opacity:1;filter:alpha(opacity=100);text-decoration:none}.fl-builder-actions-title,.fl-builder-alert-lightbox .fl-lightbox-message{color:#333!important;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px!important}.fl-builder-has-submenu .fl-builder-submenu .fa,.fl-builder-has-submenu .fl-builder-submenu .far,.fl-builder-has-submenu .fl-builder-submenu .fas{float:right;height:12px!important;line-height:12px!important;position:relative;right:-5px;width:14px!important}.fl-builder-has-submenu .fl-builder-has-submenu .fl-builder-submenu{display:none;left:100%;top:0}.fl-builder-has-submenu .fl-builder-submenu-right.fl-builder-has-submenu .fl-builder-submenu{left:auto;right:100%}.fl-builder-has-submenu .fl-builder-has-submenu:hover .fl-builder-submenu{display:block}.fl-builder-submenu-sep{padding:7px 0!important}.fl-builder-submenu-sep div{border-bottom:1px solid rgba(255,255,255,.4)}.fl-block-col-move,.fl-block-col-move-parent{cursor:move;position:relative}.fl-builder-submenu .fa-arrows-alt{cursor:move;display:none!important}.fl-builder-submenu a:hover .fa-arrows-alt{display:block!important;float:right;line-height:12px!important;height:12px!important}.fl-block-overlay-global ul.fl-builder-submenu{background:#ff9600!important}.fl-block-overlay-global ul.fl-builder-submenu li a:hover{background:#fa3}.fl-builder-actions-lightbox .fl-lightbox{display:block;width:300px;border-radius:4px}.fl-builder-actions-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-actions-lightbox .fl-builder-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:25px;text-align:center}.fl-builder-actions-title{display:block;margin-bottom:20px}.fl-builder-actions .fl-builder-button{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:7px;min-height:36px}.fl-builder-alert-lightbox{padding:20px;z-index:30000000;top:0;pointer-events:auto}.fl-builder-alert-lightbox .fl-lightbox{max-width:440px;width:auto}.fl-lightbox-width-slim .fl-compound-field,.fl-lightbox-width-slim .fl-dimension-field-units{max-width:none}.fl-builder-alert-lightbox .fl-lightbox-content-wrap{display:block}.fl-builder-alert-lightbox .fl-lightbox-message{line-height:24px;padding:30px}@keyframes fl-builder-content-section-entry{from{transform:translateY(150px) translateX(100px) scale(.3);opacity:0}to{transform:translateY(0) translateX(0) scale(1);opacity:1}}.fl-template-category-select{width:180px!important}.fl-template-selector .fl-builder-settings-section{margin:0 0 10px}.fl-template-selector .fl-builder-settings-fields{height:470px}.fl-template-selector .fl-builder-settings-tab{width:560px}.fl-template-selector .fl-builder-settings-tab-description{font-size:15px!important;margin:0!important;padding:10px 0 25px;text-align:center}.fl-template-preview{float:left;margin:0 25px 30px 0;position:relative;text-align:center;width:170px}.fl-template-preview.fl-last{margin-right:0}.fl-template-image{border:1px solid #d9d9d9;cursor:pointer;margin-bottom:12px;height:164px;overflow:hidden}.fl-template-image:hover{border-color:red}.fl-template-image img{max-height:none;width:100%}.fl-template-preview span{display:block;text-align:center}.fl-user-template-category-name{background:#f2f2f2;border-bottom:3px solid #dfdfdf;border-top:2px solid #dfdfdf;font-weight:700;padding:8px 15px}.fl-user-templates{border-bottom:1px solid #dfdfdf;padding:10px 0 20px}.fl-builder--user-templates-section-content{border-bottom:2px solid #e6eaed;padding:10px}.fl-builder--user-templates-section-content:first-child{padding-top:0}.fl-builder--user-templates-section-content:last-child,.fl-user-templates:last-child{border-bottom:none}.fl-builder--user-templates-section-name{font-weight:700;font-size:16px;color:#333;z-index:9999;padding:15px 10px;margin:0 10px}@keyframes fl-list-item-entry{from{opacity:0;transform:scale(.5) translateY(100px)}to{opacity:1;transform:scale(1) translateY(0)}}.fl-builder--save-new-user-template,.fl-user-template{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:4px;font-size:16px;font-weight:200;line-height:1.1;padding:10px 20px;color:#6d6d6d}.fl-user-template:hover{cursor:pointer;background:#fff;box-shadow:0 6px 20px rgba(0,0,0,.08);text-decoration:none;color:#111;padding-right:68px}.fl-user-template-name{overflow:hidden;text-overflow:ellipsis;-ms-flex:1;flex:1}.fl-user-template-actions{display:none;bottom:0;position:absolute;right:0;top:0}.fl-user-template:hover .fl-user-template-actions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center}.fl-user-template-actions a{display:inline-block;padding:15px 0;width:30px}.fl-user-template:hover a:hover i{color:#444!important}.fl-user-templates-message{display:none}.fl-user-template-thumbnail{-ms-flex:0;flex:0;margin-right:20px}.fl-user-template-thumbnail .fl-builder--template-thumbnail{background-size:cover;background-position:center top;width:45px}.fl-user-template-thumbnail .fl-builder--template-thumbnail:hover{box-shadow:none;transform:scale(1);transition-property:none}.fl-builder--save-new-user-template .fl-user-template-thumbnail .fl-builder--template-thumbnail{border-style:dashed;border-width:2px;border-color:#ccd4da}.fl-builder--save-new-user-template .fl-save-control{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex:1;flex:1}.fl-builder--save-new-user-template .fl-save-control input{background:0 0;border:none!important;-ms-flex:1;flex:1;font-size:16px;margin-right:10px;margin-left:-12px;color:#000}.fl-builder--save-new-user-template .fl-save-control input::-webkit-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input::-moz-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-ms-input-placeholder{color:#777}.fl-builder--save-new-user-template .fl-save-control input:-moz-placeholder{color:#777}@keyframes fl-slide-in-right{from{transform:translateX(50px)}to{transform:translateX(0)}}.fl-builder--save-new-user-template .fl-save-control button{display:none;animation-name:fl-slide-in-right;animation-duration:.25s;background-color:#00a0d2;border:none;padding:0 15px}.fl-save-control-mask{display:none;background:0 0;position:absolute;top:-50px;left:0;bottom:0;right:0;z-index:-1;min-height:80vh}.fl-builder-templates-cta{margin-bottom:20px}.fl-builder-templates-cta p{display:inline-block!important;width:75%!important;font-size:14px!important;line-height:1.5!important;margin-bottom:0!important}.fl-builder-templates-cta .fl-builder-upgrade-button{font-size:13px!important;line-height:13px!important;position:relative;top:8px;left:15px;padding:1px 12px}.fl-builder-settings-message,.fl-builder-settings-message *{font-size:15px!important;line-height:23px!important}.single-fl-builder-template .fl-content{width:100%!important}form.fl-builder-settings{height:100%;margin:0;padding:0;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fl-builder-settings-message{padding:20px 25px!important;background:#f2f2f2!important}.fl-builder-preview-loader{position:relative;top:-2px;margin-left:3px}.fl-lightbox-header .fl-builder-preview-loader{margin:0;position:absolute;right:40px;top:15px}@keyframes fl-grab-attention{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.fl-lightbox-width-slim .fl-form-table{margin:10px 12px 10px 10px!important;width:calc(100% - 40px)}.fl-lightbox-width-slim .fl-form-table th{display:block;position:relative;padding:10px 0 0 12px!important;width:auto!important}.fl-lightbox-width-slim .fl-form-table td{display:block}.fl-lightbox-width-slim .fl-form-table .fl-field[data-type=editor] td:first-child,.fl-lightbox-width-slim .fl-form-table td:first-child{padding-left:0!important}.fl-field-label .fl-field-responsive-toggle,.fl-lightbox-width-slim .fl-field-control-wrapper .fl-field-responsive-toggle{display:none}.fl-lightbox-width-slim .fl-field-label .fl-field-responsive-toggle{display:inline-block;padding:0 5px!important}.fl-lightbox-width-slim input.text-full+.fl-field-description,.fl-lightbox-width-slim select+.fl-field-description{display:block;padding:8px 10px;margin:0}.fl-lightbox-width-slim .fl-builder-settings-fields select{width:100%}.fl-lightbox-width-slim .fl-color-picker{display:-ms-flexbox;display:flex;width:auto}.fl-lightbox-width-slim .fl-color-picker-clear{-ms-flex:0 0 40px;flex:0 0 40px}.fl-lightbox-width-slim .fl-field[data-type=dimension] .fl-field-responsive-setting{width:100%}.fl-lightbox-width-slim .fl-dimension-field-unit-select select{width:auto!important}.fl-lightbox-width-slim .fl-gradient-picker-color-row{width:50%}.fl-lightbox-width-slim .fl-color-picker.fl-gradient-picker-color,.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-option{width:100%}.fl-lightbox-width-slim .fl-typography-field-align .fl-button-group-field-options{float:none}.fl-lightbox-width-slim .mce-menubtn.mce-fixed-width button{width:72px!important}.fl-lightbox-width-slim .fl-builder-settings-tab-description{margin:20px 10px}.fl-lightbox-width-micro .mce-menubtn.mce-fixed-width button{width:38px!important}.fl-lightbox-width-micro .mce-btn[aria-label=Fullscreen],.fl-lightbox-width-micro .mce-btn[aria-label=Blockquote]{display:none}.fl-lightbox-width-micro .mce-toolbar i.mce-ico{width:18px}.fl-lightbox-width-slim .fl-field[data-type=editor] .fl-field-control-wrapper,.fl-lightbox-width-slim .fl-field[data-type=code] .fl-field-control-wrapper{margin-left:-10px;margin-right:-30px}.fl-lightbox .wp-editor-tools{padding-left:6px;padding-right:28px}.fl-lightbox .mce-top-part::before{box-shadow:none!important}.mce-container .mce-stack-layout span{color:initial}.fl-lightbox div.mce-toolbar-grp{background:0 0;border:none}.fl-lightbox div.mce-toolbar-grp>div{padding:0 3px}.fl-lightbox .fl-builder-settings .wp-switch-editor{background:#e7ebef;border:1px solid transparent}.fl-lightbox .html-active .switch-html,.fl-lightbox .quicktags-toolbar,.fl-lightbox .tmce-active .switch-tmce{background:#fff}.fl-lightbox .quicktags-toolbar,.fl-lightbox .wp-editor-container{border:none}.fl-lightbox .mce-toolbar .mce-container-body{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-lightbox-width-slim .mce-toolbar .mce-container-body{-ms-flex-pack:center;justify-content:center}.fl-lightbox textarea.wp-editor-area{line-height:1.5;padding:20px;width:calc(100% - 10px)}.fl-lightbox .wp-core-ui .button,.fl-lightbox .wp-core-ui .button-secondary{border:none;box-shadow:none;background:#e7ebef}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units{width:auto}.fl-lightbox-width-slim .fl-shadow-field .fl-dimension-field-units input{max-width:none;width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-control,.fl-lightbox-width-slim .fl-builder-field-multiple .fl-field-label{width:100%!important}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-form-field-preview-text{max-width:225px}.fl-lightbox-width-slim .fl-builder-field-multiple .fl-builder-field-actions{position:absolute!important;top:0;right:0;width:70px;z-index:1}.fl-lightbox-width-slim .fl-builder-field-actions-single .fl-builder-field-copy{float:right!important;margin-right:5px}.fl-lightbox-width-slim .fl-field[data-type=time] select{width:auto}.fl-builder-settings-tabs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:stretch;align-items:stretch;overflow:hidden;height:32px;background:#e7ebef}.fl-builder-content-group-select{padding:0 10px 6px;display:none}.fl-builder-content-group-select select{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;padding:8px 10px;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important;border:2px solid #e4e7ea;color:#161B20}select:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;outline:0!important}.fl-legacy-settings-tab{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings-tab:first-child .fl-legacy-settings-tab{background:0 0;height:auto}body .fl-builder-settings-tabs>*{box-sizing:border-box;color:#676F7A!important;fill:#676F7A!important;background:0 0;border:2px solid transparent;border-radius:0;margin:0;outline:0;padding:1px 16px;text-decoration:none!important;font-size:13px;font-weight:400!important;-ms-flex:0 0 auto;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}body .fl-lightbox-width-slim .fl-builder-settings-tabs>*{-ms-flex:1 1 auto;flex:1 1 auto}body .fl-builder-settings-tabs>.fl-builder-settings-tabs-more{-ms-flex:0 0 60px;flex:0 0 60px;display:none;margin-left:auto;-ms-flex-pack:center;justify-content:center}.fl-builder-settings-tabs-more svg{width:16px;height:auto;margin:auto}.fl-builder-settings-tabs-more g,.fl-builder-settings-tabs-more path,.fl-builder-settings-tabs-more svg{fill:inherit}body .fl-lightbox-has-tab-overflow .fl-builder-settings-tabs-more{display:-ms-flexbox;display:flex}.fl-builder-settings-tabs>:active,.fl-builder-settings-tabs>:hover{top:0;color:#333;background:0 0;border:2px solid transparent}.fl-builder-settings-tabs>:focus{top:0;outline:0;border:2px solid transparent;background:0 0;color:#0086b0;fill:#0086b0}.fl-builder-settings-tabs .fl-active,.fl-builder-settings-tabs-more.fl-contains-active,.fl-builder-settings-tabs-overflow-menu .fl-active{color:#0086b0!important;fill:#0086b0!important;position:relative;background:#fff}.fl-builder-settings-tabs .fl-active.fl-overflowed,.fl-builder-settings-tabs .fl-overflowed{display:none!important}.fl-builder-settings-tabs .error{color:#d03436;padding-right:10px}.fl-builder-settings-tabs .error .fl-error-icon,.fl-builder-settings-tabs-overflow-menu .error .fl-error-icon{background:url(../img/sprite.png) -148px -5px no-repeat;display:inline-block;height:16px;margin-left:7px;position:relative;top:3px;width:16px}.fl-builder-settings-tabs-more.fl-contains-errors{fill:#d03436!important}.fl-builder-settings-tab{display:none;width:auto!important}.fl-builder-settings-tab.fl-active{display:block}.fl-builder-settings-tab-description{background:#e4e7ea;padding:10px 15px;border-radius:4px;margin:20px}.fl-builder-settings-tab-description a{text-decoration:underline!important}.fl-builder-settings-tab-description a:hover{color:#333}.fl-builder-settings-tabs-overflow-menu{display:none;position:absolute;left:0;right:0;border:2px solid #e6eaed;border-top:3px solid #00a0d2;border-radius:4px;background:#fff;z-index:9999;margin:0 6px;padding:10px;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 20px 2px rgba(0,0,0,.2)}.fl-builder-settings-tabs-overflow-menu:before{bottom:100%;right:20px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:10px;margin-left:-10px}.fl-builder-settings-tabs-overflow-menu>a{display:block;padding:10px 15px;font-size:14px;font-weight:600!important;border:2px solid transparent;border-radius:4px;outline:0}.fl-builder-settings-tabs-overflow-menu>a:hover{background:#e6eaed;text-decoration:none}.fl-builder-settings-tabs-overflow-click-mask{display:none;position:fixed;top:0;bottom:0;left:0;right:0;background:0 0;z-index:11}.fl-form-table{background:none;border:none;width:calc(100% - 35px)}.fl-form-table tbody{border:none}.fl-form-table tr,.fl-form-table tr:nth-child(even){background:0 0}.fl-form-table td,.fl-form-table th{background:0 0!important;border:none!important;font-weight:400!important;text-align:left!important}.fl-form-table th{padding:10px 15px 10px 30px!important;vertical-align:top!important;width:200px!important}.fl-form-table td:first-child{padding-left:30px!important}.fl-form-table th label{color:#333;width:auto;max-width:100%}.fl-form-table th label i{color:grey}.fl-form-table th label i:hover{color:#555}.fl-form-table td{padding:8px 10px}.fl-lightbox-width-slim .fl-form-table td{padding:4px 0 5px}.fl-builder-settings-fields{margin:0;overflow:hidden;position:relative;-ms-flex:1 100%;flex:1 100%;visibility:hidden}.fl-lightbox-header .fl-builder-settings-fields{height:auto;margin:0;position:absolute;right:10px;top:10px}.fl-builder-settings-fields .fl-nanoscroller-content{padding:4px 0 0}.fl-builder-settings-fields .fl-field-control-wrapper{position:relative}.fl-field{animation-duration:.25s;animation-delay:.1s}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select,.fl-builder-settings-fields textarea{background:#fff!important;border-color:transparent!important;border-style:solid;border-width:2px;border-radius:4px!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);color:#333!important;display:inline;font-size:13px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px 6px;width:auto;box-sizing:border-box}i.fl-dimension-field-link,i.fl-field-responsive-toggle{line-height:18px!important;cursor:pointer;vertical-align:middle}.fl-builder-settings-fields input[type=date],.fl-builder-settings-fields input[type=email],.fl-builder-settings-fields input[type=file],.fl-builder-settings-fields input[type=number],.fl-builder-settings-fields input[type=password],.fl-builder-settings-fields input[type=search],.fl-builder-settings-fields input[type=tel],.fl-builder-settings-fields input[type=text],.fl-builder-settings-fields input[type=url],.fl-builder-settings-fields select:not(multiple){height:36px!important}.fl-builder-settings-fields select,.fl-builder-settings-fields select[multiple]{height:auto!important}.fl-builder-settings-fields input[type=number]{width:70px}.fl-builder-lightbox .fl-builder-settings-fields input[type=date]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=email]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=file]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=number]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=password]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=search]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=text]:focus,.fl-builder-lightbox .fl-builder-settings-fields input[type=url]:focus,.fl-builder-lightbox .fl-builder-settings-fields select:focus,.fl-builder-lightbox .fl-builder-settings-fields textarea:focus{border-width:2px!important;border-style:solid!important;border-color:#00a0d2!important;box-shadow:0 2px 4px 0 rgba(0,0,0,.12)!important}.fl-builder-settings-fields ::-webkit-input-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-moz-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields ::-moz-placeholder{color:#999!important;font-size:13px}.fl-builder-settings-fields input:-ms-input-placeholder{color:#999;font-size:13px}.fl-builder-settings-fields label{display:inline-block;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-bottom:3px;font-size:12px}.fl-builder-settings-fields select{-webkit-appearance:none;-moz-appearance:none;box-sizing:border-box;color:#000;margin:0 0 2px;padding:2px 10px;padding-right:30px!important;background:url(../img/svg/select-arrow-down-alt2.svg) center right 10px no-repeat #fff!important}.fl-dimension-field-unit input[type=number],.fl-unit-field-inputs input[type=number]{-moz-appearance:textfield}.fl-builder-settings-fields select[multiple]{height:60px;background-image:none!important}.fl-builder-custom-field select,.fl-photo-field select{box-shadow:none;border-color:#e6eaed!important}.fl-builder-settings-section:first-child{border-top:none!important}.fl-builder-settings-section-header{background-color:#e7ebef;border-top:4px solid #e7ebef;cursor:pointer;height:30px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-builder-settings-description{padding:0 10px 10px;margin:0;font-style:italic;opacity:.75}.fl-builder-settings-fields table{margin:20px 0}.fl-builder-settings-fields .fl-builder-settings-title{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;background:#F5F7F9;color:#353535;padding:2px 10px;margin:0;font-size:13px!important;font-weight:400;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:2px solid transparent;border-radius:0}.fl-builder-settings-fields .fl-builder-settings-title:active,.fl-builder-settings-fields .fl-builder-settings-title:hover{top:0}.fl-builder-settings-fields .fl-builder-settings-title:focus{top:0;border-color:#e0e4ea}.fl-builder-settings-fields .fl-builder-settings-title>svg{height:6px;width:9px;margin-right:7px;transition-property:transform;transition-duration:.15s}.fl-builder-settings-section-collapsed{margin-bottom:4px}.fl-builder-settings-section-collapsed .fl-builder-settings-section-content{display:none}.fl-builder-settings-section-collapsed .fl-builder-settings-title{background:0 0;-ms-flex:1 1 100%;flex:1 1 100%}.fl-builder-settings-section-collapsed .fl-builder-settings-title>svg{transform:rotate(-90deg)}.wp-core-ui h1,.wp-core-ui h2,.wp-core-ui h3,.wp-core-ui h4,.wp-core-ui h5,.wp-core-ui h6,.wp-core-ui p{color:#333;font-family:inherit}.wp-core-ui #media-attachment-date-filters{width:275px}.wp-core-ui input[type=search]::-webkit-input-placeholder{color:#333}.wp-core-ui input[type=search]:-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::-ms-input-placeholder{color:#333}.wp-core-ui input[type=search]::placeholder{color:#333}.wp-core-ui .submitbox .submitdelete{color:#a00}.wp-core-ui button{font-weight:400}.wp-core-ui input[type=date],.wp-core-ui input[type=email],.wp-core-ui input[type=file],.wp-core-ui input[type=number],.wp-core-ui input[type=password],.wp-core-ui input[type=search],.wp-core-ui input[type=tel],.wp-core-ui input[type=text],.wp-core-ui input[type=url],.wp-core-ui select,.wp-core-ui textarea{background-color:#fff;border-color:#dfdfdf;border-style:solid;border-width:1px;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;color:#333;font-weight:400}.wp-core-ui input[type=date]:focus,.wp-core-ui input[type=email]:focus,.wp-core-ui input[type=file]:focus,.wp-core-ui input[type=number]:focus,.wp-core-ui input[type=password]:focus,.wp-core-ui input[type=search]:focus,.wp-core-ui input[type=tel]:focus,.wp-core-ui input[type=text]:focus,.wp-core-ui input[type=url]:focus,.wp-core-ui select:focus,.wp-core-ui textarea:focus{background:0 0;border-color:#aaa}.wp-core-ui input[type=search]{background-image:none;padding:6px}.fl-field-responsive-setting{display:inline-block;width:100%}.fl-field-responsive-setting-medium,.fl-field-responsive-setting-responsive{display:none}.fl-field-control-wrapper i.fl-field-responsive-toggle{padding:9px 0 0;position:absolute;left:-25px}i.fl-field-responsive-toggle{color:grey;display:inline-block;font-size:15px!important;height:auto;text-align:left;width:20px}.fl-builder-settings-fields input.text-full,.fl-builder-settings-fields textarea{width:100%}i.fl-field-responsive-toggle:hover{color:#000}.fl-builder-settings-fields .fl-text-field-add-value{min-width:50%;margin-top:.62em}.fl-field[data-type=shadow] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-shadow-field .fl-color-picker{margin-bottom:15px;width:100%}.fl-color-picker{cursor:pointer}.fl-color-picker .fl-color-picker-clear{box-sizing:border-box}.fl-color-picker .fl-color-picker-clear:hover{background-color:#ededed}.colorpicker input{padding:0!important;font-size:11px!important;color:#fff!important;width:29px!important;height:auto!important;background:0 0!important;border:none!important}.colorpicker .colorpicker_hex input{width:45px!important}.fl-gradient-picker-type{display:-ms-flexbox;display:flex;margin-bottom:15px}.fl-gradient-picker-type input{margin:0!important}.fl-gradient-picker-type select{margin-bottom:0!important}.fl-gradient-picker-type-select{margin-right:10px!important}.fl-gradient-picker-colors{display:-ms-flexbox;display:flex}.fl-gradient-picker-color-row{display:-ms-flexbox;display:flex;margin-right:15px}.fl-color-picker.fl-gradient-picker-color,.fl-gradient-picker-color-row:last-child{margin-right:0}.fl-color-picker.fl-gradient-picker-color .fl-color-picker-color{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-gradient-picker .fl-gradient-picker-stop input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;margin:0!important}.fl-field[data-type=dimension] .fl-field-label label{padding-right:35px}.fl-field[data-type=dimension] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=dimension] .fl-field-description{padding:9px 0 0 5px}.fl-field[data-type=dimension] .fl-field-responsive-setting{width:auto}.fl-dimension-field-units{border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;height:36px;margin:1px 1px 20px;position:relative;max-width:350px}.fl-dimension-field-units>*{border-right:1px solid #e6eaed;width:100%}body .fl-dimension-field-units>:last-child{border-right:none!important}body .fl-dimension-field-units>:first-child>input[type]{border-top-left-radius:4px!important;border-bottom-left-radius:4px!important}body .fl-dimension-field-units>:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-dimension-field-unit input[type],.fl-dimension-field-units .fl-field-unit-select{box-shadow:none!important;margin:0!important;border-radius:0!important}.fl-dimension-field-unit input{width:100%!important}.fl-dimension-field-unit input::-webkit-inner-spin-button,.fl-dimension-field-unit input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-dimension-field-unit label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-dimension-field-unit .fl-field-popup-slider{margin-top:27px}i.fl-dimension-field-link{color:grey;font-size:15px!important;height:auto;text-align:left;width:20px}i.fl-dimension-field-link:hover{color:#000}i.fl-dimension-field-link.dashicons-editor-unlink,i.fl-dimension-field-link.dashicons-editor-unlink:hover{color:#0086b0}.fl-field-label .fl-dimension-field-link,.fl-lightbox-width-slim .fl-dimension-field-link{display:none}.fl-lightbox-width-slim .fl-field-label .fl-dimension-field-link{display:inline-block}.fl-field-control-wrapper .fl-dimension-field-link{padding:9px 0 0;left:-50px;position:absolute}.fl-dimension-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}.fl-field[data-type=unit] .fl-field-control-wrapper{display:-ms-flexbox;display:flex}.fl-field[data-type=unit] .fl-field-description{margin-left:7px!important;padding-top:9px}.fl-field[data-type=unit] .fl-field-responsive-setting{width:auto}.fl-unit-field-inputs{background:0 0;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex}.fl-unit-field-inputs .fl-field-unit-select,.fl-unit-field-inputs input[type]{box-shadow:none!important;margin:0!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-unit-field-inputs .fl-field-unit-select{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.fl-unit-field-inputs input::-webkit-inner-spin-button,.fl-unit-field-inputs input::-webkit-outer-spin-button{-webkit-appearance:none}.fl-unit-field-input{border-right:1px solid #e6eaed!important}body .fl-unit-field-input:last-child{border-right:none!important}body .fl-unit-field-input:last-child>*{border-top-right-radius:4px!important;border-bottom-right-radius:4px!important}.fl-unit-field-unit-select{display:-ms-flexbox;display:flex;width:auto!important}select.fl-field-unit-select{background-color:#E7EBEF!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}div.fl-field-unit-select{background-color:#E7EBEF!important;padding:9px 7px!important;width:100%}.fl-field-popup-slider{background:#fff;border-radius:4px;box-shadow:0 4px 25px 0 rgba(0,0,0,.18);display:none;margin-top:10px;padding:15px;position:absolute;left:0;right:0;z-index:9999}.fl-field-popup-slider-top{margin-top:0!important;top:-100%;transform:translateY(-10px)}.fl-field-popup-slider-input{background:#E7EBEF;cursor:pointer;height:4px;text-align:left;position:relative;border-radius:3px}.fl-field-popup-slider-input .ui-slider-handle{background:#fff;border:2px solid #3AA4CC;border-radius:100%;cursor:pointer;height:12px;width:12px;position:absolute;top:-6px;margin-left:-7px}.fl-field-popup-slider-input .ui-slider-handle:focus{outline:0}.fl-field-popup-slider-arrow{position:absolute;top:-22px}.fl-field-popup-slider-arrow:after{content:' ';border-color:transparent transparent #fff;border-style:solid;border-width:0 8px 8px;width:0;height:0}.fl-field-popup-slider-top .fl-field-popup-slider-arrow{top:auto;bottom:-24px}.fl-field-popup-slider-top .fl-field-popup-slider-arrow:after{border-bottom-width:0;border-top-width:8px;border-top-color:#fff}input[type=number].fl-field-popup-slider-focus{border:2px solid #00a0d2!important}.fl-font-field{display:-ms-flexbox;display:flex}.fl-font-field label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-font-field .fl-font-field-font-wrapper{margin-right:8px;width:70%!important}.fl-font-field .fl-font-field-weight-wrapper{width:30%!important}.fl-compound-field{max-width:350px}.fl-compound-field-section-toggle{background:#E7EAEF;border-radius:4px;border-top:2px solid transparent;border-bottom:2px solid transparent;cursor:pointer;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:32px;margin-bottom:8px;padding:0 12px}.fl-compound-field-section-toggle:hover{background:#dadfe5}.fl-compound-field-section-toggle .dashicons{font-size:15px;height:15px;margin-right:5px;width:15px}.fl-compound-field-section:last-child .fl-compound-field-section-toggle{margin-bottom:0}.fl-compound-field-section.fl-compound-field-section-visible{padding-bottom:12px}.fl-compound-field-section.fl-compound-field-section-visible:last-child{padding-bottom:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle{background:0 0;border-top:2px solid #E7EBEF;border-radius:0}.fl-compound-field-section-visible .fl-compound-field-section-toggle:hover{background:0 0}.fl-compound-field-section-visible .fl-compound-field-section-toggle .dashicons:before{content:'\f347'}.fl-compound-field-row{display:none;padding-bottom:12px}.fl-compound-field-section-visible .fl-compound-field-row{display:-ms-flexbox;display:flex}.fl-compound-field-label{display:block!important;margin:0!important;padding:0 0 6px 12px}.fl-compound-field-label-bottom{padding:6px 0 0 12px}.fl-compound-field-label .fl-dimension-field-link{display:inline-block;padding:0 0 0 2px;position:relative;left:auto;top:-1px}.fl-compound-field-setting{padding-right:8px;width:100%}.fl-compound-field-setting:last-child{padding-right:0}.fl-compound-field-setting select{margin:0!important;width:100%}.fl-compound-field-setting .fl-unit-field-input input{width:100%!important;border-top-right-radius:0!important;border-bottom-right-radius:0!important}.fl-compound-field-setting .fl-unit-field-input{width:50%!important}.fl-compound-field-setting .fl-unit-field-input select.fl-field-unit-select{background-position:center right 2px!important;padding:2px 5px!important;width:100%;font-size:11px}.fl-typography-field .fl-font-field-font-wrapper{margin-right:8px!important}.fl-typography-field-spacing{width:calc(33.33% - 8px)}.fl-typography-field-transform{width:66.66%}.fl-typography-field-transform .fl-button-group-field-options{float:none}.fl-typography-field-transform .fl-button-group-field-option{width:100%;padding:0 7px}.fl-typography-field .fl-shadow-field{display:-ms-flexbox;display:flex}.fl-typography-field .fl-shadow-field .fl-color-picker{margin:0 8px 0 0;width:calc(33.33% - 8px)}.fl-typography-field .fl-shadow-field .fl-dimension-field-units{margin-left:0;margin-top:0;margin-right:0;width:66.66%}.fl-button-group-field-options{background:#E7EBEF;border-radius:4px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);display:-ms-flexbox;display:flex;float:left;height:36px;overflow:hidden}.fl-button-group-field-option{cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:0 5px;border-radius:0;border:2px solid transparent;background:0 0}.fl-button-group-field-option:hover{top:0;background-color:transparent;color:#000;border:2px solid transparent}.fl-button-group-field-option:focus{top:0;background-color:transparent;border:2px solid #00a0d2;color:#333}.fl-button-group-field-option:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.fl-button-group-field-option:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.fl-button-group-field-option[data-selected="1"]{background-color:#fff;color:#000}.fl-button-group-field-option i{color:#6B6E75}.fl-button-group-field-option:hover i{color:#333}.fl-compound-field-cell{width:50%;display:block;float:left;padding-top:13px}.fl-compound-field-cell:first-child{padding-right:4px}.fl-compound-field-cell:last-child{padding-left:4px}.fl-compound-field-cell label{padding:5px 0 0;font-size:11px;font-weight:700;color:inherit!important;display:block;text-align:center;opacity:.5}.fl-shape-transform-field .fl-compound-field-row{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-compound-field-row>*{width:auto;-ms-flex:1 1 auto;flex:1 1 auto}.fl-shape-transform-field .fl-compound-field-row>:first-child{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-shape-transform-field .fl-shape-orientation-controls>*{-ms-flex:0 0 auto;flex:0 0 auto}.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>*,.fl-shape-transform-field .fl-shape-orientation-controls .fl-button-group-field>* button{border-radius:0}.fl-shape-orientation-controls .fl-button-group-field:first-child>*,.fl-shape-orientation-controls .fl-button-group-field:first-child>* button{border-top-left-radius:4px;border-bottom-left-radius:4px}.fl-shape-orientation-controls .fl-button-group-field:last-child>*,.fl-shape-orientation-controls .fl-button-group-field:last-child>* button{border-top-right-radius:4px;border-bottom-right-radius:4px}.fl-builder-custom-field{background:#fff;border:2px solid transparent;border-radius:4px;padding:7px 10px;box-shadow:0 2px 4px 0 rgba(0,0,0,.12);min-height:36px;box-sizing:border-box}.fl-builder-field-multiple .fl-builder-custom-field{cursor:move}.fl-builder-custom-field a{color:#21759b!important;text-decoration:underline!important}.fl-builder-custom-field a:hover{color:#d54e21!important}.fl-builder-custom-field label.error{margin-top:5px}.fl-photo-field .fl-photo-preview{display:-ms-flexbox;display:flex}.fl-photo-field .fl-photo-select,.fl-photo-field.fl-photo-empty .fl-photo-preview{display:none}.fl-photo-field.fl-photo-empty .fl-photo-select{display:block}.fl-photo-field .fl-photo-preview-img{line-height:0;margin:5px 0}.fl-photo-field .fl-photo-preview-img img{max-width:60px}.fl-photo-field .fl-photo-preview select{margin:8px 0 8px 10px;width:calc(100% - 10px)}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview select{display:none}.fl-photo-field .fl-photo-preview-filename{display:none;font-size:13px;font-weight:700;margin:5px 0 9px 11px}.fl-photo-field.fl-photo-no-attachment .fl-photo-preview-filename{display:inline-block;word-break:break-all}.fl-multiple-photos-field .fl-multiple-photos-select,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-add,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-count,.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-edit,.fl-multiple-photos-lightbox .gallery-settings,.fl-photo-field.fl-photo-no-attachment .fl-photo-edit{display:none}.fl-photo-field .fl-photo-edit{margin:0 0 0 11px}.fl-photo-field .fl-photo-remove,.fl-photo-field .fl-photo-replace{margin:0 0 0 8px}.fl-builder-edit .media-modal{z-index:9999991}.fl-builder-edit .media-modal-backdrop{z-index:999999}.fl-builder-edit .media-frame{-webkit-backface-visibility:hidden;backface-visibility:hidden}.fl-builder-edit .media-modal-content h1{font-family:inherit}.fl-builder-edit form#wp-link,.popover[class*=tour-],ul.as-list{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}.fl-builder-edit .media-modal-content .thumbnail{padding:0;border:none;border-radius:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail{margin-bottom:0}.fl-builder-edit .media-modal-content .attachment-preview .thumbnail img{max-width:none}.fl-builder-edit button.media-modal-close{position:absolute;box-shadow:none;-webkit-box-shadow:none}.fl-builder-edit .media-frame.hide-menu{visibility:visible}span.select2-container.select2-container--open{z-index:9999999}.fl-multiple-photos-field .fl-multiple-photos-add{margin:0 0 0 8px}.fl-multiple-photos-field.fl-multiple-photos-empty .fl-multiple-photos-select{display:inline}.fl-multiple-photos-count{font-weight:700;margin-bottom:3px}.fl-video-field .fl-video-select,.fl-video-field.fl-video-empty .fl-video-preview{display:none}.fl-video-field.fl-video-empty .fl-video-select{display:block}.fl-video-field .fl-video-preview-img{float:left;line-height:0;margin:5px 0}.fl-video-field .fl-video-preview-img img{max-width:60px}.fl-video-field .fl-video-preview-img .dashicons.dashicons-media-video{display:block;font-size:60px;height:60px;line-height:60px;width:60px}.fl-video-field .fl-video-preview-filename{display:inline-block;font-size:14px;font-weight:700;margin:7px 0 5px 11px}.fl-video-field .fl-video-remove,.fl-video-field .fl-video-replace{margin:0 0 0 11px}.fl-multiple-audios-field .fl-multiple-audios-select,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-add,.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-edit{display:none}.fl-multiple-audios-field.fl-multiple-audios-empty .fl-multiple-audios-select{display:block}.fl-multiple-audios-field .fl-multiple-audios-add{margin:0 0 0 8px}.fl-icon-field .fl-icon-select,.fl-icon-field.fl-icon-empty .fl-icon-preview{display:none}.fl-icon-field.fl-icon-empty .fl-icon-select{display:block}.fl-icon-field .fl-icon-preview i{display:inline-block;font-size:28px;margin:10px 10px 9px;vertical-align:middle}.fl-icon-field .fl-icon-remove{margin:0 0 0 8px}.fl-builder-hidden-editor{display:none}.fl-builder-settings .wp-switch-editor{border-radius:0;color:#333;margin-top:2px}.fl-builder-settings .mce-toolbar .mce-btn-group .mce-btn{margin:2px 0}.fl-builder-settings .mce-menubtn.mce-fixed-width button{width:100px}.fl-builder-settings .mce-menubtn.mce-fixed-width span{width:100%}.mce-close:active,.mce-close:hover,.mce-toolbar .mce-btn button:active,.mce-toolbar .mce-btn button:hover,.mce-window .mce-btn button:active,.mce-window .mce-btn button:hover{background:0 0;border:none}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:1px!important}.wp-editor-container textarea.wp-editor-area{background:0 0;border:none;padding:10px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.fl-builder-edit form#wp-link{color:#000;font-size:13px}.fl-builder-edit form#wp-link #link-options label{display:block;margin-bottom:2px}.fl-builder-edit form#wp-link #link-options label span{padding-right:10px;vertical-align:middle}.fl-builder-edit form#wp-link #link-options input[type=text]{display:inline-block;height:auto;margin:5px 0 0;padding:3px 5px;width:80%}.fl-builder-edit form#wp-link .query-results{top:225px}.fl-code-field{border:1px solid #E6E6E6;border-left:none}.ace_editor,.ace_editor *{font-family:Monaco,Menlo,"Ubuntu Mono","Droid Sans Mono",Consolas,monospace!important;font-size:12px!important;font-weight:400!important;letter-spacing:0!important}.fl-layout-field-option{border:2px solid #d9d9d9;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;box-sizing:border-box!important;-moz-box-sizing:border-box!important;-webkit-box-sizing:border-box!important;cursor:pointer;float:left;line-height:0;max-width:23%;margin:0 1% 2%;padding:5px}.fl-layout-field-option-selected,.fl-layout-field-option:hover{border-color:red}.fl-layout-field-option img{max-width:100%}.fl-link-field .fl-link-field-input-wrap{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.fl-link-field-input{width:auto!important;-ms-flex:1 1 100%;flex:1 1 100%}.fl-link-field .fl-link-field-input-wrap button{-ms-flex:0 0 0%;flex:0 0 0%;height:36px;margin:1px 1px 1px 5px}.fl-link-field-options-wrap{padding:7px 0 0 12px}.fl-link-field-options-wrap label{margin-right:7px}.fl-link-field-options-wrap span{font-size:11px;font-weight:700;color:inherit!important;text-align:center;opacity:.5}.fl-link-field-search{display:none;border:2px solid #e6eaed;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;margin:4px 0 0;padding:10px}.fl-link-field-search-title{display:block;margin:0 0 3px 2px}.fl-link-field-search-cancel{margin-top:6px}.fl-link-field-search input{box-shadow:none!important;width:100%!important;padding:3px 9px!important}.fl-link-field-search #as-original-link-search{width:100%}.fl-field-connections-toggle{padding:10px 0}.fl-field[data-type=editor] .fl-field-connections-toggle{-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connections-toggle{height:24px;margin-top:1px;-ms-flex-align:start;align-items:flex-start}.fl-field[data-type=link] .fl-field-connection{bottom:25px}.fl-field-connections-menu[data-field=fl-field-text]{margin-top:30px}.fl-help-tooltip{display:inline-block;position:relative}.fl-lightbox-width-slim .fl-help-tooltip{position:static}.fl-help-tooltip-icon{color:#999!important;cursor:pointer;font-size:15px!important;padding:5px;vertical-align:middle}.fl-help-tooltip-text{box-sizing:border-box;background:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ccc;-moz-box-shadow:0 0 5px #ccc;-webkit-box-shadow:0 0 5px #ccc;display:none;font-weight:400;left:23px;padding:10px 13px;position:absolute;top:-6px;width:250px;z-index:1000;border-radius:4px}.fl-lightbox-width-slim .fl-help-tooltip-text{top:30px;left:0;width:100%}.fl-field-control .fl-form-field{margin-bottom:0}.fl-form-field[data-preview-text=icon]{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.fl-form-field-preview-text i{display:inline-block;font-size:18px;line-height:22px;margin-right:10px}.fl-builder-field-actions{padding-left:0!important;padding-right:0!important;text-align:center;width:85px}.fl-builder-field-actions i{color:#999!important;cursor:pointer;font-size:13px!important;line-height:29px!important;width:16px}.fl-builder-field-actions i:hover{color:#000!important}.fl-builder-field-actions i.fl-builder-field-copy,.fl-builder-field-actions i.fl-builder-field-delete{margin-left:5px}.fl-builder-field-actions i.fl-builder-field-move{cursor:move}.fl-builder-field-dd-helper{background:#ccc;height:30px!important;float:left;width:130px!important}.fl-builder-field-dd-zone{border:1px dashed #ccc;height:30px}.fl-builder-field-actions-single .fl-builder-field-delete,.fl-builder-field-actions-single .fl-builder-field-move{display:none!important}.fl-builder-field-multiple .fl-builder-field-actions,.fl-builder-field-multiple .fl-field-control,.fl-builder-field-multiple .fl-field-label{padding-top:2px!important;padding-bottom:2px!important}.fl-builder-field-multiple .fl-builder-field-actions{min-width:70px!important}.fl-builder-field-multiple[data-field=icons] .fl-builder-field-actions{width:70px!important}.fl-builder-field-multiple.ui-sortable-helper .fl-field-control{width:60%}.fl-builder-field-multiple.ui-sortable-helper .fl-builder-field-actions{display:none}.fl-builder-widget-settings input{display:inline-block!important;margin:5px 10px 8px!important}.fl-builder-lightbox-loading{background:url(../img/ajax-loader.svg) center center no-repeat;height:100px}.fl-builder-settings .error,.fl-builder-settings input.error{color:#d03436!important}.fl-builder-settings label.error,.fl-builder-settings p.error{color:#d03436;display:block;margin-top:5px}.fl-builder-settings .fl-form-table .fl-field-description{color:#464646;font-style:normal;margin-left:2px}.fl-lightbox .fl-field-connection{right:-1px}.fl-lightbox .fl-field-connection-content{border:2px solid transparent!important;background:#e7ebef!important}.fl-field-connection-content .fl-field-connection-label{color:#676f7a!important}.fl-field-connections-toggle{pointer-events:none;width:20px;right:-25px}.has-scrollbar .fl-field-connections-toggle{right:-22px}.fl-field-connections-toggle-open{transform:none!important}.fl-field-connections-toggle i{pointer-events:auto;color:#abb1ba;font-size:13px!important;transition-property:transform;transition-duration:.15s}.fl-field-connections-toggle-open i{transform:rotate(-45deg)}ul.as-selections{background-color:#fff;border:none;border-radius:4px;box-shadow:none;color:#333;font-size:12px;height:auto;line-height:15px;margin:1px;outline:0;padding:3px;width:auto}ul.as-selections.loading{background:url(../img/ajax-loader-small.svg) 98% center no-repeat}ul.as-selections li.as-selection-item{background:#d4eaf6;border:none;font-size:11px;line-height:14px;padding:8px 15px;border-radius:4px;margin:2px}ul.as-selections li.as-selection-item.blur{background:#f4f4f4}ul.as-selections li.as-selection-item a.as-close{line-height:12px}ul.as-selections li.as-original{margin:0}ul.as-selections li.as-original input{height:auto;font-size:12px;margin:0;padding:0;box-shadow:none}ul.as-list{margin:0;font-size:13px;color:#000;background-color:#fff;background-color:rgba(255,255,255,.95);z-index:2;box-shadow:0 0 10px rgba(0,0,0,.1);border:none;border:1px solid #dfdfdf;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px}li.as-message,li.as-result-item{border:none}li.as-result-item.active{background:#e5e5e5;border-radius:0;color:#333;text-shadow:none}li.as-result-item em{background:0 0!important;color:#333!important;font-size:12px;padding:0!important;font-weight:700}.fl-custom-query-filter{display:none}.fl-custom-query .fl-field[data-type=suggest] select{margin-bottom:5px;width:100%}.fl-builder-service-settings{position:relative}.fl-builder-service-error{color:red!important;padding:15px 0 0}.fl-builder-service-account-delete{color:red!important;margin-left:10px;position:relative;top:2px}.fl-lightbox-width-slim .fl-builder-service-account-delete{display:block;padding-top:7px}#fl-field-visibility_user_capability .fl-field-description,.fl-builder-service-connect-row .fl-field-description{background:#f0f0f0;color:#333!important;display:block;float:none;margin:10px 0 0;padding:10px}#fl-field-visibility_user_capability .fl-field-description a,.fl-builder-service-connect-row .fl-field-description a{color:#21759b!important;text-decoration:underline!important}.fl-ordering-field-option{background:#fff;border:1px solid #dfdfdf;border-radius:3px;cursor:move;margin-bottom:5px;padding:5px 10px}.fl-ordering-field-option .fa{color:#ccc;float:right;line-height:16px}#tiptip_holder{z-index:1000000}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:#333}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:#333}#tiptip_holder.tip_right #tiptip_arrow_inner{border-right-color:#333}#tiptip_holder.tip_left #tiptip_arrow_inner{border-left-color:#333}#tiptip_content{background:#333;box-shadow:none}.fl-builder-getting-started-video{line-height:0!important;padding:10px}.fl-builder-getting-started-video iframe{border:none;height:326px;width:100%}.fl-builder-tour-actions .fl-builder-actions-title{font-size:14px!important;line-height:19px}.fl-builder-tour-mask{bottom:0;left:0;position:fixed;right:0;top:0;z-index:100000000}.fl-builder-tour-dimmed{background:rgba(0,0,0,.7);bottom:0;left:0;position:absolute;right:0;top:0}body>.fl-builder-tour-dimmed{position:fixed}.tour-backdrop{z-index:110000}.popover[class*=tour-]{border:1px solid #ccc;border-radius:0;box-shadow:0 0 40px rgba(0,0,0,.3);color:#666;font-size:13px;font-weight:400;line-height:18px;max-width:none;padding:0;width:300px;z-index:100000001}.popover[class*=tour-].bottom>.arrow{border-bottom-color:#ccc}.popover[class*=tour-].bottom>.arrow:after{border-bottom-color:#f7f7f7}.popover[class*=tour-] .popover-title{border-radius:0;color:#333;letter-spacing:normal;text-transform:none}.popover[class*=tour-] .fa-times{color:#b3b3b3;cursor:pointer;font-size:16px;padding:5px;position:absolute;right:3px;top:2px}.popover[class*=tour-] .fa-times:hover{color:#666}.popover[class*=tour-] .popover-content{border-bottom:1px solid #d9d9d9;padding:13px 15px}.popover[class*=tour-] .fl-builder-tour-next{display:block;float:none;width:100%}.popover-navigation button{min-height:36px}.fl-builder-shortcode-mask-wrap{position:relative}.fl-builder-shortcode-mask{bottom:-1px;left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fl-builder--search{border:2px solid transparent;position:relative;padding:0;width:54px;transition-property:width;transition-delay:.1s;transition-duration:.15s}.fl-builder--search.is-expanded{border:2px solid #00A0D0}.fl-builder--search input[type=text],.fl-builder--search input[type=text]:focus{background-color:transparent;border:none!important;box-sizing:border-box;width:100%;font-size:16px;text-align:center}.fl-builder--search:before{display:-ms-flexbox;display:flex;top:0;left:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;content:"\f002";font:normal normal normal 14px/1 Font Awesome\ 5 Free;text-align:center;width:100%;height:100%;position:absolute;pointer-events:none;color:rgba(128,128,128,.6);font-size:17px;opacity:1;transition-property:opacity;transition-duration:.15s}.fl-builder--main-menu-panel,.fl-builder-ui-keyboard-shortcuts{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif!important}.fl-builder--search.has-text:before,.fl-builder--search.is-expanded:before{opacity:0}.fl-builder--search input::-webkit-input-placeholder{color:rgba(128,128,128,0)!important;transition:color .25s}.fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(128,128,128,.4)!important}.fl-builder--search .search-label{cursor:text}.fl-builder--search .search-clear{display:none;padding:10px 10px 10px 30px;color:#a7a7a7;font-size:12px;position:absolute;right:0;top:0;background-color:#eff1f2;background:linear-gradient(to left,#e4e7ea,#e4e7ea 75%,rgba(228,231,234,0))}.fl-builder--search.has-text .search-clear,.fl-builder--search.is-expanded input{display:inline-block}.fl-builder--search:hover .search-clear{color:#888;background-color:#eff1f2;background:linear-gradient(to left,#dadfe5,#dadfe5 75%,rgba(218,223,229,0))}.fl-builder--search.is-expanded{width:246px}@keyframes fl-builder-show-menu-item{from{transform:translateY(10px) scale(.8);opacity:0}to{transform:translateX(0) translateY(0) scale(1);opacity:1}}.fl-builder--main-menu-panel{display:none;box-sizing:border-box;position:fixed;top:calc(45px + 10px);left:10px;width:360px;color:#222;max-height:calc(100% - 66px);border-radius:4px;background:#fff;border:none;border-top:3px solid #00a0d2;box-shadow:0 11px 45px 8px rgba(0,0,0,.1);font-size:14px!important;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:10000009;pointer-events:auto}.fl-builder--main-menu-panel.is-showing{display:-ms-flexbox;display:flex}.fl-builder--main-menu-panel:before,.fl-theme-builder-preview-select-open .fl-theme-builder-preview-select-items:before{bottom:100%;right:6px;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:solid;border-color:rgba(255,255,255,0);border-bottom-color:#00a0d2;border-width:13px;margin-left:-13px}.fl-builder--main-menu-panel-views{-ms-flex:1 1 100%;flex:1 1 100%;overflow:auto}.fl-builder--main-menu-panel-mask{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:1000119}.fl-builder--main-menu-panel .fl-builder--tabs{padding-left:20px;padding-top:15px}.fl-builder--main-menu-panel-view{display:none}.fl-builder--main-menu-panel-view.is-showing{display:block}.fl-builder--main-menu-panel-view-title{font-size:24px;font-weight:600;padding:25px 22px 0;line-height:1;white-space:nowrap}.fl-builder--main-menu-panel-view-title .title-accessory{float:right;color:#b1b1b1}.fl-builder--main-menu-panel-view-title .title-accessory>i{font-size:20px!important;width:25px!important}.fl-builder--main-menu-panel-view-title .title-accessory>i:hover{color:#222}.fl-builder--main-menu-panel-view-title .pop-view{padding:10px;margin-left:-10px;opacity:.5;font-size:25px;font-weight:400;cursor:pointer;background:0 0;outline:0;border:none;color:inherit}.fl-builder--main-menu-panel-view-title .pop-view:focus{outline:0;top:0;background:#E5EAED!important}.fl-builder--menu-item:before{display:block;content:"";float:none;clear:both}.fl-builder--menu-item{color:inherit;text-align:left;box-sizing:border-box;display:block;padding:10px 15px;margin:0 10px;width:calc(100% - 20px);background:0 0;border:none;border-radius:4px;font-size:14px;line-height:1.1;cursor:pointer;opacity:1;text-transform:none}.fl-builder--menu-item:hover{background:#eaf1f8;border:none;text-decoration:none;color:#000}.fl-builder--selector-menu .fl-builder--menu-item:hover{background:#fff}.fl-builder--menu-item-accessory{float:right;text-align:center;display:inline-block;min-width:40px;font-size:14px}.fl-builder--menu-item-accessory.view-arrow{font-size:18px}.fl-builder--menu{padding:0;margin:20px 0}.fl-builder--menu hr{margin:8px 0;background:#e6eaed!important;height:1px;border:none}.fl-builder--menu .fl-builder-video-wrap{padding:0 10px 10px}.fl-revision-list-item{display:-ms-flexbox;display:flex}.fl-revision-list-item-text{padding-left:15px}.fl-revision-list-item-date{padding-bottom:5px}.fl-builder--revision-actions{display:none;position:fixed;top:4px;left:4px;z-index:100008;padding:4px 4px 6px;-ms-flex-pack:center;justify-content:center;background:#fff;border-radius:4px}.fl-builder--revision-actions *{margin-right:5px}.fl-builder--revision-actions :last-child{margin:0}.fl-builder--menu-item[data-event=noRevisionsMessage]:hover{background:0 0;box-shadow:none;cursor:default}.fl-no-revisions-message-title{font-weight:700;margin-bottom:10px}.fl-no-revisions-message-text{line-height:22px}.fl-builder-module-placeholder-message{border:1px dashed #ccc;overflow:hidden;padding:20px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.fl-field-connections-menu{z-index:999999}.fl-field[data-type=editor] .fl-field-connections-toggle{right:5px!important}.fl-field-connections-inline-toggle{display:inline;color:#9a9b9c;margin-left:6px}.fl-field-connections-inline-toggle i{transition-property:transform;transition-duration:.15s}.fl-field-connections-inline-toggle.fl-field-connections-toggle-open i{transform:rotate(45deg)}.fl-builder-add-ultimate-presets-button,.fl-builder-add-ultimate-rows-button,.fl-builder-pp-add-template-button,.pp-preview-button,.uabb-live-preview-button{display:none!important}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none;background:0 0;transition-property:background;transition-duration:.15s}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{width:12px;height:12px}.ui-resizable-se{cursor:se-resize;right:-4px;bottom:-4px}.ui-resizable-sw{cursor:sw-resize;left:-4px;bottom:-4px}.ui-resizable-nw{cursor:nw-resize;left:-4px;top:-4px}.ui-resizable-ne{cursor:ne-resize;right:-4px;top:-4px}.fl-builder-resizable-iframe-fix{position:absolute;top:0;right:0;bottom:0;left:0;z-index:100000000}.fl-builder-panel .ui-resizable-handle:active,.fl-builder-panel .ui-resizable-handle:hover,.fl-lightbox .ui-resizable-handle:active,.fl-lightbox .ui-resizable-handle:hover{background:#00a0d2}.fl-builder-panel .ui-resizable-n,.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-n,.fl-lightbox .ui-resizable-s{height:6px}.fl-builder-panel .ui-resizable-n,.fl-lightbox .ui-resizable-n{top:-3px}.fl-builder-panel .ui-resizable-s,.fl-lightbox .ui-resizable-s{bottom:-3px}.fl-builder-panel .ui-resizable-e,.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-e,.fl-lightbox .ui-resizable-w{width:6px}.fl-builder-panel .ui-resizable-e,.fl-lightbox .ui-resizable-e{right:-3px}.fl-builder-panel .ui-resizable-w,.fl-lightbox .ui-resizable-w{left:-3px}.fl-lightbox .ui-resizable-ne,.fl-lightbox .ui-resizable-nw,.fl-lightbox .ui-resizable-se,.fl-lightbox .ui-resizable-sw{background:0 0;border:6px solid transparent}.fl-lightbox .ui-resizable-ne:active,.fl-lightbox .ui-resizable-ne:hover,.fl-lightbox .ui-resizable-nw:active,.fl-lightbox .ui-resizable-nw:hover,.fl-lightbox .ui-resizable-se:active,.fl-lightbox .ui-resizable-se:hover,.fl-lightbox .ui-resizable-sw:active,.fl-lightbox .ui-resizable-sw:hover{background:0 0;border-color:#00a0d2}.fl-lightbox .ui-resizable-ne{border-bottom:none;border-left:none;border-top-right-radius:4px}.fl-lightbox .ui-resizable-nw{border-bottom:none;border-right:none;border-top-left-radius:4px}.fl-lightbox .ui-resizable-se{border-top:none;border-left:none;border-bottom-right-radius:4px}.fl-lightbox .ui-resizable-sw{border-top:none;border-right:none;border-bottom-left-radius:4px}.fl-builder-ui-keyboard-shortcuts{display:none;position:fixed;top:0;left:0;bottom:0;right:0;z-index:999999;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;background:rgba(50,50,50,.88);font-size:15px;line-height:1.3;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fl-builder-ui-keyboard-shortcuts.is-showing{display:-ms-flexbox;display:flex}.fl-builder-ui-keyboard-shortcuts-content{box-sizing:border-box;width:500px;background:#f5f7f9;border-radius:4px;padding:30px 0 0;box-shadow:0 10px 30px rgba(0,0,0,.15)}.fl-builder-ui-keyboard-shortcut-item{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;padding:12px 40px}.fl-builder-ui-keyboard-shortcut-item:nth-child(even){background:#eef2f5}.fl-builder-ui-shortcut-keycode{margin-left:auto;text-transform:uppercase;letter-spacing:2px}.fl-builder-ui-keyboard-shortcust-footer{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;padding:10px}.dismiss-shortcut-ui{padding:10px;border-radius:4px;background:#fff;color:#000;font-size:14px;border:2px solid #fff}.dismiss-shortcut-ui:focus,.dismiss-shortcut-ui:hover{top:0;color:#000;background:#eef2f5;border:2px solid #eef2f5}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel,.fl-builder-ui-skin--dark .fl-builder--preview-actions,.fl-builder-ui-skin--dark .fl-builder--search-results-panel,.fl-builder-ui-skin--dark .fl-builder-panel,.fl-builder-ui-skin--dark .fl-lightbox,body.fl-builder-ui-skin--dark .fl-builder-bar .fl-builder-bar-content{background:#23282d;color:#b4b9be;border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-header{color:#b4b9be;border-bottom-color:#1d1d1d;border-top-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel.fl-builder-ui-pinned .fl-builder--panel-header{border-top-color:#1d2227}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel:before{border-bottom-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder--panel-arrow polygon{fill:#1d1d1d}.fl-builder-ui-skin--dark .fl-builder-panel-search .fl-builder-panel-search-input{background:#24282e}.fl-builder-ui-skin--dark .fl-responsive-preview-content{background:#131619}.fl-builder-ui-skin--dark .fl-form-table th{background:#23282d!important;color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--preview-actions .device-icons,.fl-builder-ui-skin--dark .fl-builder-button{background:#2c333a}.fl-builder-ui-skin--dark .fl-builder-button:focus{background:#131a22}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-primary{color:#fff!important;fill:#fff!important;background:#00A0D2}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-buy-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-feedback-button,.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-upgrade-button{background-color:#F7A407;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-button.fl-builder-button-silent:focus{border:2px solid #00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{color:#00A0D2!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:hover,.fl-builder-ui-skin--dark .fl-builder--menu>button:hover{background:#101215!important}.fl-builder-ui-skin--dark .fl-builder--menu>a:focus,.fl-builder-ui-skin--dark .fl-builder--menu>button:focus{background:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-bar-title{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:#181b1f}.fl-builder-simple.fl-builder-ui-skin--dark .fl-builder-bar-title:hover{background-color:transparent}.fl-builder-ui-skin--dark .fl-builder-layout-title{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-bar-title-caret i,.fl-builder-ui-skin--dark .fl-builder-layout-pretitle,.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title{color:#7d8690}.fl-builder-ui-skin--dark button.fl-builder-button.fl-builder-bar-title-caret:focus{background-color:#101215!important}.fl-builder-ui-skin--dark .fl-builder--search:before{color:rgba(162,173,184,.73)}.fl-builder-ui-skin--dark .fl-builder--search input:focus::-webkit-input-placeholder{color:rgba(162,173,184,.73)!important}.fl-builder-ui-skin--dark .fl-builder--search .search-clear{color:rgba(162,173,184,.5);background-color:#e4e4e4;background:linear-gradient(to left,#383f46,#383f46 75%,rgba(56,63,70,0))}.fl-builder-ui-skin--dark .fl-builder--menu hr{background-color:#23282d!important;border:none}.fl-builder-ui-skin--dark .fl-builder--tabs{border-color:#383f46!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing,.fl-builder-ui-skin--dark .fl-builder-settings-tabs a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-more.fl-contains-active{color:#fff!important;fill:#fff!important;background:#181b20!important}.fl-builder-ui-skin--dark .fl-builder--tabs :focus{background-color:#101215!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder--tabs .is-showing:focus{color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder--menu-item:hover{background:#383f46;color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--menu * .fl-builder--menu-item-accessory,.fl-builder-ui-skin--dark .fl-builder-blocks-section-group-name{color:#7d8690}.fl-builder-ui-skin--dark .fl-builder--selector-display{color:#c6cdd6;background:url(../img/svg/select-arrow-down-alt2-light.svg) center right 10px no-repeat #1a1b22!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label{color:#b5becb}.fl-builder-ui-skin--dark .fl-builder-panel-search-input input{border-color:#5b656f;color:#b8c2ce;background:#171b1f!important}.fl-builder-ui-skin--dark .fl-builder--selector-display-label:focus,.fl-builder-ui-skin--dark .fl-builder-panel-search-input input:focus{border-color:#00a0d2}.fl-builder-ui-skin--dark .fl-builder--group-label{color:#aaafb5!important;background:#24282e}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu{border-color:#101215!important;color:#7c858e;background-color:#101215}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu:before{border-bottom-color:#101215}.fl-builder-ui-skin--dark .fl-builder--menu>a,.fl-builder-ui-skin--dark .fl-builder--menu>button,.fl-builder-ui-skin--dark .fl-builder--menu>span{color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:hover{background:#23282d!important;color:#a1adb9}.fl-builder-ui-skin--dark .fl-builder--category-select .fl-builder--selector-menu .fl-builder--menu-item:focus{background:#23282d!important;color:#00a0d2!important}.fl-builder-ui-skin--dark .fl-builder-panel-drag-handle{fill:#5b656f}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-header,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-header,.fl-builder-ui-skin--dark .fl-builder-settings-section-header{background-color:#191b21;border-color:#191b21}.fl-builder-ui-skin--dark .fl-builder--template-collection-section-name,.fl-builder-ui-skin--dark .fl-builder--user-templates-section-name,.fl-builder-ui-skin--dark .fl-builder-blocks-section .fl-builder-blocks-section-title,.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title{color:#7d8690!important;fill:#7d8690;background:#24282e}.fl-builder-ui-skin--dark .fl-builder-settings-fields .fl-builder-settings-title:focus{border-color:#7d8690}.fl-builder-ui-skin--dark .fl-builder-blocks-section-content .fl-builder-block,.fl-builder-ui-skin--dark .fl-user-template{color:#b8c2ce}.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-content,.fl-builder-ui-skin--dark .fl-user-template:hover{background:#171b1f;color:#fff}.fl-builder-ui-skin--dark .fl-builder-block:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover i{color:#6d7782!important}.fl-builder-ui-skin--dark .fl-builder-block:hover a:hover i,.fl-builder-ui-skin--dark .fl-user-template:hover a:hover i{color:#9eacbb!important}.fl-builder-ui-skin--dark .fl-builder-block .fl-builder-block-icon{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col,.fl-builder-ui-skin--dark .fl-builder-block:hover .fl-builder-block-visual.fl-cols-visual .fl-cols-visual-col{background:#7d8690}.fl-builder-ui-skin--dark .fl-user-templates{border-color:#101215}.fl-builder-ui-skin--dark .fl-builder--template-thumbnail{border-color:#393f44}.fl-builder-ui-skin--dark .fl-builder--menu a.fl-template-collection{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-lightbox .fl-lightbox-header h1{color:#fff!important}.fl-builder-ui-skin--dark .fl-form-table th label{color:#a8b3bf!important}.fl-builder-ui-skin--dark .fl-builder-settings-tabs{background-color:#2c333a!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields h3.fl-builder-settings-title{background:#24282e}.fl-builder-ui-skin--dark h3.fl-builder-settings-title .fl-builder-settings-title-text-wrap{color:#a8b3bf;background-color:#1b2025}.fl-builder-ui-skin--dark .fl-lightbox :not(i){color:#a7b1bb!important}.fl-builder-ui-skin--dark .fl-builder-button{color:#c6cdd6!important;fill:#c6cdd6!important}.fl-builder-ui-skin--dark .fl-builder-content-panel--button:hover,.fl-builder-ui-skin--dark .fl-builder-content-panel-button{fill:#00A0D2!important}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-button.fl-builder-button-primary{color:#fff!important}.fl-builder-ui-skin--dark .fl-color-picker-color.fl-color-picker-empty{background:#1a1b22}.fl-color-picker-color.fl-color-picker-empty .fl-color-picker-icon{fill:#6f7881}.fl-builder-ui-skin--dark .fl-color-picker-clear{background-color:#121a23}.fl-builder-ui-skin--dark .fl-color-picker-clear:hover{background-color:#373f46}.fl-builder-ui-skin--dark span.fl-builder-block-no-node-templates:hover{background:#1d2025}.fl-builder-ui-skin--dark .fl-builder-settings-tab-description{background:#1d2227}.fl-builder-ui-skin--dark .fl-builder-panel-search button svg .filled-shape{fill:#b5becb}.fl-builder-ui-skin--dark .fl-builder-custom-field,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text],.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url],.fl-builder-ui-skin--dark .fl-builder-settings-fields select,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=email]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=file]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=number]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=password]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=search]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=tel]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=text]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields input[type=url]:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields select:focus,.fl-builder-ui-skin--dark .fl-builder-settings-fields textarea:focus{border-color:#00a0d2!important;color:#fff!important}.fl-builder-ui-skin--dark .fl-builder-settings-fields select{background-image:url(../img/svg/select-arrow-down-alt2-light.svg)!important}.fl-builder-ui-skin--dark .fl-builder-custom-field select,.fl-builder-ui-skin--dark .fl-photo-field select{border-color:#7d8690!important}.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle{color:#6b747d}.fl-builder-ui-skin--dark .fl-builder--main-menu-panel-view-title,.fl-builder-ui-skin--dark .fl-field i.fl-field-responsive-toggle:hover{color:#a8b3bf}.fl-builder-ui-skin--dark .fl-builder--saving-indicator{color:#858f99}.fl-builder-ui-skin--dark .fl-icons-list i:hover{background-color:#16191d;color:#fff}.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:after,.fl-builder-ui-skin--dark .fl-color-picker-clear .fl-color-picker-icon-remove:before{background:#6f7881}.fl-builder-ui-skin--dark .fl-builder--user-templates-section-content{border-color:#1d1d1d}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button{background:0 0;border-right-color:#101215!important}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select.fl-builder-button:hover{background:#181b1f}.fl-builder-ui-skin--dark .fl-theme-builder-preview-select .fl-theme-builder-preview-select-title span{color:#c6cdd6}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu{background:#131a22;border-color:#353c43 #131a22 #131a22}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu:before{border-bottom-color:#353c43}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:focus,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover{background:#383f46}.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a.fl-active,.fl-builder-ui-skin--dark .fl-builder-settings-tabs-overflow-menu>a:hover.fl-active{color:#fff!important;background:#383f46}.fl-builder-ui-skin--dark ul.as-selections{background-color:#121a23}.fl-builder-ui-skin--dark .fl-custom-query .fl-builder-settings-section{border-top:2px solid #1b2026!important}.fl-builder-ui-skin--dark div.fl-field-unit-select{background-color:#181b20!important}.fl-builder-ui-skin--dark .fl-dimension-field-units>*{border-right:1px solid #383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider,.fl-builder-ui-skin--dark .fl-field-popup-slider-input .ui-slider-handle{background:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-arrow:after{border-bottom-color:#383f46}.fl-builder-ui-skin--dark .fl-field-popup-slider-input{background-color:#121a23}.fl-builder-ui-skin--dark .fl-unit-field-input{border-right:1px solid #383f46!important}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"]{background-color:#383f46;color:#fff}.fl-builder-ui-skin--dark .fl-button-group-field-option[data-selected="1"] i{color:#fff!important}.fl-builder-ui-skin--dark .fl-button-group-field-options{background:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle{background-color:#181b20}.fl-builder-ui-skin--dark .fl-compound-field-section-toggle:hover{background-color:#383f46}.fl-builder-ui-skin--dark .fl-compound-field-section-visible .fl-compound-field-section-toggle{border-top-color:#121a23!important;background-color:transparent}.fl-builder-ui-skin--dark .fl-field-connections-toggle i{color:#7c8590}.fl-builder-ui-skin--dark .fl-lightbox .fl-field-connection-content{background-color:#191b20!important}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane>.fl-nanoscroller-slider{background-color:#181b20}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane:hover>.fl-nanoscroller-slider{background-color:#5a646f}.fl-builder-ui-skin--dark .fl-nanoscroller>.fl-nanoscroller-pane.active>.fl-nanoscroller-slider{background-color:#00A0D2}.fl-builder-ui-skin--dark .fl-lightbox div.mce-panel{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox .mce-toolbar .mce-ico{color:#a7b1bb}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary{background:#383f46;border:none;box-shadow:none}.fl-builder-ui-skin--dark .fl-lightbox .fl-builder-settings .wp-switch-editor{background:#23282d}.fl-builder-ui-skin--dark .fl-lightbox .html-active .switch-html,.fl-builder-ui-skin--dark .fl-lightbox .quicktags-toolbar,.fl-builder-ui-skin--dark .fl-lightbox .tmce-active .switch-tmce{background:#383f46}.fl-builder-ui-skin--dark .fl-lightbox textarea.wp-editor-area{background:0 0!important}.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button-secondary:hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button.hover,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:focus,.fl-builder-ui-skin--dark .fl-lightbox .wp-core-ui .button:hover{background:#191b20}
|
extensions/fl-builder-cache-helper/classes/class-fl-builder-cache-helper.php
CHANGED
@@ -9,16 +9,16 @@ class Plugin {
|
|
9 |
private static $plugins = array();
|
10 |
|
11 |
private $actions = array(
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
);
|
17 |
|
18 |
function __construct() {
|
19 |
|
20 |
-
add_action( 'plugins_loaded',
|
21 |
-
add_action( 'plugins_loaded',
|
22 |
add_action( 'fl_builder_admin_settings_save', array( $this, 'save_settings' ) );
|
23 |
}
|
24 |
|
@@ -65,11 +65,11 @@ class Plugin {
|
|
65 |
if ( class_exists( 'FL_Cache_Buster' ) ) {
|
66 |
$settings = self::get_settings();
|
67 |
if ( $settings['enabled'] ) {
|
68 |
-
remove_action( 'upgrader_process_complete',
|
69 |
-
remove_action( 'fl_builder_after_save_layout',
|
70 |
remove_action( 'fl_builder_after_save_user_template', array( 'FL_Cache_Buster', 'clear_caches' ) );
|
71 |
-
remove_action( 'fl_builder_cache_cleared',
|
72 |
-
remove_action( 'template_redirect',
|
73 |
}
|
74 |
}
|
75 |
}
|
9 |
private static $plugins = array();
|
10 |
|
11 |
private $actions = array(
|
12 |
+
'fl_builder_cache_cleared',
|
13 |
+
'fl_builder_after_save_layout',
|
14 |
+
'fl_builder_after_save_user_template',
|
15 |
+
'upgrader_process_complete',
|
16 |
);
|
17 |
|
18 |
function __construct() {
|
19 |
|
20 |
+
add_action( 'plugins_loaded', array( $this, 'unload_helper_plugin' ) );
|
21 |
+
add_action( 'plugins_loaded', array( $this, 'load_files' ) );
|
22 |
add_action( 'fl_builder_admin_settings_save', array( $this, 'save_settings' ) );
|
23 |
}
|
24 |
|
65 |
if ( class_exists( 'FL_Cache_Buster' ) ) {
|
66 |
$settings = self::get_settings();
|
67 |
if ( $settings['enabled'] ) {
|
68 |
+
remove_action( 'upgrader_process_complete', array( 'FL_Cache_Buster', 'clear_caches' ) );
|
69 |
+
remove_action( 'fl_builder_after_save_layout', array( 'FL_Cache_Buster', 'clear_caches' ) );
|
70 |
remove_action( 'fl_builder_after_save_user_template', array( 'FL_Cache_Buster', 'clear_caches' ) );
|
71 |
+
remove_action( 'fl_builder_cache_cleared', array( 'FL_Cache_Buster', 'clear_caches' ) );
|
72 |
+
remove_action( 'template_redirect', array( 'FL_Cache_Buster', 'donotcache' ) );
|
73 |
}
|
74 |
}
|
75 |
}
|
extensions/fl-builder-cache-helper/plugins/defines.php
CHANGED
@@ -3,7 +3,7 @@ namespace FLCacheClear;
|
|
3 |
class Defines {
|
4 |
|
5 |
var $actions = array(
|
6 |
-
|
7 |
);
|
8 |
|
9 |
static function run() {
|
3 |
class Defines {
|
4 |
|
5 |
var $actions = array(
|
6 |
+
'fl_builder_init_ui',
|
7 |
);
|
8 |
|
9 |
static function run() {
|
extensions/fl-builder-cache-helper/plugins/hummingbird.php
CHANGED
@@ -8,8 +8,8 @@ class Hummingbird {
|
|
8 |
static function run() {
|
9 |
if ( class_exists( '\WP_Hummingbird_Utils' ) ) {
|
10 |
if ( \WP_Hummingbird_Utils::get_module( 'page_cache' )->is_active() ) {
|
11 |
-
|
12 |
-
|
13 |
}
|
14 |
}
|
15 |
}
|
8 |
static function run() {
|
9 |
if ( class_exists( '\WP_Hummingbird_Utils' ) ) {
|
10 |
if ( \WP_Hummingbird_Utils::get_module( 'page_cache' )->is_active() ) {
|
11 |
+
\WP_Hummingbird_Utils::get_module( 'page_cache' )->clear_cache();
|
12 |
+
\WP_Hummingbird_Module_Page_Cache::log_msg( 'Cache cleared by Beaver Builder.' );
|
13 |
}
|
14 |
}
|
15 |
}
|
extensions/fl-builder-multisite/classes/class-fl-builder-multisite.php
CHANGED
@@ -14,10 +14,10 @@ final class FLBuilderMultisite {
|
|
14 |
* @return void
|
15 |
*/
|
16 |
static public function init() {
|
17 |
-
add_action( 'wpmu_new_blog',
|
18 |
-
add_filter( 'wpmu_drop_tables',
|
19 |
-
add_filter( 'fl_builder_activate',
|
20 |
-
add_filter( 'fl_builder_uninstall',
|
21 |
}
|
22 |
|
23 |
/**
|
@@ -48,8 +48,8 @@ final class FLBuilderMultisite {
|
|
48 |
global $blog_id;
|
49 |
global $wpdb;
|
50 |
|
51 |
-
$original_blog_id
|
52 |
-
$blog_ids
|
53 |
|
54 |
foreach ( $blog_ids as $id ) {
|
55 |
switch_to_blog( $id );
|
@@ -92,8 +92,8 @@ final class FLBuilderMultisite {
|
|
92 |
global $blog_id;
|
93 |
global $wpdb;
|
94 |
|
95 |
-
$original_blog_id
|
96 |
-
$blog_ids
|
97 |
|
98 |
foreach ( $blog_ids as $id ) {
|
99 |
switch_to_blog( $id );
|
@@ -131,7 +131,7 @@ final class FLBuilderMultisite {
|
|
131 |
$like = like_escape( esc_sql( $blog_id ) );
|
132 |
}
|
133 |
|
134 |
-
return $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE blog_id = '%s'", $like ) );
|
135 |
}
|
136 |
}
|
137 |
|
14 |
* @return void
|
15 |
*/
|
16 |
static public function init() {
|
17 |
+
add_action( 'wpmu_new_blog', __CLASS__ . '::install_for_new_blog', 10, 6 );
|
18 |
+
add_filter( 'wpmu_drop_tables', __CLASS__ . '::uninstall_on_delete_blog' );
|
19 |
+
add_filter( 'fl_builder_activate', __CLASS__ . '::activate' );
|
20 |
+
add_filter( 'fl_builder_uninstall', __CLASS__ . '::uninstall' );
|
21 |
}
|
22 |
|
23 |
/**
|
48 |
global $blog_id;
|
49 |
global $wpdb;
|
50 |
|
51 |
+
$original_blog_id = $blog_id;
|
52 |
+
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
|
53 |
|
54 |
foreach ( $blog_ids as $id ) {
|
55 |
switch_to_blog( $id );
|
92 |
global $blog_id;
|
93 |
global $wpdb;
|
94 |
|
95 |
+
$original_blog_id = $blog_id;
|
96 |
+
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
|
97 |
|
98 |
foreach ( $blog_ids as $id ) {
|
99 |
switch_to_blog( $id );
|
131 |
$like = like_escape( esc_sql( $blog_id ) );
|
132 |
}
|
133 |
|
134 |
+
return $wpdb->get_row( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE blog_id = '%s'", $like ) ); // @codingStandardsIgnoreLine
|
135 |
}
|
136 |
}
|
137 |
|
fl-builder.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Beaver Builder Plugin (Lite Version)
|
4 |
* Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
|
5 |
* Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
|
6 |
-
* Version: 2.2.
|
7 |
* Author: The Beaver Builder Team
|
8 |
* Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
|
9 |
* Copyright: (c) 2014 Beaver Builder
|
3 |
* Plugin Name: Beaver Builder Plugin (Lite Version)
|
4 |
* Plugin URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-uri
|
5 |
* Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
|
6 |
+
* Version: 2.2.1.4
|
7 |
* Author: The Beaver Builder Team
|
8 |
* Author URI: https://www.wpbeaverbuilder.com/?utm_medium=bb&utm_source=plugins-admin-page&utm_campaign=plugins-admin-author
|
9 |
* Copyright: (c) 2014 Beaver Builder
|
fonts/fontawesome/css/all.min.css
CHANGED
@@ -1,5 +1 @@
|
|
1 |
-
/*!
|
2 |
-
* Font Awesome Free 5.6.3 by @fontawesome - https://fontawesome.com
|
3 |
-
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
4 |
-
*/
|
5 |
-
.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
|
1 |
+
.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-volume:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900}
|
|
|
|
|
|
|
|
fonts/fontawesome/webfonts/fa-brands-400.eot
CHANGED
Binary file
|
fonts/fontawesome/webfonts/fa-brands-400.svg
CHANGED
@@ -1,1260 +1,3300 @@
|
|
1 |
-
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
-
Font Awesome Free 5.
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
-
<svg xmlns="http://www.w3.org/2000/svg">
|
|
|
|
|
|
|
|
|
|
|
8 |
<defs>
|
9 |
-
<font id="fontawesome-free" horiz-adv-x="640.4">
|
10 |
-
<font-face font-family="Font Awesome 5 Brands"
|
11 |
-
units-per-em="512" ascent="448"
|
12 |
-
descent="64"
|
13 |
-
font-weight="400"
|
14 |
-
font-style="Regular" />
|
15 |
-
<missing-glyph horiz-adv-x="0" />
|
16 |
-
<glyph glyph-name="500px"
|
17 |
-
unicode=""
|
18 |
-
horiz-adv-x="448" d=" M103.3 103.7C96.8 117.9 96.4 122 110.7 126.8C136.3 134.8 118.7 117.6 153.9 77.6H154.2V171.5C155.4 221.7 198.2 263.7 251.9000000000001 263.7C305.8 263.7 349.6 220.2 349.6 166.9C349.6 103.5 288.8 53.7 221.1 73.6C210.6 77.8 219 105.3 229.6 102.2C282.6 102.2 319 112.3 319 166.6C319 227.6 241.9 256.2000000000001 202.1 211.2C178.6 184.8 184.5 169.1 184.5 53.6C235.2 22.6 302.8 31.6 344.9 73.7000000000001C369.7 98.5000000000001 383.4 131.7000000000001 383.4 166.7000000000001C383.4 201.9 369.6 234.9000000000001 344.6 260.0000000000001C319.8 284.8000000000001 286.8 298.5000000000001 251.3 298.5000000000001S182.5 284.7000000000001 157.8 260.0000000000001C157.5 259.7000000000001 141.8 243.5000000000001 136.6 236.1000000000001L136.1 235.5000000000001C132.8 230.8000000000001 129.8 226.4000000000001 116 229.4000000000001C109.1 231.1000000000001 101.7 235.2000000000001 101.7 241.2000000000001V428C101.7 433 105.6 438.5 112.2 438.5H353.5C361.8 438.5 361.8 426.9 361.8 423.4C361.8 419.5 361.8 408.3 353.5 408.3H130.3V275.4H130.6C234.8 385.2 413.4000000000001 311.4 413.4000000000001 166.5C413.4000000000001 -11.6 168.6 -53.8 103.3 103.7zM166.6 364.5C166.1 360.3 171.2 340 181.2 343.9C306 391.4 384 303.5 390.6 303.5C395.4000000000001 303.5 413.4000000000001 318.8 404.9000000000001 326.3C311.7000000000001 415.3 170.4 383.3 166.6 364.5zM393 33.3C283 -76.6 94 -27.5 61 137.5C61 149.7 30.6 144.9 32.1 134.2C56.1 -39.2 278.1 -122.7 413.7000000000001 12.9C420.6 20.7 401.1 41.3 393.0000000000001 33.3zM213.6 141.4C213.6 137.4 217.9 134.1 219.1 132.9C222.1 129.9 225.2 128.5 227.6 128.5C231.4 128.5 230.2 128.3 249.9 148C269.5 128.7 269 128.5 272.2 128.5C277.6 128.5 290.7 138.9 282.9 146.7L265.6 164L283.8 182.2C290.1 189 273.7 204 267.6 197.9L249.7 180C231.1 198.8 231.3 199.5 228.2 199.5C223.2 199.5 210.2 187.8 215.8 182.2L234 164C215.9 146.1 213.6 144.8 213.6 141.4z" />
|
19 |
-
<glyph glyph-name="accessible-icon"
|
20 |
-
unicode=""
|
21 |
-
horiz-adv-x="448" d=" M423.9 192.2L411 34.9C407.7 -5.8 347.1 -0.2 350.4 39.8L360.4 162.3L319.3 160C329.4 139.3 335.1 116.1 335.1 91.4999999999999C335.1 50.3 319 12.8 292.8 -15.0000000000001L253.5 24.3C311.3999999999999 87.9999999999999 266.6 191.5 179.5 191.5C153.5999999999999 191.5 130 181.6 112.2999999999999 165.5L73 204.8C95 225.5 123.1 239.9 154.4 245L229.7 330.7L187.1 355.5L135.5 309.5C105.5 282.7 64.9 328 95 354.9L163 415.6C172.8 424.4000000000001 187.1 425.8 198.5 419.2C198.5 419.2 337.8 338.3 338 338.1C354.2 328 358.7 302.1 344.1 285.5L285.7 219L391.8 224.9C410.3 226 425.4 210.5 423.9 192.2zM359 346.2C387.1 346.2 409.9 369 409.9 397.1C409.9 425.2 387.1 448 359 448C330.9 448 308.1 425.2 308.1 397.1C308.1 369 330.9000000000001 346.2 359 346.2zM179.6 -8.5C99 -8.5 52.2 82.1 96.9 147.6L57.2 187.3C36.4 161 24 127.7 24 91.6C24 -39.1 174.7 -109.7999999999999 275.4 -30.9L235.7 8.8C219.7 -2.1 200.4 -8.5 179.6 -8.5z" />
|
22 |
-
<glyph glyph-name="accusoft"
|
23 |
-
unicode=""
|
24 |
-
horiz-adv-x="640" d=" M482.2 75.9C476.5 82.8 250 373 242.3 382.5C228.6 399.7 242.3 399.3 261.5 399.4C271.2 399.5 367.8 400 378 400C402.1 400.1 406.7 399.4 416.4 387.2C418.5 384.5 621.5 141.4 623.5999999999999 138.9C629.0999999999999 132.2 638.8 119.8 630.8 115.5C628.4 114.2 516.1999999999999 67.8 513 66.6C502.9 62.6 495.5 59.8 482.2 75.9M596.9 81.5000000000001S481.9 31.1000000000001 479.4 29.9C463.4 22.6 452.5 33.1 442.7 44.5000000000001L385.6 118.5000000000001C380.2 119.4 325.2 128.1000000000001 320.3 127.8000000000001C317.2 127.6000000000001 310.7 127.0000000000001 305.9 124.9000000000001C301 122.8000000000001 160.7 72.1000000000001 155.7 70.2000000000001C150.6 68.2000000000001 144.3 66.6000000000001 144.6 62.6000000000001C144.8 60.1000000000001 146.6 60.0000000000001 149.2 59.1000000000001C151.9 58.3000000000001 450.1 -8.4999999999999 457.2 -9.9999999999999C472.8 -13.2999999999999 495.7 -20.4999999999999 510.8 -11.6999999999999C512.9 -10.4999999999999 634.6 64.7000000000002 636.6 66.1000000000001C642 70.1000000000001 640.9 72.9000000000002 634.9 74.3000000000001C632.6 74.6000000000001 610.3 79.0000000000001 596.9 81.5000000000001M270.9 262.8000000000002S258.9 261.2000000000002 245.9 247.7000000000002C236.9 238.4000000000001 3.8 8.6000000000001 2.5 6.8000000000001C-4.5 -3.1999999999999 4.1 1e-13 18.2 5.1000000000001C19 5.1000000000001 132.7 41.7000000000002 132.7 41.7000000000002C133.2 42.3000000000002 132.6 41.8000000000002 133.3 42.3000000000002C132.9 47.4000000000002 132.5 68.5000000000002 132.3 70.0000000000002C131.7 75.2000000000002 134.5 76.9000000000002 139.3 78.9000000000002L231.9 112.7000000000002C232.5 113.5000000000002 320.4 194.4000000000002 322.1 196.0000000000002V197.0000000000002L270.9 262.8000000000002" />
|
25 |
-
<glyph glyph-name="acquisitions-incorporated"
|
26 |
-
unicode=""
|
27 |
-
horiz-adv-x="344.76" d=" M344 448C343.19 442.53 342.37 437.21 341.61 431.88C340.2200000000001 422.14 338.7100000000001 412.4 337.56 402.63C337.21 399.67 336.35 398.31 333.26 398.3C312.65 398.19 292.05 398.16 271.44 397.77C252.68 397.42 233.86 397.49 215.21 395.77C201.79 394.53 191.93 383.1 196.33 369.13C204.88 342.02 223.98 300.03 232.7 279.68C298.42 125.54 294.13 122.69 316.7000000000001 121.12C323.3700000000001 120.66 330.1 121.05 337.1300000000001 121.05C338.5200000000001 111.65 339.7900000000001 103.01 341.1800000000001 93.54H225.17V120.54C235.5 120.54 245.53 120.66 255.55 120.48C259.07 120.42 260.6 121.11 258.99 124.85C254.55 135.1400000000001 250.22 145.48 245.74 155.75C244.12 159.47 241.68 160.53 237.34 159.27C225.02 155.68 212.55 152.58 200.08 149.58C195.83 148.56 194.15 146.81 194.22 142.12C195.07 84.65 195.17 14.59 195.22 13C195.62 0.46 203.97 -8.41 216.25 -10.07C217.14 -10.19 229.14 -12.79 328.93 -12.63C337.18 -12.62 337.3400000000001 -12.46 338.5 -20.19C340.65 -34.53 342.64 -48.89 344.76 -63.72C-22.99 -63.72 190.83 -64.33 7.67 -63.72C3.72 -63.71 1.59 -63.03 2.39 -57.98C4.43 -45.12 5.89 -32.16 7.36 -19.22C7.91 -14.41 9.65 -12.41 14.99 -12.45C133.08 -13.4400000000001 129.92 -12.8000000000001 136.42 -10.0600000000001C145.84 -6.08 151.4 2.79 151.37 13.0099999999999C151.25 55.9399999999999 151.04 98.87 151.12 141.8C151.13 145.67 149.96 147.79 146.56 148.6399999999999C130.92 152.56 115.25 156.3499999999999 98.98 160.3399999999999C93.75 148.0699999999999 88.59 135.9699999999999 83.32 123.6399999999999C85.15 120.2899999999999 111.7 120.7099999999999 118.6 120.7099999999999V93.0699999999999H4.34C5.37 101.68 6.11 109.8799999999999 7.57 117.9499999999999C7.82 119.36 11.1 121.0899999999999 13.04 121.17C21.5 121.52 29.99 121.46 38.47 121.2599999999999C42.46 121.17 44.39 122.3 46.08 126.42C62.71 167.12 59.59 157.59 113.39 287.39C144.92 363.48 146.45 363.41 146.03 374.82C145.34 393.38 120.66 397.08 108.38 396.93C78.34 396.55 69.93 397.4 6.54 397.4C-0.62 441.89 2.37 429.46 0.16 442.68C-0.55 446.92 1.19 447.9700000000001 4.8 447.98M117.88 200.79C120.18 199.64 121.85 198.5 123.7 197.92C136.99 193.71 150.34 189.68 163.63 185.46C169.77 183.51 175.61 183.34 181.93 185.41C194.95 189.69 208.22 193.22 221.36 197.14C222.82 197.58 224.1 198.58 225.29 199.23C218.58 216.6 212.17 233.38 205.62 250.11C196.74 272.78 187.99 310.43 178.64 332.92C177.11 333.7 176.73 330.56 169.21 332.92C152.1 288.87 135.07 245.04 117.88 200.79z" />
|
28 |
-
<glyph glyph-name="adn"
|
29 |
-
unicode=""
|
30 |
-
horiz-adv-x="496" d=" M248 280.5L312.9 181.7H183.1L248 280.5zM496 192C496 55.1 384.9 -56 248 -56S0 55.1 0 192S111.1 440 248 440S496 328.9 496 192zM396.2 109.3L248 332.5L99.8 109.3H130.2L163.8 161H332.4L366 109.3H396.2z" />
|
31 |
-
<glyph glyph-name="adobe"
|
32 |
-
unicode=""
|
33 |
-
horiz-adv-x="460.8" d=" M289.9 383.7H460.8V-0.3L289.9 383.7zM170.9 383.7H0V-0.3L170.9 383.7zM230.4 241.6L337.9 -0.3H264.9L234.2 76.5000000000001H155.5L230.4 241.6000000000001z" />
|
34 |
-
<glyph glyph-name="adversal"
|
35 |
-
unicode=""
|
36 |
-
horiz-adv-x="512" d=" M482.1 416H28.7C5.8 416 0 410.1 0 387.1V-3.1C0 -26.4 5.8 -32 28.7 -32H482.1C506.4999999999999 -32 511.9999999999999 -26.8 511.9999999999999 -2.3V385.8C511.9999999999999 410.4 506.6 416 482.1 416zM178.4 227.7C150.9 247.9 106.3 236.4 94.2 204.3C89.9 193.2 84.9 194.8 76.7 196C67 197.5 59.5 199.2 54.2 201.5C25.4 212.9 62.8 256.8 79.1 265.8C120.2 287.2 162.5 288 204.4 270.6C245.3 253.8 238.9 211.4 238.9 142.1C241.6 116.3 234.6 83.8 248.2 53.3C250.1 48.9 248.6 45.4 245.5 42.6C237.1 35.9 206.2 40.4 198.9 49.9999999999999C197 52.1999999999999 197.1 53.6 195 56.1999999999999C191.4 60.0999999999999 187.7 58.3999999999999 183.1 55.1999999999999C125.7 18.8 42.8 33.8 36.1 98.4999999999999C33 127.8 48.5 155.6 75.7 169.5C113.9 189 187.9 181.3 189.7 200.4C190.8 210.5999999999999 187.8 220.5 178.4 227.7zM465.1 5.7C465.1 -9.4 454 -4.2 447.3 -4.2H52.4C45 -4.2 34.2 -9 34.6 6.5C35 20.4 45.1 15.6 51.7 15.6C184 16 316.2 16 448.5 15.6C455.3 15.6 465.1 20 465.1 5.7zM468.9 346.2V55.2C468.9 49.5 468.2 41.3 460.8 41.3C448.4000000000001 41.7 433.3 34.2 424.7 46.9C418.9 55.6 416.9 50.9 412.3 48.1C358.9000000000001 18.4 284.2000000000001 41 267.9 133.3C261.8 166.7 267.2 200.4 283.6 233.3C295.4 257.2000000000001 340.5 309.4 419.7 263.8V334.8C419.7 361 419.5999999999999 361 445.7 361C448.8 361 452.3 360.6 455.3999999999999 361C465.4999999999999 361.8 468.9999999999999 356.6 468.9999999999999 346.7000000000001C468.8999999999999 346.5 468.8999999999999 346.4000000000001 468.8999999999999 346.2000000000001zM417.4000000000001 113.9C397.9000000000001 66.3 344.5 70.6 327.4000000000001 108.7C312.3 142 311.9000000000001 176.9 327.8 210.2C344.1 244.3 387.5 245.9 409.3 215C429.9000000000001 186.2 424.2 130.4 417.4000000000001 113.9zM122.6 78.6C115.1 79.9 89.6 81.9 88.9 106.4C88.5 120.3 96.7 129.4 108.7 132.2C133.1 138.1 158 142.1 182.4 146.9C191.3000000000001 148.9 189.8000000000001 142.5 190.2000000000001 137.4C191.6000000000001 104.4 164.1000000000001 78.2 122.6000000000001 78.6z" />
|
37 |
-
<glyph glyph-name="affiliatetheme"
|
38 |
-
unicode=""
|
39 |
-
horiz-adv-x="512" d=" M159.7 210.6C108.4 139.7 43.1 99.8 14 121.4C-15.2 143.1 2.8 218 54.2 288.9C105.5 359.8 170.8 399.7 199.9 378.1C229 356.5 211 281.5 159.7 210.6zM510.9 267.9C437.1 144.5 319 80.2 246.4 124.3C221.4 139.5 205.1 165.5 197.4 198.1C163.8 133.3 104.6 84.3 33.3 64.9C83.1 5.6 157.4 -32 240.3 -32C390.3 -32 511.9 91.1 511.9 242.9C512 251.4 511.6 259.7 510.9 267.9z" />
|
40 |
-
<glyph glyph-name="algolia"
|
41 |
-
unicode=""
|
42 |
-
horiz-adv-x="448" d=" M229.3 265.4C180 265.4 140.1 225.5 140.1 176.2C140.1 126.9 180 87 229.3 87S318.5 126.9 318.5 176.2C318.5 225.5 278.5 265.4 229.3 265.4zM292 208.8L233.1 178.2C231.3 177.3 229.3 178.6 229.3 180.5V247C229.3 248.5 230.6 249.7 232 249.6C258.2 248.6 280.9 233.9 293.1 212.5C293.8 211.2 293.3 209.5 292 208.8zM389.1 416H58.9C26.4 416 0 389.6 0 357.1V27C0 -5.6 26.4 -32 58.9 -32H389C421.6 -32 447.9 -5.6 447.9 26.9V357.1C448 389.6 421.6 416 389.1 416zM186.5 331.3C186.5 342.1 195.2 350.8 206 350.8H251.3C262.1 350.8 270.8 342.1 270.8 331.3V315.9C270.8 314.1 269.1 312.9 267.5 313.4C255.2 316.8 242.4 318.5 229.4 318.5C215.9 318.5 202.7 316.7 190 313C188.3 312.5 186.6 313.8 186.6 315.5V331.3zM102.1 294.3L111.3 303.5C118.9 311.1 131.2 311.1 138.8 303.5L146.5 295.8C147.6 294.7000000000001 147.5 292.8 146.2 291.8C140 287.3 134.1 282.4 128.6 276.9C123.2 271.5 118.2 265.6 113.8 259.5C112.8 258.2 110.9 258 109.8 259.2L102.1 266.9C94.5 274.4 94.5 286.7 102.1 294.3zM229.3 49.5C159.3 49.5 102.7 106.2 102.7 176.1S159.4 302.7000000000001 229.3 302.7000000000001C299.3 302.7000000000001 355.9 246.1 355.9 176.1C355.9 106.3 299.2 49.5 229.3 49.5z" />
|
43 |
-
<glyph glyph-name="alipay"
|
44 |
-
unicode=""
|
45 |
-
horiz-adv-x="448" d=" M377.74 416H70.26C31.41 416 0 384.5900000000001 0 345.74V38.26C0 -0.59 31.41 -32 70.26 -32H377.74C416.26 -32 447.5 -0.92 448 37.6C402.04 63.22 337.41 97.9400000000001 276.4 126.04C244.33 82.0700000000001 192.26 45.04 127.78 45.04C57.19 45.04 34.05 90.34 30.74 121.41C26.77 160.42 45.62 202.91 130.26 202.91C165.64 202.91 209.61 192.66 257.39 177.9500000000001C273.92 208.0400000000001 283.84 238.2900000000001 283.84 238.2900000000001H105.64V254.9900000000001H197.72V286.23H88.28V305.24H197.72V355.66H248.64V305.24H358.08V286.23H248.63V254.99H337.4S322.19 208.37 299.05 164.07C347.98 147.37 399.06 128.03 447.67 111.33V345.74C447.83 384.43 416.43 416 377.74 416zM47.28 125.05C48.27 104.88 57.53 71.32 117.21 71.32C169.28 71.32 209.79 111 235.08 144.22C190.45 162.9 150.6 175.6300000000001 125.64 175.6300000000001C58.19 175.6300000000001 46.29 142.5700000000001 47.28 125.0500000000001z" />
|
46 |
-
<glyph glyph-name="amazon-pay"
|
47 |
-
unicode=""
|
48 |
-
horiz-adv-x="611.2" d=" M0 122.8C2.3 127 5.2 127.7 9.7 125.3C20.1 119.7 30.3 113.9 40.9 108.6C81.6 88.2000000000001 124.1 73 168.3 62.3C189.2 57.3 210.2 53.3 231.5 50.5C263 46.3 294.7 44.5 326.5 45.3C343.9 45.7 361.3 47.1 378.6 49.1C435 55.8 489.5 69.9 541.9000000000001 91.9C544.8000000000001 93.1 547.8000000000001 93.9 551.0000000000001 93.1C557.7000000000002 91.3 560.0000000000001 84.1 555.1000000000001 79.2000000000001C552.3000000000002 76.4 548.8000000000002 74.1 545.5000000000001 71.8000000000001C514.8000000000001 50.7 481.3000000000001 35.4000000000001 445.9000000000001 23.9000000000001C421.3000000000001 16.0000000000001 396.3000000000001 10.1000000000001 370.8000000000001 6.3000000000001C353.2000000000001 3.7 335.4000000000001 1.9000000000001 317.6000000000001 1.5000000000001C316.8000000000001 1.5000000000001 315.9000000000001 1.3000000000001 315.1000000000001 1.2H294C293.2 1.3000000000001 292.3 1.5000000000001 291.5 1.5000000000001C287.9 1.7 284.3 1.8000000000001 280.8 1.9C263.9000000000001 2.6 247.1 4.5000000000001 230.4 7.2C203 11.7 176.2 18.6 150 28.1C95.9 47.7 47.4 76.7000000000001 4.4 115.1C2.6 116.7000000000001 1.4 118.9 0 120.8V122.8zM158 383C156.6 382.8 155.1 382.6 153.7 382.4C139.7 380.7 127.1 375.5 115.7 367.3C113.3 365.6 111.1 363.8 108.6 361.9C108.4 362.4 108.2 362.9 108.2 363.3C107.8 366 107.4 368.8 106.9 371.5C106.2 376.1 103.9 378.1 99.3 378.1H87.8C80.9 378.1 79.6 376.8 79.6 369.9V160.6C79.6 159.6 79.6 158.6 79.7 157.6C79.9 154.6 81.7 152.7000000000001 84.6 152.6C91.6 152.5 98.7 152.5 105.7 152.6C108.6 152.6 110.4 154.6 110.7 157.6C110.8 158.6 110.8 159.6 110.8 160.6V233C111.9 232.1 112.5 231.6 113 231.1C130.9 216.2 151.5 211.3 174 215.7C194.4 219.7 208.6 232.2 217.8 250.6C224.8 264.5 227.7 279.3 228.1 294.7C228.6 311.8 226.9000000000001 328.6 220 344.5C211.5 364.1 197.4 377 176.1 381.4C172.9 382.1 169.6 382.4 166.3 382.9C163.5 383 160.8 383 158 383zM110.6 341.1C110.6 342.6 111 343.5 112.3 344.4C126 353.9 141.1 358.9 157.9 357.6C172.8 356.5 185 349.2 191.4 331.7C195.3 321 196.3 309.9 196.3 298.7C196.3 288.3 195.5 278.1 192.3 268.1C185.5 246.8 169.9 238.7 149.7 239.6C135.7 240.2 123.5 245.6 112.3 253.5C111.1 254.4 110.6 255.2 110.6 256.8C110.7 270.9 110.6 284.9 110.6 299C110.6 313 110.7 327 110.6 341.1zM316.3 383C315.3 382.9 314.3 382.7 313.4000000000001 382.6C303.6 382.1 294.0000000000001 380.9 284.5000000000001 378.5C278.4000000000001 376.9 272.5000000000001 374.7 266.6000000000001 372.7C263.0000000000001 371.5 261.2000000000001 368.9 261.3000000000001 365C261.4000000000001 361.7 261.2000000000001 358.4 261.3000000000001 355.1C261.4000000000001 350.3 263.4000000000001 349 268.1000000000001 350.2C275.9000000000001 352.2 283.7000000000001 354.4 291.6000000000001 355.9C303.9000000000001 358.2 316.3000000000001 359.2 328.8000000000001 357.3C335.3000000000001 356.3 341.4000000000001 354.4 345.6000000000001 348.9C349.3000000000001 344.1 350.7000000000001 338.4 350.9000000000001 332.5C351.2000000000001 324.2 351.1000000000001 315.9 351.2000000000001 307.6C351.2000000000001 307.2 351.1000000000001 306.7 351.0000000000001 306.2C350.5000000000001 306.3 350.1000000000002 306.2 349.7000000000001 306.3C339.2000000000001 308.8 328.6000000000001 310.6 317.7000000000001 311.2C306.4000000000001 311.8 295.2000000000001 311.1 284.4000000000001 307.3C271.5000000000001 302.8 261.1000000000001 295 255.0000000000001 282.4C250.3000000000001 272.6 249.6000000000001 262.2 251.1000000000001 251.7C253.1000000000001 237.7 260.1000000000001 226.9 272.5000000000001 220C284.4000000000001 213.4 297.3000000000001 212.6 310.4000000000001 214.6C325.5000000000001 216.9 338.9000000000001 223.3 350.7000000000001 233C351.1 233.4 351.6 233.7 352.3000000000001 234.1C352.9000000000001 230.3 353.4000000000001 226.7 354.1000000000001 223.1C354.7000000000001 220 356.6000000000001 218 359.5000000000001 217.9C364.9000000000001 217.8 370.4000000000001 217.8 375.8000000000001 217.9C378.5000000000001 218 380.3000000000001 219.8 380.6000000000001 222.6C380.7000000000001 223.5 380.7000000000001 224.5 380.7000000000001 225.4V331.4C380.7000000000001 335.7 380.5000000000001 340 379.8000000000002 344.3C377.9000000000002 357.2000000000001 372.4000000000002 367.8 360.8000000000002 374.7000000000001C354.1000000000002 378.7000000000001 346.7000000000001 380.7000000000001 339.0000000000001 381.8C335.4000000000001 382.3 331.8000000000002 382.6 328.2000000000001 383.1C324.3000000000002 383 320.3000000000002 383 316.3000000000002 383zM351.3 255.3C351.3 254 350.9000000000001 253.1 349.8 252.3C338.6 244.2 326.3 238.8 312.4000000000001 237.4C306.7000000000001 236.8 301.0000000000001 237 295.6 239.2C289.3 241.7 285.2000000000001 246.1 283.2000000000001 252.5000000000001S281.2000000000001 265.5 283.1 271.9000000000001C285.6 280.2000000000001 291.5 284.9000000000001 299.5 287.5C307.6 290.1 316 290.5 324.3 289.7000000000001C332.7 289 340.9000000000001 287.4 349.3 286.3C350.9000000000001 286.1 351.4000000000001 285.3 351.4000000000001 283.7000000000001C351.3 278.9 351.4000000000001 274.2000000000001 351.4000000000001 269.4C351.3 264.7000000000001 351.2000000000001 260 351.3 255.3zM611.2 125.9C610.2 130.9 606.4000000000001 132.8 602.1 134.2C595.3000000000001 136.5 588.2 137.5 581.1 138.1C568 139.2 554.9 138.6 541.9 136.2C527.6 133.5 514 128.9 501.9 120.6C500.5 119.6 499.1 118.5 498.2 117.1C497.5 116 497.3 114.3 497.7 113.1C498.1 111.6 499.8 111.2 501.3 111.3C502 111.3 502.8 111.3 503.5 111.4C511.3 112.2 519 113.1 526.8 113.9C538.1999999999999 115 549.6999999999999 115.7 561.0999999999999 114.8C565.8999999999999 114.5 570.8 113.4 575.4999999999999 112.1C580.5999999999999 110.7 582.8999999999999 106.9 583.0999999999999 101.7C583.4999999999999 93.7 581.6999999999999 86 579.5999999999999 78.4C575.4999999999999 63 569.5999999999999 48.1 563.8 33.3C563.4 32.3 563 31.3 562.8 30.3C562.3 27.4 564 25.4999999999999 566.9 26.1999999999999C568.6 26.5999999999999 570.5 27.4999999999999 571.6999999999999 28.6999999999999C576.0999999999999 32.9999999999999 580.5999999999999 37.3 584.4 42.0999999999999C597.1999999999999 58.4999999999999 604.6999999999999 77.3999999999999 609.1 97.6999999999999C609.9 101.3 610.5 104.9999999999999 611.2 108.5999999999999V125.8999999999999zM479.1 249.1C466.2 284.8 453.3 320.6 440.4000000000001 356.3C438.4000000000001 362 436.2000000000001 367.6 434.1 373.2C433 376.1 430.9000000000001 378 427.7000000000001 378C420.1 378.1 412.5000000000001 378.2 404.8000000000001 378.1C402.3000000000001 378.1 401.1000000000001 376.1 401.6000000000001 373.6C402.1000000000001 371.5 402.7000000000001 369.5 403.5000000000001 367.5C423.1000000000001 319 442.8000000000001 270.4 462.6000000000001 222C464.3000000000001 217.9 464.7000000000001 214.4 462.8000000000001 210.2C459.5000000000001 202.9 456.9000000000001 195.2 453.5000000000001 187.9C450.5000000000001 181.4 445.5000000000001 176.5 438.3000000000001 174.6C433.2000000000001 173.2 428.1000000000001 173 422.9000000000001 173.5C420.4000000000001 173.6999999999999 417.9000000000001 174.3 415.4000000000001 174.5C412.0000000000001 174.6999999999999 410.3000000000001 173.1999999999999 410.2000000000001 169.6999999999999C410.1000000000001 166.3999999999999 410.1000000000001 163.0999999999999 410.2000000000001 159.8C410.3000000000002 154.3 412.2000000000001 151.8 417.6000000000001 150.9C423.2000000000001 149.9 428.9000000000001 149 434.5000000000001 148.9C451.6000000000001 148.5 465.2 155.4 474.0000000000001 170.3C477.5000000000001 176.1999999999999 480.7 182.4 483.2 188.6999999999999C506.9 248.5 530.3000000000001 308.3999999999999 553.8000000000001 368.3C554.5000000000001 370.0999999999999 555.1 371.8999999999999 555.4000000000001 373.8C555.8000000000001 376.5999999999999 554.5000000000001 378.2 551.7 378.2C545.1 378.3 538.4000000000001 378.2 531.8000000000001 378.2C528.1 378.2 525.5000000000001 376.5999999999999 524.1 373C523.6 371.5999999999999 523 370.3 522.5 368.8999999999999C510.9 335.5999999999999 499.3 302.3 487.7 268.8999999999999C485.2 261.7 482.6 254.3999999999999 480 246.7C479.6 247.8 479.4 248.3999999999999 479.1 249.1z" />
|
49 |
-
<glyph glyph-name="amazon"
|
50 |
-
unicode=""
|
51 |
-
horiz-adv-x="448" d=" M257.2 285.3C208.5 283.5 87.7 269.8 87.7 167.8C87.7 58.3 226 53.8 271.2 124.6C277.7 114.4 306.6 87.1 316.5 77.8L373.3 133.8S341 159.1 341 186.6V333.7C341 359 316.5 416 228.7 416C140.7 416 94 361 94 311.7L167.5 304.9C183.8 354.4 221.7 354.4 221.7 354.4C262.4 354.5 257.2 324.6 257.2 285.3zM257.2 198.5C257.2 118.5 173 130.5 173 181.3C173 228.5 223.5 238 257.2 239.1V198.5zM393.2 35C385.5 25 323.2 -32 218.7 -32S34.2 39.5 9.7 69C2.9 76.7 10.7 80.3 15.2 77.3C88.5 32.8 203 -40.5 387.7 47C395.2 50.7 401 45 393.2 35zM433 32.8C426.5 17 417 6 411.8 1.8C406.3 -2.7 402.3 -0.9 405.3 5.6S424.6 52.1 418 60.6C411.5 68.9 381 64.9 370 63.8C359.2 62.8 357 61.8 356 64.1C353.7 69.8 377.7 79.6 393.5 81.6C409.2 83.4 434.5 82.4 439.5 75.9C443.2 70.8 439.5 48.8 433 32.8z" />
|
52 |
-
<glyph glyph-name="amilia"
|
53 |
-
unicode=""
|
54 |
-
horiz-adv-x="448" d=" M240.1 416C178.2 416 108.6 399.1 55.9 360.6C50.8 357.5 46.8 351.4 48.7 341.2C49.8 336.1 53.8 313.8 58.9 301.6C63 291.4 73.1 291.4 79.2 295.5C111.7 317.8 175.7 343.2 231.5 343.2C289.4 343.2 290.4 314.8 290.4 270.1V231.6C203 220.3 78.2 197 46.7 183.8C11.2 167.5 16.3 90.3 16.3 72S31.5 -32 141.2 -32C189 -32 254.9000000000001 -11.3 294.5 10.1V-15.3C294.5 -18.3 296.6 -23.4999999999999 300.6 -24.4C303.7000000000001 -25.4 351.3 -26.4 360.5 -26.4S423 -26.7 427 -25.7C431.1 -24.7 432.1 -19.6 432.1 -16.6V280C432 360.3 374.2000000000001 416 240.1 416zM152.2 88.3C152.2 100.5 149.2 131 170.5 141.2C194.8 154.4 245.6 170.6 290.3 174.7V68C268.9000000000001 54.8 241.6 43.6 211.2 43.6C158.4 43.6 152.3 77.1 152.2 88.3" />
|
55 |
-
<glyph glyph-name="android"
|
56 |
-
unicode=""
|
57 |
-
horiz-adv-x="448" d=" M89.6 243.5V127.7C89.6 112.3 77.5 100 62.1 100C46.8 100 32 112.4 32 127.7V243.5C32 258.6 46.8 271 62.1 271C77.2 271 89.6 258.6 89.6 243.5zM100.4 86.5C100.4 70.1 113.6 56.9 130 56.9H149.9L150.2 -4.2C150.2 -41.1 205.4 -40.8000000000001 205.4 -4.2V56.9H242.6V-4.2C242.6 -40.9 298.1 -41.0000000000001 298.1 -4.2V56.9H318.3C334.5 56.9 347.7 70.1 347.7 86.5V265.9H100.4V86.5zM348.4 275.6H99.3C99.3 318.4 124.9 355.6 162.9 375L143.8 410.3C141 415.2 148.1 418.3 150.5 414.1L169.9 378.5C204.8 394 244.9 393.2 278.2 378.5L297.5 414C300 418.3 307 415.1 304.2 410.2L285.1 375C322.8 355.6 348.4000000000001 318.4 348.4000000000001 275.6zM177.7 331.1C177.7 336.8 173.1 341.6 167.2 341.6C161.5 341.6 157 336.8 157 331.1S161.6 320.6 167.2 320.6C173.1 320.6 177.7 325.4 177.7 331.1zM291.1 331.1C291.1 336.8 286.5 341.6 280.9000000000001 341.6C275.0000000000001 341.6 270.4000000000001 336.8 270.4000000000001 331.1S275.0000000000001 320.6 280.9000000000001 320.6C286.5000000000001 320.6 291.1 325.4 291.1 331.1zM385.9000000000001 271C370.8 271 358.4000000000001 258.9 358.4000000000001 243.5V127.7C358.4000000000001 112.3 370.8 100 385.9000000000001 100C401.3 100 416.0000000000001 112.4 416.0000000000001 127.7V243.5C416.0000000000001 258.9 401.2000000000001 271 385.9000000000001 271z" />
|
58 |
-
<glyph glyph-name="angellist"
|
59 |
-
unicode=""
|
60 |
-
horiz-adv-x="448" d=" M347.1 232.6C358.8 265.2 392.5 359.5 392.5 389.7C392.5 416.3 376.8 438.6 348.8 438.6C304.2 438.6 264.2000000000001 306.9 251.7 275.5C242 304 196.6 448 156.6 448C125.5 448 110.9 425.1 110.9 396.3C110.9 361 145.1 269.5 157.5 234.3C151.2 236.6 144.4 238.6 137.5 238.6C114.1 238.6 89.2 209.5 89.2 186C89.2 177.1 94.1 164.6 97.2 156.3C60.3 146.3 46.1 121.7 46.1 84.6C46 12.4 114.4 -64 210.6 -64C328.6 -64 402 24.6 402 138.9C402 182 395.1 220.9 347.1 232.6zM311.7 340C315.7 352.3 332.8 404.3 348.8 404.3C357.4000000000001 404.3 359.7 395.4 359.7 388.3C359.7 369.2 321.1 263.7 312.6 240.3L278.6 246.3L311.7 340zM142.3 399.7C142.3 411.6 156.8 445.4 188.6 352.6L223.2 252.3C207.6 253.6 195.5 255.3 187.8 250.9C176.9 279.7000000000001 142.3 370.6 142.3 399.7000000000001zM140 204C169.3 204 207.1 109.4 207.1 96.6C207.1 91.5 202.2 85.2000000000001 196.5 85.2000000000001C175.6 85.2000000000001 119.6 162.1 119.6 182.9C119.7 190.6 132.3 204 140 204zM324.3 17.7C295.2 -14.3 258 -30.9 214.6 -30.9C155.2 -30.9 108.3 1.7 85.7 57.4C68.6 100.8 89.5 125.7 106.3 125.7C117.7 125.7 160.6 65.4 160.6 52.6C160.6 47.7 152.9 44.3 148.9 44.3C132.8000000000001 44.3 126.5 59.8 97.8 95.7C68.1 66 118.3000000000001 8.8 156.1 8.8C182.2 8.8 199.2 32.9999999999999 194.1 50.8C197.8 50.8 202.4 50.4999999999999 205.8 51.4C206.9 24.3 214.9 -8 247.5 -10.3C247.5 -9.4 249.5 -3.2 249.5 -2.9C249.5 14.4999999999999 238.9 29.7 238.9 47.4C238.9 75.7 260.6 103.1 282.6 119.1C290.6 125.1 300.3 128.8 309.7000000000001 132.2C319.4000000000001 135.9 329.7000000000001 140.2 337.1 147.6C336 158.8 331.4000000000001 168.7 320.2000000000001 168.7C292.5000000000001 168.7 199.6000000000001 164.7 199.6000000000001 208.4C199.6000000000001 215.1 199.7000000000001 221.5 217.0000000000001 221.5C249.3000000000001 221.5 331.3000000000001 213.5 355.3000000000001 192.4C373.4000000000001 176.3 379.6000000000001 79.2 324.3000000000001 17.7zM225.7 143.7C235.4 140.6 245.4 139.7 255.4 137.7C248 132.3 241.4 125.7 235.1 118.6C232.3 127.1 228.9 135.4 225.7 143.7z" />
|
61 |
-
<glyph glyph-name="angrycreative"
|
62 |
-
unicode=""
|
63 |
-
horiz-adv-x="640" d=" M640 209.8L636.8 181.6L602.3 179.3L600.3 161.2L634.8 163.5L631.5999999999999 135.3L597.1999999999999 133.1L594.9 113L629.3 115.2L626.3 89.1L561.5999999999999 84.9999999999999L574.3 198.1999999999999L527 82.8L495.1 80.8L471.3 198.6L501.6 200.6L515.2 121.2000000000001L546.9000000000001 203.6000000000001L640.0000000000001 209.8000000000001zM426.8 76.5L455.1 78.3L468 198.4L439.6 196.5L426.8 76.5zM162 59.9L142.6 95.9L139.1 58.5L110.9 56.8L113.6 85.9C102.6 67.9 81.6 51.6 56.7 50.1C23.9 48.1 -3 71 0.3 108.3C2.9 137.6 27 171.1 67.8 173.7000000000001C105.5 176.1 115.4 150.5000000000001 119.1 144.9L121.9 175.7000000000001L160.8 178.2000000000001C180.9 179.5000000000001 199.5 174.5000000000001 203.3 154.5000000000001L205.9 181.1000000000001L270.7 185.3000000000001L268 157.4000000000001L231.6 155.0000000000001L229.9 137.1000000000001L266.3 139.4000000000002L263.6 111.5000000000002L227.2 109.2000000000002L225.3 89.3000000000002L261.6 91.6000000000002L259.5 70.8000000000002L314.5 188.0000000000002L338.3 189.6000000000002L370.4 79L379.3 164.6L357 163.2000000000001L359.8999999999999 191.1L434.8999999999999 196L431.8999999999999 168L407.5999999999999 166.4L397.8999999999999 74.5L339.8999999999999 70.8L335.5999999999999 86.4L296.2 83.9L288.2 67.6L162 59.9zM117.7 130.1L91.3 128.4C84.6 140.8 76.9 145 65 144.2C46 143 31.7 126.7 30.4 110.9C29 94.9 37.7 78.4 59.1 79.7C71.9 80.5 80.4 88.3 88 98.6L115 100.3L117.7 130.1zM173.8 137.8C175 150.6999999999999 166.2 151.4 147.7 150.1999999999999L145 121.6999999999999C159.2 122.5999999999999 172.5 123.8 173.8000000000001 137.8zM194.9 66.9999999999999L200.7 127C195.7 113.5 186 105.8999999999999 172.8 100.3999999999999L194.9 66.9999999999999zM330.3 111.9999999999999L322.4000000000001 149.8L306.6 110.4999999999999L330.3 111.9999999999999zM160.2 186.5999999999999L155.9 204.0999999999999L116.3 201.4999999999999L108.2 183.2999999999999L76.3 181.1999999999999L133.3 303.0999999999999L157.2 304.6999999999999L187.9 202.6999999999999L197.8 307.3999999999999L224.8 309.1999999999999L262.6 245.5999999999999L269.1 312.1999999999999L297.6 314.0999999999999L293.6 272.8999999999999C301 286.3999999999999 316.5 317.5999999999999 357.2000000000001 320.3999999999999C397.7000000000001 323.1999999999999 409.6 291.0999999999999 410.6 290.0999999999999L413.9000000000001 322.0999999999999L453.2 324.7999999999999C465.9 325.6999999999999 481.0000000000001 324.4999999999999 489.5000000000001 315.0999999999999L485.1000000000001 326.9999999999999L517.3000000000001 329.1999999999999L530.2 285.9999999999999L553.2 331.6999999999999L584.2 333.8999999999999L540.6 255.4999999999999L535.8000000000001 211.1999999999999L507.4000000000001 209.2999999999999L512.2 253.5999999999999L496.4 296.5999999999999C497.4 274.2999999999999 487.2 256.4999999999999 464.4 246.9999999999999L489.6 208.1999999999999L453.2 205.7999999999999L434.0000000000001 242.5999999999999L430.0000000000001 204.2999999999999L401.6000000000001 202.3999999999998L404.9000000000001 233.8999999999999C398.2000000000001 224.5999999999998 385.2000000000001 198.4999999999998 345.3000000000001 195.8999999999998C319.1000000000001 194.1999999999999 299.7000000000001 206.1999999999999 289.9000000000001 235.0999999999999L285.9000000000001 194.7999999999999L260.9000000000001 193.1999999999999L223.3000000000001 256.4999999999999L217.0000000000001 190.2999999999999L160.2000000000001 186.5999999999999zM436.8000000000001 268.7C447.0000000000001 269.3999999999999 454.3000000000001 270.7999999999999 458.4000000000001 272.9999999999999C462.9000000000001 275.3999999999999 465.4000000000001 279.3999999999999 466.0000000000001 285.0999999999999C466.6000000000001 290.3999999999999 465.4000000000001 293.8999999999999 462.6000000000001 295.4999999999999C459.0000000000001 297.5999999999999 452.0000000000001 298.3 439.7000000000002 297.4999999999999L436.8000000000002 268.7zM327.7 234C333.3 228.1 340.4 225.5 349 226.1C353.7 226.4 358.1 227.9 362.3 230.2C367.8 233.2 372.9000000000001 238.2 377.4000000000001 244.5L343.2000000000001 242.2L345.6 266.1L408.7000000000001 270.4L409.9000000000001 282.4L378.7000000000001 280.3C374.6 284 370.9000000000001 286.9 367.6 288.4C363.6 290.1 359.5 291.2000000000001 355.4000000000001 290.9C347.4000000000001 290.4 340.1 287.3 333.4000000000001 281.7000000000001C325.7000000000001 275.3 321.4000000000001 267.2000000000001 320.5000000000001 257.3C319.4000000000001 247.7 321.9000000000001 240 327.7000000000001 234zM126.4 225.8L150.2 227.4L141.9 265L126.4 225.8z" />
|
64 |
-
<glyph glyph-name="angular"
|
65 |
-
unicode=""
|
66 |
-
horiz-adv-x="415.6" d=" M169.7 179.9H245.9L207.8 271.5L169.7 179.9zM207.8 416L0 341.6L31.8 65.9L207.8 -32L383.8 65.9L415.6 341.6L207.8 416zM338 74.2H289.4L263.2 139.6H152.6L126.4 74.2000000000001H77.7L207.8 366.5L338 74.2z" />
|
67 |
-
<glyph glyph-name="app-store-ios"
|
68 |
-
unicode=""
|
69 |
-
horiz-adv-x="448" d=" M400 416H48C21.5 416 0 394.5 0 368V16C0 -10.5 21.5 -32 48 -32H400C426.5 -32 448 -10.5 448 16V368C448 394.5 426.5 416 400 416zM127 63.5C121.5 53.9 109.2 50.7 99.7 56.2C90.1 61.7 86.9 74 92.4 83.5L106.7 108.2C122.8 113.1 136 109.3 146.3 96.8L127 63.5zM265.9 117.4H84C73 117.4 64 126.4 64 137.4S73 157.4 84 157.4H135L200.4 270.6L179.9 306C174.4 315.6 177.7 327.8 187.2 333.3C196.8 338.8 209 335.5 214.5 326L223.4 310.6L232.3000000000001 326C237.8000000000001 335.6 250.1000000000001 338.8 259.6 333.3C269.2000000000001 327.8 272.4000000000001 315.5 266.9000000000001 306L181.1 157.4H243.2C263.4000000000001 157.4 274.7000000000001 133.7 265.9000000000001 117.4zM364 117.4H335L354.6 83.5C360.1 73.9 356.8 61.7 347.3 56.2C337.7 50.7 325.5 54 320 63.5C287.1 120.4 262.5 163.2 246 191.6C229.3 220.6 241.2 249.6 253.1 259.4000000000001C266.2 236.7000000000001 285.8 202.7000000000001 312 157.4H364C375 157.4 384 148.4 384 137.4C384 126.3 375 117.4 364 117.4z" />
|
70 |
-
<glyph glyph-name="app-store"
|
71 |
-
unicode=""
|
72 |
-
horiz-adv-x="512" d=" M255.9 327.1L265 342.8C270.6 352.6 283.1 355.9 292.9 350.3C302.7 344.7 306 332.2 300.4 322.4L212.9 170.9H276.2C296.7 170.9 308.2 146.8 299.3 130.1H113.8C102.5 130.1 93.4 139.2 93.4 150.5C93.4 161.8 102.5 170.8999999999999 113.8 170.8999999999999H165.8L232.4 286.3L211.6 322.3999999999999C206 332.2 209.3 344.5999999999999 219.1 350.3C228.9 355.8999999999999 241.3 352.5999999999999 247 342.8L255.9 327.0999999999999zM177.2 109.1L157.6 75.1C152 65.3 139.5 62 129.7 67.6C119.9 73.2000000000001 116.6 85.7000000000001 122.2 95.5L136.8 120.7C153.2 125.8 166.6 121.9 177.2 109.1zM346.1 170.8H399.2000000000001C410.5000000000001 170.8 419.6 161.7 419.6 150.4C419.6 139.1 410.5 130.0000000000001 399.2000000000001 130.0000000000001H369.7000000000001L389.6 95.5000000000001C395.2000000000001 85.7000000000001 391.9000000000001 73.3000000000001 382.1 67.6000000000001C372.3 62.0000000000001 359.9000000000001 65.3000000000001 354.2000000000001 75.1000000000001C320.7000000000001 133.2000000000001 295.5000000000001 176.7000000000001 278.8000000000001 205.7000000000001C261.7000000000001 235.2000000000001 273.9000000000001 264.8000000000001 286.0000000000001 274.8000000000001C299.4000000000001 251.8000000000001 319.4000000000001 217.1000000000001 346.1000000000001 170.8000000000001zM256 440C119 440 8 329 8 192S119 -56 256 -56S504 55 504 192S393 440 256 440zM472 192C472 73.3 375.9 -24 256 -24C137.3 -24 40 72.1 40 192C40 310.7 136.1 408 256 408C374.7 408 472 311.9 472 192z" />
|
73 |
-
<glyph glyph-name="apper"
|
74 |
-
unicode=""
|
75 |
-
horiz-adv-x="640" d=" M42.1 208.9C64.3 208.9 71.1 206.1 75.6 194.3H76.4V217.2C76.4 228.5000000000001 71.6 232.6 58.5 232.6C47.2 232.6 44.1 230.1 43.4 219.8H4.8C5.1 233.7 6.3 238.9 10.6 244.2C17.9 253 29.5 256 56.7 256C89.7 256 103.8 251 110.6 237.1C112.6 232.8 114.6 221.5 114.6 213.4V137.1H76.3L77.6 156.2000000000001H76.6C71.3 140.6 63 135.8000000000001 41.1 135.8000000000001C10.8 135.8000000000001 0 145.9000000000001 0 173.1000000000001C0 198.3000000000001 12.3 208.9000000000001 42.1 208.9000000000001zM59.2 160.8C72.3 160.8 76.1 163.8 76.1 174.2C76.1 183.3 71.8 185.8 56.5 185.8C43.4 185.8 38.6 182.8 38.6 173.7C38.5 163.3 42.3 160.8 59.2 160.8zM137 255.7H175.3L173.8 235.1H174.6C183.7 252.2 190.5 256 212.1 256C226.5000000000001 256 236.8 253.0000000000001 243.6 246.9000000000001C253.4000000000001 238.3000000000001 256.4000000000001 226.5000000000001 256.4000000000001 198.8000000000001C256.4000000000001 168.8000000000001 253.4000000000001 155.7000000000001 244.3000000000001 145.9C237.5000000000001 138.6 227.9000000000001 135.8 211.1 135.8C190.7 135.8 181.9 141.3 177.3 157H176.5V86.7H137V255.7zM217.9 195C217.9 222.5 214.6 227.5 197.2 227.5C180.3 227.5 176.5 222.5 176.5 198.8C176.5 170.8 180 165.3 197.7 165.3C214.1 165.3 217.9 170.9 217.9 195zM275.8 255.7H314.1L312.6 235.1H313.4000000000001C322.5000000000001 252.2 329.3 256 350.9000000000001 256C365.3 256 375.6 253 382.4000000000001 246.9C392.2000000000001 238.3 395.2000000000001 226.5 395.2000000000001 198.8C395.2000000000001 168.8 392.2000000000001 155.7 383.1 145.9C376.3 138.6 366.7000000000001 135.8 349.8 135.8C329.4000000000001 135.8 320.6 141.3 316 157H315.2V86.7H275.7V255.7zM356.7000000000001 195C356.7000000000001 222.5 353.4000000000001 227.5 336.0000000000001 227.5C319.1000000000001 227.5 315.3000000000001 222.5 315.3000000000001 198.8C315.3000000000001 170.8 318.8000000000001 165.3 336.5000000000001 165.3C352.9000000000001 165.3 356.7000000000001 170.9 356.7000000000001 195zM410.5000000000001 198.8C410.5000000000001 224.2 413.8000000000001 236.6 422.8000000000001 244.6C431.6000000000001 252.7 445.0000000000001 255.9000000000001 467.9000000000001 255.9000000000001C510.7000000000001 255.9000000000001 523.6000000000001 243.1 523.6000000000001 200.2000000000001V189.1H448.3000000000002C448.0000000000001 187.1 448.0000000000001 185.1 448.0000000000001 184.3C448.0000000000001 167.4 452.5000000000001 162.4 468.1000000000001 162.4C482.0000000000001 162.4 486.0000000000001 165.4 486.0000000000001 176.3H523.5000000000001V174C523.5000000000001 164.2 521.0000000000001 155.1 516.7000000000002 149.3C509.4000000000001 139.5 497.1000000000001 135.7 472.4000000000001 135.7C444.9000000000002 135.7 430.8000000000002 139 421.8000000000002 148C413.3000000000002 156.5 410.5000000000001 169.3 410.5000000000001 198.8zM486.9000000000001 210.4C486.6000000000001 212.2 486.6000000000001 213.7 486.6000000000001 214.2C486.6000000000001 226.5000000000001 483.3000000000001 228.8 467.0000000000001 228.8C452.6000000000001 228.8 449.9000000000001 225.8 448.9000000000001 213.7L448.6 210.4H486.9zM542.5000000000001 255.7H580.8000000000001L579.0000000000001 235.8H579.7000000000002C586.5000000000001 250.7 594.1000000000001 256 609.4000000000002 256C620.2000000000002 256 628.5000000000002 252.7 632.8000000000002 246.7C638.1000000000001 239.4 639.6000000000001 232.3 639.6000000000001 212.7C639.6000000000001 211.2 639.6000000000001 207.7 639.8000000000002 203.4H604.8000000000002C605.1000000000001 205.2 605.1000000000001 206.7 605.1000000000001 207.4C605.1000000000001 222.8 603.1000000000001 226.8 594.8000000000002 226.8C588.5000000000002 226.8 584.0000000000002 223.5 581.7000000000002 217.5C580.7000000000002 214.5 580.7000000000002 213.1999999999999 580.7000000000002 205.1999999999999V137.1999999999999H542.4000000000002V255.7z" />
|
76 |
-
<glyph glyph-name="apple-pay"
|
77 |
-
unicode=""
|
78 |
-
horiz-adv-x="640" d=" M116.9 289.5C109.4 280.6 97.4 273.6 85.4 274.6C83.9 286.6 89.8 299.4 96.7 307.2C104.2 316.3 117.3 322.8 128 323.3C129.2 310.9 124.3 298.6 116.9 289.5M127.8 272.3C110.4 273.3 95.5 262.4 87.3 262.4C78.9 262.4 66.3 271.8 52.5 271.5C34.6 271.2 18 261.1 8.9 245C-9.9 212.7 4 165 22.2 138.7C31.1 125.7 41.7 111.4 55.7 111.9C69 112.4 74.2 120.5 90.2 120.5C106.3 120.5 111 111.9 125 112.1C139.5 112.4 148.6 125.1 157.5 138.1C167.6 152.9 171.8 167.2000000000001 172 168C171.7 168.3 144 178.9 143.7 210.9C143.4 237.7 165.6 250.4 166.6 251.2C154.1 269.8 134.6 271.8 127.8 272.3M228.2 308.5V113.6H258.5V180.2000000000001H300.4C338.7 180.2000000000001 365.5 206.5000000000001 365.5 244.5000000000001S339.1 308.5000000000001 301.4 308.5000000000001H228.2zM258.5 283H293.4C319.7 283 334.7 269 334.7 244.4S319.7 205.6 293.3 205.6H258.5V283zM420.7 112.1C439.7 112.1 457.3 121.7000000000001 465.3 137H465.9V113.6H493.9V210.6C493.9 238.7 471.4 256.9000000000001 436.8 256.9000000000001C404.7 256.9000000000001 380.9000000000001 238.5000000000001 380 213.3000000000001H407.3C409.6 225.3000000000001 420.7 233.2000000000001 435.9000000000001 233.2000000000001C454.4 233.2000000000001 464.8 224.6000000000001 464.8 208.7000000000001V197.9L427 195.6C391.9 193.5 372.9 179.1 372.9 154.1C373 128.9 392.6 112.1 420.7 112.1zM428.9 135.2000000000001C412.8 135.2000000000001 402.5 143.0000000000001 402.5 154.8000000000001C402.5 167.1000000000001 412.4 174.2000000000001 431.3 175.3000000000001L464.9 177.4000000000001V166.4000000000001C464.9 148.2000000000001 449.4000000000001 135.2000000000001 428.9000000000001 135.2000000000001zM531.4 60.6C560.9 60.6 574.8 71.9 586.9 106L640 255H609.2L573.6 139.9H573L537.4 255H505.8L557 113.1L554.2 104.5C549.6 89.9 542.1 84.2 528.7 84.2C526.3000000000001 84.2 521.7 84.5 519.8000000000001 84.7V61.3C521.6 60.9 529.1 60.6 531.4000000000001 60.6z" />
|
79 |
-
<glyph glyph-name="apple"
|
80 |
-
unicode=""
|
81 |
-
horiz-adv-x="376.5" d=" M314.7 179.3C314.5 216 331.1 243.7 364.7 264.1C345.9 291 317.5 305.8 280 308.7000000000001C244.5 311.5 205.7 288 191.5 288C176.5 288 142.1 307.7000000000001 115.1 307.7000000000001C59.3 306.8 0 263.2 0 174.5C0 148.3 4.8 121.2 14.4 93.3C27.2 56.6 73.4 -33.4 121.6 -31.9C146.8 -31.3 164.6 -14 197.4 -14C229.2 -14 245.7 -31.9 273.8 -31.9C322.4000000000001 -31.2 364.2000000000001 50.6 376.4 87.4C311.2 118.1 314.7 177.4 314.7 179.3000000000001zM258.1 343.5C285.4 375.9 282.9 405.4 282.1 416C258 414.6 230.1 399.6 214.2 381.1C196.7 361.3 186.4 336.8 188.6 309.2C214.7 307.2 238.5 320.6 258.1 343.5z" />
|
82 |
-
<glyph glyph-name="artstation"
|
83 |
-
unicode=""
|
84 |
-
horiz-adv-x="508.1" d=" M0 70.6L43 -3.7C51.5 -20.5 68.8 -32 88.9 -32H374.3L315.1 70.6H0zM499.8 98L333.6 388.7C325 404.9 307.9 416 288.2 416H199.8L457.1 -31.6L497.8 38.9C499.7 42.1 518.8 68.6 499.8 98zM273 143.5L157.5 343.5L42 143.5H273z" />
|
85 |
-
<glyph glyph-name="asymmetrik"
|
86 |
-
unicode=""
|
87 |
-
horiz-adv-x="576" d=" M517.5 138.8C556.3 178.8 575.6 218.8 576 254.9C576.8 320.4 516.6 373.1 406.6 389.9C277.9 409.6 118.1 374.4 0 307.5C52 334 110.6 355.7 170.7 365.7C245.2 386.2 323.7 391.1 392 380.5C544.5 356.7 588.8 253 490.8 148.8C480.6 138 468.8 127.7 455.8 118.2L304.9 344.6L114.7 59.1C49.1 88.5 38.2 149.3 95.6 210.3C116.4 232.5 143.9 252.2 175.1 268.4C195.1 280.6 214.8 291 237.1 299.1C172 278.8 114.4 246.2 75.5 206.2C47.8 177.6 34.1 149.1 33.8 123.3C33.3 88.1999999999999 57.2 58.1999999999999 102.2 40.3L67.7 -11.4H169.3L191.3 22.9999999999999C213.5 21.9999999999999 236.6 22.9999999999999 259.9 25.6999999999999L237.1 -11.4000000000001H372.6L340 41.7C358.6 47 376.9 53.2 394.5 60.4L440.4 -11.4H542L468.6 99C487.1 111.1 503.6 124.5 517.5 138.8zM329.9 58.3L304.9 98.9L272.2 45.6C248.8 42.1 225.5 40.5 203 41.2L304.9 200.5000000000001L383.6 77.5000000000001C366.4 70.1000000000001 348.3 63.6000000000001 329.9 58.3000000000001z" />
|
88 |
-
<glyph glyph-name="atlassian"
|
89 |
-
unicode=""
|
90 |
-
horiz-adv-x="512" d=" M152.2 211.6C144.5 219.8 132.5 219.3 127.4 208.8L1.6 -42.2C-3.4 -52.2 4 -63.9 15 -63.9H190C195.8 -64 201 -60.7 203.4 -55.5C241.3 22.3 218.5 140.8 152.2 211.6zM244.4 439.9C122.1 246.5 235.9 91.3 309.4 -55.6C311.9 -60.7 317.1 -64 322.8 -64H497C508.2 -64 515.4 -52.2 510.4 -42.3C510.4 -42.3 275.9 428.3 270 440C264.7 450.6 251.2 450.8 244.4 439.9z" />
|
91 |
-
<glyph glyph-name="audible"
|
92 |
-
unicode=""
|
93 |
-
horiz-adv-x="640" d=" M640 248.1V194.1L320 -5.9L0 194V248L320 48L640 248.1zM445.5 176.1L492.6 205.5C455.4 261.3 391.9000000000001 298.1 319.9000000000001 298.1C247.9000000000001 298.1 184.4 261.4000000000001 147.3000000000001 205.7H147.6000000000001C150.1000000000001 208 152.7000000000001 210.2 155.3000000000001 212.4C245.0000000000001 286.8 374.7000000000001 270.5 445.5 176.1zM225.4 157.3C242.3 169.2 261.9 176 282.8 176C317.2 176 348 157.6 369.2000000000001 128.4L414.6 156.8C393.7000000000001 186.6999999999999 359 206.3 319.8 206.3C280.9000000000001 206.3 246.4 186.9 225.4 157.3zM103.6 286.9C235.4 391.2 421.8 363.3 521.1 224.8L521.8000000000001 223.8L570.6 254.2C517.1 335.9 424.8 389.9 319.9 389.9C216.4 389.9 123.3 336.4 69.4 254.3C79.3 264.8 92.1 277.8 103.6 286.9zM570.6 254.2z" />
|
94 |
-
<glyph glyph-name="autoprefixer"
|
95 |
-
unicode=""
|
96 |
-
horiz-adv-x="640" d=" M318.4 432L157.4 -48H234.9L260.3 33.4H379.8L405 -48H482.5L318.4 432zM278.1 90.1L319.3 220.5H320.8L361.7 90.1H278.0999999999999zM640 43L630 74.4L462.1 90L481.5 33.5L640 43zM177.9 90L10 74.3L0 43L158.5 33.6L177.9 90z" />
|
97 |
-
<glyph glyph-name="avianex"
|
98 |
-
unicode=""
|
99 |
-
horiz-adv-x="512" d=" M453.1 416H141.1C102.2 416 64.9 384.8 57.8 346.3L1.2 37.7C-5.9 -0.8 19.9 -32 58.9 -32H370.9C409.8 -32 447.1 -0.8 454.2 37.7L510.9 346.2C517.9 384.8 492.1 416 453.1 416zM394.9000000000001 68.7L362.9000000000001 55.2L247.5000000000001 165.2C232.8000000000001 155.2 218.3000000000001 145.7 205.8 138.1L227.9 73.9L210 61.2L169.4 122.2L117 170.3L132.7 185.7L190.7 154.6C200 165.1 211.5 177.2 223.5 189.5L203 219.1L134.2 318.9L153 347.8L161.9 352.6L265 240.2L269.9 235.7C289.3 254.5 303.7 268.1 303.7 268.1C311.4 274.6 325.2 271 334.4 260.2C343.4 249.7 345 235.5 337.1 228.9C335.3 227.6 321.6 217.5 301.8 203.3L306.3 196L401.2 76.6L394.8999999999999 68.7z" />
|
100 |
-
<glyph glyph-name="aviato"
|
101 |
-
unicode=""
|
102 |
-
horiz-adv-x="640" d=" M107.2 164.5L88.2 206.3H36.1L17.1 164.5H0L62.2 295.9L124.4 164.5H107.2zM62.2 262.6L42.6 220.1H81.8L62.2 262.6zM174.9 160.2L112.7 291.6H129.8L174.9 195.6L220 291.6H237L174.9 160.2zM255.5 164.5V291.6H271V164.5H255.5zM464.6 280.1V164.5H447.3V280.1H406.1V291.6H505.7V280.1H464.6zM640 229.2C640 220 638.3 211.4 634.9 203.4C631.5 195.4 626.6999999999999 188.3 620.6999999999999 182.3C614.6999999999999 176.3 607.5999999999999 171.5 599.5999999999999 168.1C591.5999999999999 164.7 582.9999999999999 163 573.8 163S556 164.6999999999999 548 168.1C540 171.5 532.9 176.3 526.9 182.3C520.9 188.3 516.1 195.3 512.6999999999999 203.4C509.3 211.4 507.5999999999999 220 507.5999999999999 229.2S509.2999999999999 247 512.6999999999999 255C516.0999999999999 263 520.9 270.1 526.9 276.1C532.9 282.1 539.9 284.5 548 288C556 291.4 564.6 293.1 573.8 293.1S591.5999999999999 291.4 599.5999999999999 288C607.5999999999999 284.6 614.6999999999999 282.2 620.6999999999999 276.1C626.6999999999999 270.1 631.4 263 634.9 255C638.3 247 640 238.4 640 229.2zM624.5 229.2C624.5 236.5 623.2 243.2 620.6 249.5C618 255.8 614.4 261.2 609.8000000000001 265.8C605.2 270.4 599.8000000000001 274 593.6 276.7000000000001C587.4 279.4 580.8000000000001 280.7000000000001 573.8000000000001 280.7000000000001S560.2 279.4 554.0000000000001 276.7000000000001C547.8000000000001 274 542.4000000000001 270.4 537.8000000000001 265.8C533.2 261.2000000000001 529.6 255.8 527.0000000000001 249.5C524.4000000000001 243.2 523.1000000000001 236.4 523.1000000000001 229.2C523.1000000000001 221.9 524.4000000000001 215.2 527.0000000000001 208.9C529.6000000000001 202.6 533.2000000000002 197.2 537.8000000000001 192.6C542.4000000000001 188 547.8000000000001 184.4 554.0000000000001 181.7C560.2000000000002 179 566.8000000000001 177.7 573.8000000000001 177.7S587.4000000000001 179 593.6 181.7C599.8000000000001 184.4 605.2 188 609.8000000000001 192.6C614.4000000000001 197.2 618.0000000000001 202.6 620.6 208.9C623.2 215.2 624.5 222 624.5 229.2zM529.7 132.5V138.8L618.6 148.8L375.7000000000001 135.4C376.3000000000001 137.6 376.8000000000001 140.0000000000001 377.1 142.6C377.4000000000001 144.6 377.6 146.8 377.7000000000001 149.1L442.5000000000001 157.2000000000001L377.6 155.3000000000001C377.6 155.7000000000001 377.5 156.0000000000001 377.5 156.4000000000001C374.7 173.6000000000001 352 180.1000000000001 352 180.1000000000001L350.9 206.4000000000001H374.7L393.7 164.6000000000001H410.8L348.6 296L286.4000000000001 164.6H303.5000000000001L322.5000000000001 206.4H346.1000000000001L345 180S322.3 173.5 319.5 156.3C319.4 156 319.4 155.6 319.4 155.2L254.5 157.1L319.3 149C319.4 146.6999999999999 319.6 144.6 319.9 142.5C320.2 139.8999999999999 320.7 137.5 321.3 135.3L78.4 148.8L167.3 138.8V132.5C161.4 131.6 156.8 126.5 156.8 120.3C156.8 113.5 162.4 107.9 169.2 107.9C176 107.9 181.6 113.5000000000001 181.6 120.3C181.6 126.5 177 131.6 171.1 132.5V138.3L251.4000000000001 129.3V123.9C245.7000000000001 122.8 241.5000000000001 117.7000000000001 241.5000000000001 111.8C241.5000000000001 105 247.1 101.6 253.9000000000001 101.6C260.7000000000001 101.6 266.3 105 266.3 111.8C266.3 117.8 262 122.8 256.4000000000001 123.9V128.8L284.8 125.6V101.9H278.9000000000001V88H284.8V94.6H289.8V88H295.7V101.8H289.8V125L328.1 120.7C336.2000000000001 109.3 347.1 107.1 347.1 107.1L347 100.4L341.9 100.2L341.8 88.1H345.9L346 93.1H351.2L351.3 88.1H355.4000000000001L355.3 100.2L350.2 100.4L350.1 107.1S361 109.2 369.1 120.7L407.4 125V101.8H401.5V88H407.4V94.6H412.4V88H418.3V101.8H412.4V125.5L440.8 128.7V123.8C435.1 122.7 430.9 117.6 430.9 111.7C430.9 104.9 436.5 101.5 443.3 101.5C450.1 101.5 455.6999999999999 104.9 455.6999999999999 111.7C455.6999999999999 117.7 451.3999999999999 122.7 445.8 123.8V129.2L526.0999999999999 138.2V132.4C520.1999999999999 131.5 515.5999999999999 126.4 515.5999999999999 120.2C515.5999999999999 113.4 521.1999999999999 107.8 527.9999999999999 107.8C534.7999999999998 107.8 540.3999999999999 113.4 540.3999999999999 120.2C540.1999999999998 126.5 535.6999999999998 131.6 529.6999999999998 132.5zM328.9000000000001 220.1L348.5000000000001 262.6L368.1000000000001 220.1H350.2000000000001L348.5000000000001 260.4L346.8000000000002 220.1H328.9000000000002z" />
|
103 |
-
<glyph glyph-name="aws"
|
104 |
-
unicode=""
|
105 |
-
horiz-adv-x="640" d=" M180.41 244.99C179.69 222.34 191.01 212.31 191.29 205.94A8.164 8.164 0 0 0 187.19 199.67L174.39 190.71A10.659999999999998 10.659999999999998 0 0 0 168.76 188.79C168.33 188.81 160.57 186.96 148.28 214.4A78.608 78.608 0 0 0 85.67 184.95C69.39 184.06 25.27 194.19 27.54 241.16C25.95 279.44 61.6 303.2200000000001 98.47 301.21C105.57 301.19 120.07 300.84 145.46 294.94V310.56C148.15 337.02 130.76 357.55 100.65 354.47C98.25 354.46 81.25 354.97 54.81 344.36C47.45 340.98 46.51 341.54 44.06 341.54C36.65 341.54 39.7 363.02 41.12 365.74C46.33 372.14 76.98 384.09 107.06 383.92A76.857 76.857 0 0 0 162.75 366.64A70.285 70.285 0 0 0 180.42 314.28L180.41 244.99zM93.99 212.6C126.42 213.07 140.15 232.57 143.28 243.07C145.74 253.12 145.33 259.48 145.33 270.4700000000001C135.66 272.79 121.74 275.32 105.77 275.3400000000001C90.62 276.48 62.95 269.7100000000001 64.03 243.08C62.79 226.29 75.15 211.68 93.99 212.6zM264.91 189.55C257.05 188.83 253.39 194.41 252.23 199.92L202.43 364.5700000000001C201.46 367.35 200.8199999999999 370.2200000000001 200.51 373.1500000000001A4.61 4.61 0 0 0 204.37 378.4000000000001C204.61 378.4400000000001 202.24 378.4000000000001 226.62 378.4000000000001C235.4 379.2800000000001 238.26 372.37 239.17 368.0300000000001L274.89 227.2L308.05 368.03C308.58 371.25 310.99 379.1 320.85 378.27H338.01C340.18 378.45 349.12 378.77 350.69 367.9L384.11 225.27L420.98 367.9C421.4600000000001 370.0800000000001 423.7000000000001 379.27 433.6600000000001 378.27H453.38C454.23 378.4 459.53 379.0800000000001 458.63 369.69C458.2 367.8400000000001 462.04 380.35 405.88 199.79C404.73 194.28 401.06 188.7000000000001 393.2 189.42H374.51C363.57 188.2700000000001 362 199.08 361.83 200.17L328.67 337.3L295.89 200.31C295.73 199.22 294.16 188.41 283.21 189.56H264.91zM538.39 183.92C532.51 183.91 504.47 184.22 481.03 196.21A12.802 12.802 0 0 0 473.22 208.12V218.87C473.22 227.32 479.42 225.77 482.05 224.76C492.09 220.7 498.53 217.62 510.86 215.16C547.51 207.63 563.63 217.46 567.5799999999999 219.64C580.7299999999999 227.45 581.77 245.32 572.8299999999999 254.59C562.3499999999999 263.38 557.3499999999999 263.71 519.6999999999999 275.59C515.06 276.88 475.9999999999999 289.2 475.9099999999999 327.95C475.2999999999999 356.19 500.9599999999999 384.13 545.43 383.9C558.0999999999999 383.91 591.8599999999999 379.77 601 368.28C602.35 366.19 603.02 363.73 602.92 361.24V351.13C602.92 346.69 601.3 344.47 598.05 344.47C590.3399999999999 345.33 576.66 355.64 548.89 355.22C542 355.58 509 354.31 510.48 330.25C510.05 311.29 537.09 304.18 540.1800000000001 303.36C576.6400000000001 292.39 588.83 290.57 603.3000000000001 273.78C620.44 251.53 611.2 225.48 607.6500000000001 218.34C588.57 180.85 539.2300000000001 183.9 538.3900000000001 183.92zM578.59 79.06C508.5600000000001 27.34 406.9000000000001 -0.19 320.1 -0.19A469.127 469.127 0 0 0 2.83 120.54C-3.7 126.43 2.06 134.5 10 130.0100000000001A637.37 637.37 0 0 1 326.88 45.89A630.22 630.22 0 0 1 568.47 95.4400000000001C580.25 100.4400000000001 590.24 87.64 578.59 79.0600000000001zM607.7800000000001 112.35C598.82 123.87 548.5000000000001 117.73 525.97 115.04C519.1800000000001 114.2700000000001 518.03 120.16 524.1800000000001 124.5100000000001C564.2500000000001 152.6800000000001 630.0600000000001 144.6100000000001 637.6200000000001 135.1400000000001C645.1700000000001 125.67 635.5700000000002 59.73 598.0600000000002 28.23C592.3000000000002 23.36 586.7900000000002 25.93 589.3500000000001 32.33C597.7900000000002 53.58 616.7400000000001 100.8200000000001 607.7800000000001 112.35z" />
|
106 |
-
<glyph glyph-name="bandcamp"
|
107 |
-
unicode=""
|
108 |
-
horiz-adv-x="496" d=" M248 440C111 440 0 329 0 192S111 -56 248 -56S496 55 496 192S385 440 248 440zM296.2 113.9H115.2L199.9 270H380.9L296.2 113.9z" />
|
109 |
-
<glyph glyph-name="behance-square"
|
110 |
-
unicode=""
|
111 |
-
horiz-adv-x="448" d=" M186.5 155C186.5 135.7 172.5 129.6 155.3 129.6H110.2V182.5H156.2C174.8 182.4 186.5 174.7 186.5 155zM178.8 237.3C178.8 255 165.1 259.2000000000001 149.9 259.2000000000001H110.3V214.4H153C168.1 214.4 178.8 221 178.8 237.3000000000001zM311.1 214.1C292.8 214.1 280.6 202.7 279.4000000000001 184.4H341.6C339.9000000000001 202.9 330.3 214.1 311.1 214.1zM448 368V16C448 -10.5 426.5 -32 400 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H400C426.5 416 448 394.5 448 368zM271.7 263H349.5V281.9H271.7V263zM228.7 152.7C228.7 176.8 217.3 197.6 193.7 204.3C210.9 212.5 219.9 222 219.9 241.3C219.9 279.5 191.4 288.8 158.5 288.8H68V96.8H161.1C196 96.9999999999999 228.7 113.6999999999999 228.7 152.6999999999999zM380 167.5C380 208.6 355.9 242.9 312.4 242.9C270 242.9 241.3 211.1 241.3 169.3C241.3 126 268.6 96.3 312.4 96.3C345.6 96.3 367.1 111.2 377.5 143.1H343.8C340.1 131.2000000000001 325.2 125 313.6 125C291.2000000000001 125 279.5 138.1 279.5 160.3H379.7C379.8 162.6 380 165.1 380 167.5z" />
|
112 |
-
<glyph glyph-name="behance"
|
113 |
-
unicode=""
|
114 |
-
horiz-adv-x="576" d=" M232 210.8C263.8 226 280.4 249 280.4 284.8C280.4 355.4 227.8 372.6 167.1 372.6H0V18.2H171.8C236.2 18.2 296.7000000000001 49.1 296.7000000000001 121.1C296.7000000000001 165.6 275.6 198.5 232.0000000000001 210.8zM77.9 312.1H151C179.1 312.1 204.4 304.2 204.4 271.6C204.4 241.5 184.7 229.4 156.9 229.4H77.9V312.1zM161.2 78.4H77.9V176H162.8C197.1 176 218.8 161.7 218.8 125.4C218.8 89.6 192.9 78.4 161.2 78.4zM519.7 319.1H376V354H519.7V319.1zM576 142.8C576 218.7 531.6 282 451.1 282C372.9000000000001 282 319.8 223.2 319.8 146.2C319.8 66.3 370.1 11.5 451.1 11.5C512.4 11.5 552.1 39.1 571.2 97.8H509C502.3 75.9 474.7 64.3 453.3 64.3C412 64.3 390.3 88.5 390.3 129.6H575.4C575.6999999999999 133.8 576 138.3 576 142.8zM390.4 174C392.7 207.7 415.1 228.8 448.9 228.8C484.3 228.8 502.1 208 505.1 174H390.4z" />
|
115 |
-
<glyph glyph-name="bimobject"
|
116 |
-
unicode=""
|
117 |
-
horiz-adv-x="448" d=" M416 416H32C14.4 416 0 401.6 0 384V0C0 -17.6 14.4 -32 32 -32H416C433.6 -32 448 -17.6 448 0V384C448 401.6 433.6 416 416 416zM352 158.6C352 109.2000000000001 340.6 76 248.2 76H231.3C187.2 76 168.9 90.9 160.9 114.8H160V80H96V312H160V237.3H161.1C165.7 267.8 200.8 276.1 230.8 276.1H248.1C340.5 276.1 351.9000000000001 243.0000000000001 351.9000000000001 193.6V158.6zM288 187.5V164.6C288 142.9 284.6 130.8 249.6 130.8H204.3C175.4 130.8 160.2 137.3 160.2 166.5V185.5C160.2 214.8 175.4 221.2 204.3 221.2H249.6C284.6 221.4 288 209.2 288 187.5z" />
|
118 |
-
<glyph glyph-name="bitbucket"
|
119 |
-
unicode=""
|
120 |
-
horiz-adv-x="499.2" d=" M16.2 416.4C7.4 416.5 0.1 409.5 0 400.6C0 399.7 0.1 398.7 0.2 397.8L68.1 -14.3C69.8 -24.7 78.8 -32.4 89.4 -32.5H415.1C423 -32.6 429.8 -26.9 431.1 -19.1L499 397.7C500.4 406.4 494.5 414.6 485.8 416C484.9 416.1 484 416.2 483 416.2L16.2 416.4zM302.1 118.6H198.1L170 265.6H327.3L302.1 118.6z" />
|
121 |
-
<glyph glyph-name="bitcoin"
|
122 |
-
unicode=""
|
123 |
-
horiz-adv-x="512" d=" M504 192C504 55.033 392.967 -56 256 -56S8 55.033 8 192S119.033 440 256 440S504 328.967 504 192zM362.349 227.33C367.286 260.329 342.158 278.069 307.799 289.903L318.945 334.605L291.732 341.386L280.881 297.862C273.727 299.645 266.379 301.326 259.078 302.992L270.007 346.802L242.809 353.583L231.656 308.897C225.734 310.246 219.9209999999999 311.579 214.279 312.981L214.31 313.121L176.78 322.491L169.541 293.429S189.732 288.802 189.3059999999999 288.516C200.3279999999999 285.765 202.3199999999999 278.472 201.9859999999999 272.691L189.2899999999999 221.766C190.0499999999999 221.572 191.0339999999999 221.293 192.119 220.859C191.2119999999999 221.084 190.243 221.332 189.243 221.572L171.447 150.2339999999999C170.098 146.8859999999999 166.68 141.8639999999999 158.976 143.7699999999999C159.2469999999999 143.375 139.196 148.7069999999999 139.196 148.7069999999999L125.6859999999999 117.56L161.0999999999999 108.733C167.6879999999999 107.0819999999999 174.1449999999999 105.3539999999999 180.5 103.727L169.238 58.514L196.4199999999999 51.733L207.5729999999999 96.466A1038.209 1038.209 0 0 1 229.26 90.8389999999999L218.1449999999999 46.3159999999999L245.3579999999999 39.5349999999999L256.6199999999999 84.6629999999999C303.0239999999999 75.8819999999999 337.9189999999999 79.4239999999999 352.6059999999999 121.3899999999999C364.4419999999999 155.1799999999999 352.0169999999999 174.6709999999999 327.6019999999999 187.3809999999999C345.3819999999999 191.4789999999999 358.7759999999999 203.1729999999999 362.3489999999999 227.3299999999999zM300.172 140.151C291.762 106.3609999999999 234.864 124.6279999999999 216.417 129.208L231.361 189.107C249.807 184.504 308.961 175.39 300.172 140.151zM308.589 227.818C300.916 197.082 253.558 212.698 238.196 216.526L251.744 270.853C267.107 267.025 316.58 259.88 308.589 227.818z" />
|
124 |
-
<glyph glyph-name="bity"
|
125 |
-
unicode=""
|
126 |
-
horiz-adv-x="496" d=" M78.4 380.8C173.8 470 324.5 472 421.5 377C435.8 362.9 415.1 339.9 399.1 355.5C314.3 437.9 183.3 435.8 100.2000000000001 358.7C83.9000000000001 343.6 63.7000000000001 367 78.4000000000001 380.8zM177.3 -37.8C196.6 -43.5 206.6 -14.2 185.2 -7.8C73 26.1 9.4 141.9 37.7 253.2C42.7 272.8 12.8 281.3 7.5 260.3C-24.6 132.9 48.6 0.5 177.3 -37.8000000000001zM325.4 -35.8C447.3 4.4 518.3 131.1 489.8 255.2C485.3 274.9 454.9 269 459.8 247.3C483.9999999999999 139.6 422.7 29.4 316.6 -6.1C295.4 -13.1 306.2 -42.1 325.4 -35.8zM262.5 43.2L262.7 115C262.7 123.2 256.1 129.8 247.9 129.8C239.7 129.8 233.1 123.1 233.1 115L232.9 43.2C232.9 35 239.5 28.4 247.7 28.4S262.5 35 262.5 43.2zM333.5 312.2C335.6 221.3 338.2 180.3 248 179.7C155.5 180.4 161.1 224 162.5 312.2C162.5 334 130 331.8 130 312.2V240.6C130 171.3 190.7 149.7 248 150.5C305.3 149.7 366 171.3 366 240.6V312.2C366 331.8 333.5 334 333.5 312.2z" />
|
127 |
-
<glyph glyph-name="black-tie"
|
128 |
-
unicode=""
|
129 |
-
horiz-adv-x="448" d=" M0 416V-32H448V416H0zM316.5 90.8L224 2.1L131.5 90.8L196 274.8L131.5 361.4H316.4L252 274.8L316.5 90.8z" />
|
130 |
-
<glyph glyph-name="blackberry"
|
131 |
-
unicode=""
|
132 |
-
horiz-adv-x="512" d=" M166 331.1C166 307.7 149.6 282 93.5 282H23.4L44.4 370.8H112.2C154.3 370.8 166 347.5 166 331.1zM292.2 370.8H224.4L205.7 282H275.8C329.6 282 345.9 307.7 345.9 331.1C346 347.5 334.3 370.8 292.2 370.8zM88.8 239.9H21L0 151.1H70.1C126.2 151.1 142.6 174.5 142.6 200.2C142.6 216.5 130.9 239.9000000000001 88.8 239.9000000000001zM268.9 239.9H201.1L182.4 151.1H252.5C306.3 151.1 322.6 174.5 322.6 200.2C322.6 216.5 310.9 239.9000000000001 268.9 239.9000000000001zM458.2 293.7H390.4L371.7 204.9H441.8C495.6 204.9 511.9 228.3 511.9 254C512 270.3 500.3 293.7 458.2 293.7zM430.2 155.8H362.4L343.7 67H413.8C469.9 67 483.9 90.4 483.9 116.1C483.9 132.4 472.3 155.8 430.2 155.8zM240.8 102H173L154.3 13.2H224.4C280.5 13.2 294.5 38.9 294.5 62.3C294.6 78.6 282.9 102 240.8 102z" />
|
133 |
-
<glyph glyph-name="blogger-b"
|
134 |
-
unicode=""
|
135 |
-
horiz-adv-x="448" d=" M446.6 225.3C444.8 233.3 439.8 240.7 434.1 243.8C432.3 244.8 421.1 246 409.1 246.5C389 247.4 386.8 247.8 380.4000000000001 251.5C370.3 257.4 367.6 263.8 367.5000000000001 281C367.4000000000001 314 353.7000000000001 344.7 326.6000000000001 372.3C307.3000000000001 392 285.7000000000001 405.3 261.1000000000001 412.8C255.2000000000001 414.6 242.0000000000001 415.2 197.8000000000001 415.7C128.4000000000001 416.5 113.0000000000001 415.1 89.4000000000001 405.7C45.9 388.5 14.7 351.9 3.3 305.1C1.2 296.3 0.7 282.2 0.2 201.2C-0.4 99.7 0.3 84.8 6.6 64.7C22.2 15.1 66.5 -21.6 111 -29.6C125.8 -32.3 308.3 -32.9 327 -30.4C359.5 -26.0000000000001 385 -12.9 408.9 11.4999999999999C426.2 29.1999999999999 437 48.3 444.1 73.6C449 91.2 448.6 216.4 446.6 225.3zM124.5 288.9C132.3 296.8 134.5 297.1 183.3 297.1C227.2 297.1 228.7 297 235.1 293.7C244.4000000000001 289 248.5000000000001 282.4 248.5000000000001 271.8C248.5000000000001 262.3 244.7 255.6 236.2 250.2C231.6 247.3 228.9 247.1 185.9 246.9C159.4 246.7 138.2000000000001 247.3 135.1 248.1C118.5 252.8 112.3 276.6 124.5 288.9zM316.3 89.1L301.4000000000001 86.7000000000001L223.9 85.8000000000001C155.8000000000001 85.0000000000001 136.6 86.2000000000001 133 87.8000000000001C125.9 90.9000000000001 119.2 99.5000000000001 118.1 107.2000000000001C117 114.5000000000001 120.7 124.5000000000001 126.3 129.6C133.4 136 136.5 136.2000000000001 223.6 136.3C313.2000000000001 136.4 312.7000000000001 136.4 321.2000000000001 128.5C333.3000000000001 117.2 330.7000000000001 97.3 316.3000000000001 89.1z" />
|
136 |
-
<glyph glyph-name="blogger"
|
137 |
-
unicode=""
|
138 |
-
horiz-adv-x="448" d=" M162.4 252C167.2 256.9 168.6 257.1 198.8 257.1C226 257.1 226.9 257 230.9 255C236.7 252.1 239.2 248 239.2 241.4C239.2 235.5 236.8 231.4 231.6 228C228.8 226.2 227.1 226.1 200.5 225.9C184.1 225.8 171 226.1 169 226.7C158.7 229.6 154.9 244.4 162.4 252.0000000000001zM223.8 157.5C169.9 157.5 168 157.3 163.6 153.4C160.1 150.3 157.9 144 158.5 139.5C159.2 134.8 163.3000000000001 129.4 167.7 127.5C169.9 126.5 181.8 125.8 224 126.3L271.9 126.9L281.1 128.4C290.1 133.5000000000001 291.6 145.8 284.2 152.8C278.9 157.5 279.2 157.5 223.8 157.5zM447.2000000000001 27.4C443.7000000000001 -1 424.2000000000001 -23 396.1 -30.1C388.9000000000001 -31.9 386.4000000000001 -32 223.2 -31.9C65.4 -31.9 57.3 -31.8 51.2 -30.1C42.8 -27.9 35.6 -24.6 28.9 -20.1C23.3 -16.3 15 -8.3 11.9 -3.7C8.1 1.9 3.7 11.6 1.9 18.3C0.1 25 0 27.7 0 191.7C0 354.8 0 358.3 1.8 365.4C8.1 390.1 27.7 409 53 414.6C60.3 416.2 385.1 416.5 393 414.9C414.2 410.6 430.9 397.8 440.6 378.5C448.3 363.2 447.6 380 447.9000000000001 197.9C448.1 82.1 447.9000000000001 33.4 447.2000000000001 27.4zM361.8000000000001 212.6C360.7000000000001 217.6 357.6000000000001 222.2 354.1000000000001 224.1C353.0000000000001 224.7 346.1000000000001 225.4 338.6000000000001 225.8C326.2000000000001 226.4 324.8000000000001 226.6 320.8000000000001 228.9C314.6000000000001 232.5 312.9000000000001 236.5 312.8000000000001 247.2C312.8000000000001 267.6 304.3000000000001 286.6 287.5000000000001 303.7C275.5000000000001 315.9 262.2000000000001 324.2 246.9000000000001 328.8C243.3000000000001 329.9 235.1000000000001 330.3 207.7000000000001 330.6C164.8000000000001 331.1 155.2000000000001 330.2 140.6000000000001 324.4C113.6000000000001 313.7 94.3000000000001 291 87.2000000000001 262C85.9000000000001 256.5999999999999 85.6000000000001 247.8 85.3 197.6999999999999C84.9 134.8999999999999 85.3 125.5999999999999 89.3 113.1999999999999C99 82.4999999999999 126.4 59.8 153.9 54.8C163.1 53.1 276.1 52.6999999999999 287.6 54.3C307.7000000000001 56.9999999999999 323.5 65.1 338.3 80.1999999999999C349 91.0999999999999 355.7 102.9999999999999 360.1 118.6999999999999C363.3 129.5999999999999 363 207.0999999999999 361.8 212.5999999999999z" />
|
139 |
-
<glyph glyph-name="bluetooth-b"
|
140 |
-
unicode=""
|
141 |
-
horiz-adv-x="320" d=" M196.48 187.977L289.106 291.31L143.125 448V241.67L57.014 327.781L25.608 296.376L133.669 187.977L25.608 79.578L57.014 48.173L143.125 134.284L145.84 -64L294.392 84.644L196.48 187.977zM237.34 290.973L187.363 240.995L187.025 341.29L237.34 290.973zM187.363 134.96L237.34 84.982L187.025 34.6659999999999L187.363 134.9599999999999z" />
|
142 |
-
<glyph glyph-name="bluetooth"
|
143 |
-
unicode=""
|
144 |
-
horiz-adv-x="448" d=" M292.6 276.9L249.7 234L249.4 320L292.6 276.9M249.4 57.1L292.5 100.2000000000001L249.6 143.1L249.4 57.1zM416 188.6C416 -17 344.1 -64 230.9 -64S32 -17 32 188.6S115.4 448 228.6 448S416 394.1 416 188.6zM257.5 188.6L336.9 277.2000000000001L211.8 411.5V234.6L138 308.4L111 281.5L203.7 188.5L111 95.5L137.9 68.6L211.7 142.4L214 -27.6L341.4 99.9L257.5 188.6z" />
|
145 |
-
<glyph glyph-name="btc"
|
146 |
-
unicode=""
|
147 |
-
horiz-adv-x="384" d=" M310.204 205.362C337.9340000000001 219.542 355.581 244.752 351.4840000000001 286.662C346.1260000000001 344.013 299.0260000000001 363.235 236.6340000000001 368.591V448H188.1060000000001V370.7970000000001C175.5010000000001 370.7970000000001 162.5810000000001 370.482 149.662 370.1670000000001V448H101.134V368.591C83.2920000000001 368.052 62.512 368.315 3.764 368.591V316.913C42.078 317.591 62.181 320.053 66.787 295.486V78.057C63.862 58.565 48.263 61.372 13.532 61.986L3.765 4.32C92.246 4.32 101.135 4.005 101.135 4.005V-64H149.663V3.06C162.897 2.745 175.817 2.745 188.107 2.745V-64H236.635V4.005C317.9340000000001 8.417 372.2820000000001 28.899 379.5300000000001 105.472C385.201 166.918 356.2100000000001 194.334 310.2040000000001 205.362zM150.608 313.447C178.023 313.447 263.7340000000001 321.954 263.7340000000001 264.919C263.7340000000001 210.404 178.0240000000001 216.707 150.608 216.707V313.447zM150.608 61.671V168.179C183.38 168.179 283.735 177.317 283.735 114.924C283.7340000000001 54.738 183.38 61.671 150.608 61.671z" />
|
148 |
-
<glyph glyph-name="buromobelexperte"
|
149 |
-
unicode=""
|
150 |
-
horiz-adv-x="448" d=" M0 416V288H128V416H0zM120 296H8V408H120V296zM160 416V288H288V416H160zM280 296H168V408H280V296zM320 416V288H448V416H320zM440 296H328V408H440V296zM0 256V128H128V256H0zM120 136H8V248H120V136zM160 256V128H288V256H160zM280 136H168V248H280V136zM320 256V128H448V256H320zM440 136H328V248H440V136zM0 96V-32H128V96H0zM120 -24H8V88H120V-24zM160 96V-32H288V96H160zM280 -24H168V88H280V-24zM320 96V-32H448V96H320z" />
|
151 |
-
<glyph glyph-name="buysellads"
|
152 |
-
unicode=""
|
153 |
-
horiz-adv-x="448" d=" M224 297.3L266.9 136.6H181.1L224 297.3zM448 368V16C448 -10.5 426.5 -32 400 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H400C426.5 416 448 394.5 448 368zM382.7 42.7L288.2 341.4H159.8L65.3 42.7H156L267.7 134.3L291.9 42.6999999999999H382.7z" />
|
154 |
-
<glyph glyph-name="canadian-maple-leaf"
|
155 |
-
unicode=""
|
156 |
-
horiz-adv-x="465.9" d=" M232.9 448S195.4 375.7 190.4 368.2C185.4 358.2 180.4 358.2 172.8 363.2C162.8 368.2 132.7 385.6 132.7 385.6S160.3 266 160.3 256C162.8 246 152.8 238.5 142.7 246C140.2 248.5 87.6 308.3 87.6 308.3S75.1 281 72.6 276C70.1 271 67.6 266.1 60.1 268.5C50 271 2.4 281 2.4 281S20 221.3 22.5 213.7C24.9 207.7 27.5 201.2 17.5 196.3L0 188.7S102.6 98.8 105.2 96.3C110.3 91.3 115.2 88.8 110.3 73.8C105.2 58.8 100.2 38.6999999999999 100.2 38.6999999999999S195.4 58.8 205.5 61.3C214.2 62.1999999999999 223.8 58.8 223.8 48.8C223.8 38.6999999999999 218 -64 218 -64H248S242.2 38.7 242.2 48.8C242.2 58.8 251.7 62.2 260.6 61.3C270.6 58.8 365.8 38.7 365.8 38.7S360.8 58.8 355.8 73.8S355.8 91.3 360.8 96.3C363.3 98.8 465.9999999999999 188.7000000000001 465.9999999999999 188.7000000000001L448.5 196.2000000000001C438.5 201.1000000000001 441.1 207.7000000000001 443.5 213.6000000000001C445.8999999999999 221.2000000000001 463.6 280.9000000000001 463.6 280.9000000000001S415.9 270.9000000000001 405.9 268.4000000000001C398.4 266 395.9 270.9000000000001 393.4 275.9000000000001S378.4 308.3000000000001 378.4 308.3000000000001S325.8 248.4000000000001 323.3 246.0000000000001C313.3 238.5000000000001 303.2 246.0000000000001 305.7 256.0000000000001C305.7 266.0000000000001 333.3 385.6 333.3 385.6S303.2 368.2000000000001 293.2 363.2000000000001C285.7 358.2000000000001 280.5999999999999 358.2000000000001 275.5999999999999 368.2000000000001C270.5 375.7 232.9 448 232.9 448" />
|
157 |
-
<glyph glyph-name="cc-amazon-pay"
|
158 |
-
unicode=""
|
159 |
-
horiz-adv-x="576" d=" M124.7 246.2C124.8 258 124.7 269.7 124.7 281.5V316.8C124.7 318.1 125.1 318.8 126.1 319.5C137.6 327.5 150.2 331.6 164.3 330.6C176.8 329.7 187 323.6 192.4 308.9C195.7 300 196.5 290.7000000000001 196.5 281.2000000000001C196.5 272.5 195.8 263.9 193.1 255.6C187.4 237.8 174.4 230.9000000000001 157.4 231.7C145.7 232.2 135.5 236.7 126 243.4C125.1 244.2 124.6 245 124.7 246.2zM279.6 231.6C284.2000000000001 229.8 288.9000000000001 229.6 293.7000000000001 230.1C305.3000000000001 231.3 315.6 235.8 325.0000000000001 242.6C325.9000000000001 243.2 326.3000000000001 243.9 326.3000000000001 245.1C326.2000000000001 249 326.3000000000001 253 326.3000000000001 256.9C326.3000000000001 260.9 326.2000000000001 264.9 326.3000000000001 268.9C326.3000000000001 270.3 325.9000000000001 270.9 324.5000000000001 271.1C317.5000000000001 272 310.6000000000001 273.3 303.6000000000001 274C296.6000000000001 274.6 289.6000000000001 274.3 282.8000000000001 272.1C276.1000000000001 269.9 271.1000000000001 265.9 269.1000000000001 259C267.5000000000001 253.6 267.5000000000001 248.2 269.2000000000001 242.8C270.8000000000002 237.3 274.4000000000001 233.6 279.6000000000001 231.6zM576 368V16C576 -10.5 554.5 -32 528 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H528C554.5 416 576 394.5 576 368zM368.5 344.1C368.9 342.4 369.4 340.7 370.1 339C386.6 298.4 403 257.7 419.6 217.1C421 213.6 421.3 210.7 419.8 207.2C417 201 414.9000000000001 194.6 412 188.5C409.4 183 405.3 179 399.3 177.3C395.1 176.2 390.8 176 386.4000000000001 176.4C384.3 176.6 382.2000000000001 177.1 380.1 177.2000000000001C377.3 177.4 375.9000000000001 176.1 375.8 173.2000000000001C375.7 170.4 375.7 167.6 375.8 164.9C375.9000000000001 160.3 377.4000000000001 158.2000000000001 382 157.4C386.7 156.6 391.4 155.8 396.2 155.7000000000001C410.5 155.4 421.9 161.1 429.3 173.6C432.2 178.5 434.9000000000001 183.7000000000001 437 189C456.8 239.1 476.5 289.3 496.2 339.5C496.8 341 497.3 342.5 497.5 344.1C497.9 346.5 496.8 347.7 494.4 347.8C488.8 347.9 483.3 347.8 477.7 347.8C474.6 347.8 472.4 346.4 471.3 343.5C470.9 342.4 470.4 341.2 470 340.1L440.9 256.4C438.8 250.3 436.7 244.3 434.4 237.8C434 238.7 433.8 239.2 433.6 239.7C422.8 269.6 412 299.6 401.2 329.5C399.5 334.2 397.7 339 395.9 343.7C395 346.2 393.2 347.7 390.5 347.7C384.1 347.8 377.7 347.9 371.3 347.8C369.1 347.8 368 346.2 368.5 344.1zM242.4 242C244.1 230.3 250 221.2 260.4 215.4C270.3 209.9 281.1 209.2 292.1 210.8C304.8 212.7 316 218.1 325.9 226.3C326.3 226.6 326.7 226.9 327.3 227.3C327.8 224.1 328.2 221.1 328.8 218.1C329.3 215.5 330.9 213.8 333.3 213.7C337.9 213.6 342.4 213.6 347 213.7C349.3 213.8 350.8 215.3 351 217.6C351.1 218.4 351.1 219.2 351.1 219.9V308.7000000000001C351.1 312.3000000000001 350.9 315.9000000000001 350.4 319.5000000000001C348.8 330.3000000000001 344.2 339.2000000000001 334.5 344.9000000000001C328.9 348.2000000000001 322.7 349.9000000000001 316.3 350.8000000000001C313.3 351.2000000000001 310.3 351.5000000000001 307.2 351.9000000000001H297.2C296.4 351.8000000000001 295.6 351.6000000000001 294.7 351.6000000000001C286.5 351.2000000000001 278.4 350.2000000000001 270.5 348.1000000000001C265.4 346.8000000000001 260.5 344.9000000000001 255.5 343.2000000000001C252.5 342.2000000000001 251 340.0000000000001 251.1 336.7000000000001C251.2 333.9000000000001 251 331.1000000000001 251.1 328.4000000000001C251.2 324.3000000000001 252.9 323.2000000000001 256.8 324.3000000000001C263.3 326.0000000000001 269.9000000000001 327.8000000000001 276.5 329.1000000000001C286.8 331.0000000000001 297.2 331.8000000000001 307.6 330.3000000000001C313 329.5000000000001 318.1 327.9000000000001 321.7000000000001 323.3000000000001C324.8000000000001 319.3000000000001 325.9000000000001 314.5000000000001 326.1 309.6000000000001C326.4000000000001 302.7000000000001 326.3 295.7000000000001 326.4000000000001 288.8000000000001C326.4000000000001 288.4000000000001 326.3 288.1000000000001 326.2000000000001 287.6000000000001C325.8000000000001 287.6000000000001 325.4000000000001 287.6000000000001 325.1 287.7000000000001C316.3 289.8000000000001 307.4000000000001 291.3000000000001 298.3 291.8000000000001C288.8 292.3000000000001 279.4000000000001 291.7000000000001 270.4000000000001 288.6000000000001C259.6 284.8000000000001 250.9000000000001 278.3000000000001 245.8000000000001 267.8000000000001C241.7000000000001 259.5000000000001 241.2000000000001 250.8000000000001 242.4000000000001 242.0000000000001zM98.7 341.1V165.8C98.7 165 98.7 164.1 98.8 163.3C99 160.8 100.5 159.1999999999999 102.9 159.1C108.8 159 114.7 159 120.6 159.1C123.1 159.1 124.6 160.8 124.7 163.2C124.8 164 124.8 164.9 124.8 165.7V226.4C125.7 225.7 126.2 225.2 126.7 224.8C141.7 212.3 158.9 208.2 177.8 211.9C194.9 215.3 206.7 225.8 214.5 241.1C220.3 252.7 222.8 265.2 223.2 278.1C223.7 292.4 222.2 306.5 216.4 319.8C209.3 336.2 197.5 347.1 179.7 350.7C177 351.3 174.2 351.5 171.5 351.9H164.5C163.3 351.7 162.1 351.6 160.9 351.4C149.2 350 138.6 345.6 129.1 338.7C127.1 337.3 125.2 335.7 123.2 334.2C123.1 334.7 122.9 335 122.8 335.4C122.4 337.7 122.1 340 121.7 342.3C121.1 346.2 119.2 347.8 115.3 347.9H105.6C99.7 348 98.7 346.9 98.7 341.1zM493.6 109C490.9 109.7 488.5 109 486 108C442.1 89.6 396.5 77.8 349.2 72.2C334.7 70.5 320.1 69.4 305.5 69C278.9 68.3 252.3 69.8 225.9 73.3C208.1 75.7 190.4 79 172.9 83.2C135.9 92.1 100.2 104.9 66.2 122C57.4 126.4 48.8 131.3 40.1 136C36.3 138.1 33.9 137.5 31.9 133.9V132.2C33.1 130.6 34.1 128.8 35.6 127.4C71.6 95.2 112.2 70.9 157.6 54.5C179.5 46.6 202 40.8 224.9 37C238.9 34.7 252.9 33.2 267.1 32.5C270.1 32.4 273.1 32.3 276.1 32.1C276.8 32.1 277.5 31.9 278.2 31.8H295.9C296.6 31.9 297.3 32.1 298 32.1C312.9 32.5 327.8 33.9 342.6 36.1C364 39.3 385 44.2 405.5 50.8C435.1 60.4 463.2 73.2 488.9 90.9C491.7 92.8 494.6 94.7000000000001 496.9 97.1C501.2 101.5 499.2 107.5 493.6 109zM544 136.7C543.2 140.9 540 142.5 536.4 143.7C530.6999999999999 145.6 524.8 146.5 518.8 147C507.8 147.9 496.8 147.4 485.9999999999999 145.4C473.9999999999999 143.2 462.6 139.3 452.4999999999999 132.3C451.3 131.5 450.1 130.5 449.3999999999999 129.3C448.7999999999999 128.4 448.7 127 448.8999999999999 125.9C449.2 124.6 450.5999999999999 124.3 451.8999999999999 124.4C452.4999999999999 124.4 453.0999999999999 124.4 453.6999999999999 124.5L473.1999999999999 126.6C482.8 127.5 492.3999999999999 128.1 501.9999999999999 127.4C506.1 127.1 510.1 126.2000000000001 514 125.2000000000001C518.3 124.1 520.2 120.8000000000001 520.4 116.5000000000001C520.6999999999999 109.8000000000001 519.1999999999999 103.4 517.5 97.0000000000001C514 84.1000000000001 509.2 71.6000000000001 504.2 59.2000000000001C503.9 58.4 503.5 57.5000000000001 503.4 56.7000000000001C503 54.2 504.4 52.7 506.8 53.2C508.1999999999999 53.5000000000001 509.8 54.3000000000001 510.8 55.3000000000001C514.5 58.9000000000001 518.3 62.5000000000001 521.4 66.5000000000001C532.1 80.3000000000001 538.4 96.1000000000001 542.1 113.1000000000001C542.8000000000001 116.1000000000001 543.3000000000001 119.2000000000001 543.8000000000001 122.2000000000001C544.0000000000001 126.9000000000001 544.0000000000001 131.8000000000001 544.0000000000001 136.7000000000001z" />
|
160 |
-
<glyph glyph-name="cc-amex"
|
161 |
-
unicode=""
|
162 |
-
horiz-adv-x="576" d=" M576 192.6C538.1 192.8 531.8 193.5 521.5 187.6V192.6C476.2 192.6 468 194.3 456.6 187.4V192.6H378.4000000000001V187.5C367.0000000000001 194 357.0000000000001 192.6 302.7000000000001 192.6V187C296.4000000000001 190.7 288.2000000000001 192.6 278.4000000000001 192.6H220.4C216.9 188.8 207.9 178.9 204.7000000000001 175.4C192.0000000000001 189.5 194.2000000000001 187 189.2000000000001 192.6H106.1000000000001V100.3H188.1000000000001C191.4000000000001 103.8 201.0000000000001 114.1999999999999 204.2000000000001 117.6999999999999C216.9 103.3999999999999 214.5000000000001 105.9999999999999 219.6000000000001 100.3H268.5000000000001C268.5000000000001 115 268.6000000000001 108.6 268.6000000000001 123.3C280.1000000000001 123.1 292.9000000000001 123.5 302.9000000000001 129.5C302.9000000000001 115.6 302.8000000000001 112.3999999999999 302.8000000000001 100.3H342.4000000000001C342.4000000000001 118.8 342.5000000000001 107.6999999999999 342.5000000000001 125.6C348.7000000000001 125.6 350.2000000000001 125.6 351.9000000000001 125.5C352.0000000000001 124.1999999999999 351.9000000000001 125.5 351.9000000000001 100.3C504.7000000000001 100.3 497.8000000000001 99.1999999999999 508.6000000000001 104.8V100.3C543.4000000000001 100.3 563.4000000000001 98.1 576.1000000000001 106.4V16C576.1000000000001 -10.5 554.6000000000001 -32 528.1000000000001 -32H48C21.5 -32 0 -10.5 0 16V219.7H26.6C30.8 229.8 28.8 225 33 235H52.2C56.4 225 54.4 229.8 58.6 219.7H111.5V231.1C113.7 226.1 112.6 228.6 116.6 219.7H146.1C148.5 225.2 148.7 225.5 151.2 231.1V219.7H286.7V244.8C293.1 244.8 294.7 244.9 296.5 244.6C296.5 244.6 296.3 233.7 296.6 219.8H363.1V228.7C370.5 222.8 380.5 219.8 392.8 219.8H419.6C423.8 229.9 421.8 225.1 426 235.1H445C451.5 220.1 445.2 234.6 451.6 219.8H504.4V241.7C516.2 222 512.2 228.8 517.6 219.8H559.2V311.8H519.3000000000001V293.4C507.1000000000001 313.6 513.0000000000001 303.8 508.1000000000001 311.8H464.8000000000001V291.2C458.6000000000001 305.8 460.2 302 456.0000000000001 311.8H423.6000000000001C423.2000000000001 311.8 421.3000000000001 311.6 421.3000000000001 312.1H393.7000000000001C380.9000000000001 312.1 370.6 308.9 363.0000000000001 302.8V312.1H323.1000000000001V306.8C312.3000000000001 312.9 302.4000000000001 311.9 258.7000000000001 312.1C258.6 312.1 247.1000000000001 312.2 247.1000000000001 312.1H144.1000000000001C141.6000000000001 306 137.3000000000001 295.7 131.5000000000001 282.1C128.7000000000001 288.1 120.5000000000001 305.9 117.6000000000001 312.1H71.6000000000001V291C64.2000000000001 308.4 66.9000000000001 302 62.6000000000001 312.1H22.9C19.5 304.2 9.2 280.1 -0.2 258.2V368C-0.2 394.5 21.3 416 47.8 416H527.8C554.3 416 575.8 394.5 575.8 368V192.6zM389.4 273.2C389.1 273 388 271 388 265.6C388 259.6 388.9 257.9 389.1 257.7C389.3 257.6 390.2000000000001 257.2 392.5 257.2L399.8 274.1C398.7 274.1 397.7 274.2 396.7 274.2C391.1 274.2 389.7 273.5 389.4 273.2zM369.5 142.3C378.7 139 380.5 132.8 380.5 123.9L380.4 110.1H363.8L363.9 121.6C363.9 133.4 360.1 135.4 349.1 135.4H331.5L331.3999999999999 110.1H314.7999999999999L314.8999999999999 179.4H354.2999999999999C367.2999999999999 179.4 381.3999999999999 177.1 381.3999999999999 160.7C381.2999999999999 153.1 377.2 145.4 369.5 142.3zM363.2 157.6999999999999C363.2 164.0999999999999 357.6 165.0999999999999 352.5 165.0999999999999H331.5V149.4999999999999H352.2C357.8 149.4999999999999 363.2 150.7999999999999 363.2 157.6999999999999zM544.9 164.8H575V179.4H542.1C529.3000000000001 179.4 518.3000000000001 172.8 518.3000000000001 158.7C518.3000000000001 125.7 561.0000000000001 145.9 561.0000000000001 131.3C561.0000000000001 126.2 556.7000000000002 124.9 552.6000000000001 124.9H520.6000000000001L520.5000000000001 110.1H552.5000000000001C560.9000000000001 110.1 570.1000000000001 111.9 575.0000000000001 119V144.8C564.5000000000001 158.6 535.7000000000002 146.1 535.7000000000002 158.3C535.7000000000002 164.1 540.3000000000002 164.8 544.9000000000002 164.8zM445.7 165.1V179.4H390.5L390.4 110.1H445.6L445.7 124.4L407.1 124.7V138.5H445V152.6H407.2V165.1H445.7zM487.9 125H455.7L455.6 110.1999999999999H487.8C502.6 110.1999999999999 514 115.8 514 132.1999999999999C514 165.3999999999999 471.1 143.3999999999999 471.1 158.5C471.1 164.1 476 164.8999999999999 480.3 164.8999999999999H510.7V179.5H477.5C464.7 179.5 454 172.8999999999999 454 158.8C454 125.8 496.7 146.3 496.7 131.4C496.6 126 492 125 487.9 125zM409.8 283.7C392.4 284 376.6 287.8 376.6 264C376.6 252.2 379.4 244.1 392.7 244.1H400.1L423.6 298.5999999999999H448.4L476.3 233.2V298.5999999999999H501.6L530.6999999999999 250.5V298.5999999999999H547.5999999999999V229.6H524L492.8 281.5V229.6H459.1L452.5 244.9H418.2L411.8 229.6H392.6C369.8 229.6 359.6 241.4 359.6 263.5999999999999C359.6 286.9 370.1 298.8999999999999 393.6 298.8999999999999H409.7000000000001V283.7zM424.1 259.2H446.9L435.7 286.8L424.1 259.2zM351.5 298.8H334.6V229.5H351.5V298.8zM313.4 261.5C322.9 258.2 324.4 252.3 324.4 243.1V229.6H307.8C307.5 244.4 311.4 254.7 293 254.7H275V229.6H258.6V298.8999999999999L297.7 298.5999999999999C311 298.5999999999999 325.1 296.5999999999999 325.1 280.2C325.2 272.2 320.8 264.4999999999999 313.4 261.4999999999999zM306.7 276.8C306.7 283.2 301.1 284.2 296 284.2H275V268.9H295.7C301.4 268.9 306.7 270.2 306.7 276.8zM247.2 284.2V298.8H191.7V229.5H247.2V243.8H208.3V257.6H246.1V271.7H208.3V284.2H247.2zM162.6 229.5V283.7L138.6 229.5H124L100 283.7V229.5H66.2L59.8 244.8H25.3L18.9 229.5H1L30.7 298.8H55.2L83.3 233.1V298.8H110.4L132.1 251.8L151.8 298.8H179.4V229.5H162.6zM53.9 259.2L42.4 286.8L31.2 259.2H53.9zM306.9 156.7C306.9 128.8 276.5 133.4 257.6 133.4L257.5 110.1H225.3L204.9 133.1L183.5999999999999 110.1H118.1999999999999L118.2999999999999 179.4H184.7999999999999L205.2999999999999 156.6L226.3 179.4H279C294.6 179.4 306.9 174 306.9 156.7zM194.2 144.9L176.3 165.1H134.6V152.6H170.9V138.5H134.6V124.6999999999999H175.2L194.2 144.8999999999999zM241 172L215.7 144.6L241 116.5V172zM289.3 156.7C289.3 162.8 284.7 165.1 279.1 165.1H257.6V147.5H278.8C284.7 147.5 289.3 150.3 289.3 156.6999999999999z" />
|
163 |
-
<glyph glyph-name="cc-apple-pay"
|
164 |
-
unicode=""
|
165 |
-
horiz-adv-x="576" d=" M302.2 229.6C302.2 212.4 291.7 202.5 273.2 202.5H248.9V256.7H273.3C291.7 256.7 302.2 246.9 302.2 229.6zM349.7 167C349.7 158.7 356.9 153.3 368.2 153.3C382.6 153.3 393.4 162.4 393.4 175.2V182.9L369.9 181.4C356.6 180.5 349.7 175.6 349.7 167zM576 369V17C576 -9.5 554.5 -31 528 -31H48C21.5 -31 0 -9.5 0 17V369C0 395.5 21.5 417 48 417H528C554.5 417 576 395.5 576 369zM127.8 250.8C136.2 250.1 144.6 255 149.9 261.2000000000001C155.1 267.6 158.5 276.2000000000001 157.6 284.9C150.2 284.6 141 280 135.7 273.6C130.9 268.1 126.8 259.2 127.8 250.8zM188.4 176.3C188.2 176.5 168.8 183.9 168.6 206.3C168.4 225 183.9 234 184.6 234.5C175.8 247.5 162.2 248.9 157.5 249.2C145.3 249.9 134.9 242.3 129.1 242.3C123.2 242.3 114.4 248.9 104.8 248.7C92.3 248.5 80.6 241.4 74.3 230.1C61.2 207.5 70.9 174.1 83.6 155.7C89.8 146.6 97.3 136.6 107.1 137C116.4 137.4 120.1 143 131.3 143C142.6 143 145.8 137 155.6 137.1C165.8 137.3 172.1 146.2000000000001 178.4 155.3C185.3 165.7 188.2 175.7 188.4 176.3zM323.8 229.7C323.8 256.3 305.3 274.5 278.9000000000001 274.5H227.7000000000001V138.1H248.9000000000001V184.7000000000001H278.2000000000001C305.0000000000001 184.7000000000001 323.8000000000001 203.1000000000001 323.8000000000001 229.7000000000001zM413.8 206C413.8 225.7 398 238.4000000000001 373.8 238.4000000000001C351.3 238.4000000000001 334.7 225.5000000000001 334.1 207.9H353.2000000000001C354.8000000000001 216.3000000000001 362.6 221.8000000000001 373.2000000000001 221.8000000000001C386.2000000000001 221.8000000000001 393.4000000000001 215.8000000000001 393.4000000000001 204.6000000000001V197.1000000000001L367.0000000000001 195.5000000000001C342.4000000000001 194.0000000000001 329.1000000000001 183.9 329.1000000000001 166.4C329.1000000000001 148.7000000000001 342.8000000000001 137.0000000000001 362.5000000000001 137.0000000000001C375.8000000000001 137.0000000000001 388.1000000000001 143.7000000000001 393.7000000000001 154.4H394.1V138H413.7000000000001V206zM516 237.1H494.5L469.6 156.5H469.2L444.3000000000001 237.1H422L457.9 137.8L456 131.8C452.8 121.6 447.5 117.6 438.1 117.6C436.4000000000001 117.6 433.2000000000001 117.8 431.9000000000001 117.9V101.5000000000001C433.1 101.1000000000001 438.4000000000001 101.0000000000001 440.0000000000001 101.0000000000001C460.7 101.0000000000001 470.4 108.9 478.9 132.8000000000001L516 237.1z" />
|
166 |
-
<glyph glyph-name="cc-diners-club"
|
167 |
-
unicode=""
|
168 |
-
horiz-adv-x="576" d=" M239.7 368.1C142.8 368.1 63.9 289.5 63.9 192.3C63.9 95.4 142.8 16.5 239.7 16.5C336.9 16.5 415.5 95.4 415.5 192.3C415.5 289.5 336.9 368.1 239.7 368.1zM199.8 88.5C158.1 104.4 128.4 144.9 128.4 192.3S158.1 280.2000000000001 199.8 296.4V88.5zM279.6 88.2V296.4C321.3 280.2000000000001 351 239.7 351 192.3S321.3 104.4 279.6 88.2000000000001zM528 416H48C21.5 416 0 394.5 0 368V16C0 -10.5 21.5 -32 48 -32H528C554.5 -32 576 -10.5 576 16V368C576 394.5 554.5 416 528 416zM329.7 0H239.4C133.2 0 45.6 85.5 45.6 190.2C45.6 304.8 133.2 384 239.4 384H329.7C434.7 384 530.4 304.8 530.4 190.2C530.4 85.5 434.7 0 329.7 0z" />
|
169 |
-
<glyph glyph-name="cc-discover"
|
170 |
-
unicode=""
|
171 |
-
horiz-adv-x="576" d=" M83 235.9C83 228 79.8 220.4 74.1 215.2C69.2 210.8 62.5 208.8 52.2 208.8H48V263H52.2C62.5 263 68.9 261.3 74.1 256.4C79.8 251.4 83 243.8 83 235.9zM504.8 264H499.9V239.1H504.6C514.9 239.1 520.4 243.5 520.4 251.9C520.4 259.8 514.9 264 504.8 264zM576 368V16C576 -10.5 554.5 -32 528 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H528C554.5 416 576 394.5 576 368zM428 195H473.3V208.8H444V231H472.3V244.8H444V263H473.3V277H428V195zM341.8 277L376.8 192.8H385.4000000000001L420.9000000000001 277H403.4000000000001L381.2000000000001 221.8L359.3000000000001 277H341.8000000000001zM258.8 235.4C258.8 210.8 278.7 190.8 303.4000000000001 190.8C328.0000000000001 190.8 348.0000000000001 210.7 348.0000000000001 235.4C348.0000000000001 260 328.1000000000001 280 303.4000000000001 280C278.8 280 258.8 260.1 258.8 235.4zM190.8 235.9C190.8 203.4 224.4 183.4 254.1 197.7V216.7C234.8 197.4 207.3 210.9 207.3 235.9C207.3 259.6 234 275 254.1 254.9V273.9C223.9 288.9 190.8 267.1 190.8 235.9zM156.9 207.6C149.3 207.6 143.1 211.3 139.4 218.4L129.1 208.5C146.9 182.4 185.7 190.3 185.7 219.8C185.7 232.9 180.3 238.8 162.1 245.4C152.5 248.8 149.8 251.3 149.8 255.7C149.8 264.4 164.3 269.8 174.7 258.2000000000001L183.1 269C164 286.1 133.4 277.9000000000001 133.4 254.7C133.4 243.4 138.6 237.5000000000001 153.6 232.0000000000001C179.3 222.9 168.3 207.6 156.9 207.6zM99.5 235.9C99.5 260 81.5 277 55.4 277H32V195H55.4C86.3 195 99.5 217.4 99.5 235.9zM122.9 277H106.9V195H122.9V277zM544 160C510.7 139.2 317.6 35.6 128 0H529C537.2 0 544 6.8 544 15V160zM544 195L518.1 229.5C530.2 232 536.8000000000001 240.1 536.8000000000001 252.7C536.8000000000001 281.2 506.5000000000001 277.1 483.9000000000001 277.1V195.1H499.9000000000001V227.9H502.1000000000001L524.3000000000001 195.1H544z" />
|
172 |
-
<glyph glyph-name="cc-jcb"
|
173 |
-
unicode=""
|
174 |
-
horiz-adv-x="576" d=" M431.5 203.7V236C472.7 236 470 235.8 470 235.8C477.3 234.5 483.3 228.5 483.3 219.8C483.3 211 477.3 205.3 470 204C468.8 203.6 466.7 203.7 431.5 203.7zM474.3 183.5C471.5 184.2 471 184 431.5 184V149C471.1 149 471.5 148.8 474.3 149.5C481.8 151 487.8 157.5 487.8 166.5C487.8 175.2 481.8 182 474.3 183.5zM576 368V16C576 -10.5 554.5 -32 528 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H528C554.5 416 576 394.5 576 368zM182 255.7H125C125 188.6 135.7 146 89.2 146C69.7 146 50.4 151.7 32 160.8V132.8C62 124.5 100 124.5 100 124.5C197.9 124.5 182 172.2 182 255.7zM360.5 251.2C297.1 267.2 195.5 266.1 195.5 191.9C195.5 114.8 303.7 118.3 360.5 132.7V161C312.9 136.3 253 139 253 192S312.8 247.6 360.5 223.2V251.2zM544 161.5C544 180 527.5 192 506 193.5V194.3C525.5 197 536.3 209.8 536.3 224.5C536.3 243.5 520.5999999999999 254.5 499.3 255.5C499.3 255.5 505.6 255.8 379 255.8V128.3H501.6999999999999C525.9999999999999 128.2 543.9999999999999 141.2 543.9999999999999 161.5z" />
|
175 |
-
<glyph glyph-name="cc-mastercard"
|
176 |
-
unicode=""
|
177 |
-
horiz-adv-x="576" d=" M482.9 37.7C482.9 30.9 478.3 26 471.7 26C464.9 26 460.5 31.2 460.5 37.7C460.5 44.2 464.9 49.4 471.7 49.4C478.3 49.4 482.9 44.2 482.9 37.7zM172.1 49.4C165 49.4 160.9 44.2 160.9 37.7C160.9 31.2 165 26 172.1 26C178.6 26 183 30.9 183 37.7C182.9 44.2 178.6 49.4 172.1 49.4zM289.6 49.7C284.2 49.7 280.9 46.2 280.1 41H299.2C298.3 46.7 294.8 49.7 289.6 49.7zM397.4 49.4C390.6 49.4 386.5 44.2 386.5 37.7C386.5 31.2 390.6 26 397.4 26C404.2 26 408.6 30.9 408.6 37.7C408.6 44.2 404.2 49.4 397.4 49.4zM503.3 23.3C503.3 22.9999999999999 503.6 22.8 503.6 22.1999999999999C503.6 21.8999999999999 503.3 21.6999999999999 503.3 21.0999999999999C502.9999999999999 20.7999999999999 502.9999999999999 20.5999999999999 502.8 20.2999999999999C502.4999999999999 19.9999999999999 502.3 19.7999999999999 501.6999999999999 19.7999999999999C501.3999999999999 19.4999999999999 501.1999999999999 19.4999999999999 500.5999999999999 19.4999999999999C500.2999999999999 19.4999999999999 500.0999999999999 19.4999999999999 499.4999999999999 19.7999999999999C499.1999999999999 19.7999999999999 498.9999999999999 20.0999999999999 498.6999999999999 20.2999999999999C498.3999999999999 20.5999999999999 498.1999999999999 20.7999999999999 498.1999999999999 21.0999999999999C497.8999999999999 21.5999999999999 497.8999999999999 21.8999999999999 497.8999999999999 22.1999999999999C497.8999999999999 22.6999999999999 497.8999999999999 22.9999999999999 498.1999999999999 23.3C498.1999999999999 23.8 498.4999999999999 24.1 498.6999999999999 24.4C498.9999999999999 24.7 499.1999999999999 24.7 499.4999999999999 24.9C499.9999999999999 25.2 500.2999999999999 25.2 500.5999999999999 25.2C501.0999999999999 25.2 501.3999999999999 25.2 501.6999999999999 24.9C502.1999999999999 24.6 502.4999999999999 24.6 502.8 24.4S502.9999999999999 23.8 503.3 23.3zM501.1 21.9C501.6 21.9 501.6 22.2 501.9 22.2C502.2 22.5 502.2 22.7 502.2 23C502.2 23.3 502.2 23.5 501.9 23.8C501.6 23.8 501.4 24.1 500.8 24.1H499.1999999999999V20.6H499.9999999999999V22H500.3L501.4 20.6H502.2L501.1 21.9zM576 367V15C576 -11.5 554.5 -33 528 -33H48C21.5 -33 0 -11.5 0 15V367C0 393.5 21.5 415 48 415H528C554.5 415 576 393.5 576 367zM64 227.4C64 150.9 126.1 88.9 202.5 88.9C229.7 88.9 256.4 97.1 279 112C206.1 171.3 206.6 283.2 279 342.5C256.4 357.5 229.7 365.6 202.5 365.6C126.1 365.7 64 303.6 64 227.4zM288 118.6C358.5 173.6 358.2 280.8 288 336.1C217.8 280.8 217.5 173.5 288 118.6zM145.7 42.3C145.7 51 140 56.7 131 57C126.4 57 121.5 55.6 118.2 50.5C115.8 54.6 111.7 57 106 57C102.2 57 98.4 55.6 95.4 51.6V56H87.2V19.3H95.4C95.4 38.2 92.9 49.5 104.4 49.5C114.6 49.5 112.6 39.3 112.6 19.3H120.5C120.5 37.6 118 49.5 129.5 49.5C139.7 49.5 137.7 39.5 137.7 19.3H145.9V42.3zM190.6 56H182.7V51.6C180 54.9 176.2 57 171 57C160.7 57 152.8 48.8 152.8 37.7C152.8 26.5 160.7 18.4 171 18.4C176.2 18.4 180 20.3 182.7 23.8V19.1999999999999H190.6V56zM231.1 30.4C231.1 45.4 208.2 38.6 208.2 45.6C208.2 51.3 220.1 50.4 226.7 46.7L230 53.2C220.6 59.3 199.8 59.2 199.8 45C199.8 30.7 222.7 36.7 222.7 30C222.7 23.7 209.2 24.2 202 29.2L198.5 22.9C209.7 15.3 231.1 16.9 231.1 30.4zM266.5 21.1L264.3 27.9C260.5 25.8 252.1 23.5 252.1 32V48.6H265.2000000000001V56H252.1000000000001V67.2H243.9000000000001V56H236.3000000000001V48.7H243.9000000000001V32C243.9000000000001 14.4 261.2000000000001 17.6 266.5000000000001 21.1zM279.8 34.4999999999999H307.3C307.3 50.6999999999999 299.9000000000001 57.1 289.9000000000001 57.1C279.3 57.1 271.7000000000001 49.2 271.7000000000001 37.8C271.7000000000001 17.3 294.3000000000001 13.9 305.5000000000001 23.6L301.7000000000001 29.6C293.9000000000001 23.2 282.1 23.8 279.8000000000001 34.4999999999999zM338.9000000000001 55.9999999999999C334.3 57.9999999999999 327.3 57.8 323.7000000000001 51.6V56H315.5000000000001V19.3H323.7000000000001V40C323.7000000000001 51.6 333.2000000000001 50.1 336.5000000000001 48.4L338.9000000000001 56zM349.5000000000001 37.6999999999999C349.5000000000001 49.0999999999999 361.1000000000001 52.8 370.2000000000001 46.0999999999999L374.0000000000001 52.5999999999999C362.4000000000001 61.6999999999999 341.3000000000001 56.6999999999999 341.3000000000001 37.5999999999999C341.3000000000001 17.7999999999999 363.7000000000001 13.7999999999999 374.0000000000001 22.5999999999999L370.2000000000001 29.0999999999999C361.0000000000001 22.5999999999999 349.5000000000001 26.4999999999999 349.5000000000001 37.6999999999999zM416.2000000000001 55.9999999999999H408V51.6C399.7 62.6 378.1 56.4 378.1 37.7C378.1 18.5 400.5 13 408 23.8V19.2H416.2V56zM449.9000000000001 55.9999999999999C447.5000000000001 57.1999999999999 438.9000000000001 58.8999999999999 434.7000000000001 51.6V56H426.8000000000001V19.3H434.7000000000001V40C434.7000000000001 51 443.7000000000001 50.3 447.5000000000001 48.4L449.9000000000001 56zM490.2 70.8999999999999H482.3000000000001V51.5999999999999C474.1000000000001 62.4999999999999 452.4000000000001 56.6999999999999 452.4000000000001 37.6999999999999C452.4000000000001 18.3 474.9000000000001 13.0999999999999 482.3000000000001 23.8V19.1999999999999H490.2V70.8999999999999zM497.8000000000001 145.9999999999999V141.3999999999999H498.6000000000001V146H500.5000000000001V146.8H495.9V146H497.8zM504.4000000000001 22.1999999999999C504.4000000000001 22.6999999999999 504.4000000000001 23.2999999999999 504.1000000000001 23.7999999999999C503.8000000000001 24.0999999999999 503.6000000000001 24.5999999999999 503.3000000000001 24.8999999999999C503.0000000000001 25.1999999999999 502.5000000000001 25.3999999999999 502.2 25.6999999999999C501.7 25.6999999999999 501.1 25.9999999999999 500.6 25.9999999999999C500.3 25.9999999999999 499.8 25.6999999999999 499.2 25.6999999999999C498.7 25.3999999999999 498.4 25.1999999999999 498.1 24.8999999999999C497.6 24.5999999999999 497.3 24.0999999999999 497.3 23.7999999999999C497 23.2999999999999 497 22.6999999999999 497 22.1999999999999C497 21.8999999999999 497 21.3999999999999 497.3 20.7999999999999C497.3 20.4999999999999 497.6 19.9999999999999 498.1 19.6999999999999C498.4 19.3999999999999 498.6 19.1999999999999 499.2 18.8999999999999C499.7 18.5999999999999 500.3000000000001 18.5999999999999 500.6 18.5999999999999C501.1 18.5999999999999 501.7 18.5999999999999 502.2 18.8999999999999C502.5000000000001 19.1999999999999 503.0000000000001 19.3999999999999 503.3000000000001 19.6999999999999C503.6000000000001 19.9999999999999 503.8000000000001 20.4999999999999 504.1000000000001 20.7999999999999C504.4000000000001 21.3999999999999 504.4000000000001 21.8999999999999 504.4000000000001 22.1999999999999zM507.6000000000001 146.8999999999999H506.2000000000001L504.6000000000001 143.3999999999999L503.0000000000001 146.8999999999999H501.6000000000001V141.4999999999999H502.4000000000001V145.5999999999999L504.0000000000001 142.0999999999999H505.1000000000001L506.5000000000001 145.5999999999999V141.4999999999999H507.6000000000001V146.8999999999999zM512.0000000000001 227.3999999999999C512.0000000000001 303.5999999999999 449.9000000000001 365.6999999999999 373.5000000000001 365.6999999999999C346.3000000000002 365.6999999999999 319.6000000000002 357.4999999999999 297.0000000000001 342.5999999999999C369.1000000000002 283.2999999999999 370.2000000000001 171.0999999999999 297.0000000000001 112.0999999999999C319.6000000000002 97.0999999999999 346.5000000000001 88.9999999999999 373.5000000000001 88.9999999999999C449.9000000000001 88.8999999999999 512.0000000000001 150.8999999999999 512.0000000000001 227.3999999999999z" />
|
178 |
-
<glyph glyph-name="cc-paypal"
|
179 |
-
unicode=""
|
180 |
-
horiz-adv-x="576" d=" M186.3 189.8C186.3 177.6 176.6 168.3 164.3 168.3C155.1 168.3 148.3 173.5 148.3 183.3C148.3 195.5 157.8 205.3 170 205.3C179.3 205.3 186.3 199.6 186.3 189.8zM80.5 238.3H75.8C74.3 238.3 72.8 237.3 72.6 235.6L68.3 208.9L76.5 209.2000000000001C87.5 209.2000000000001 96 210.7000000000001 98 223.4C100.3 236.8000000000001 91.8 238.3000000000001 80.5 238.3000000000001zM364.5 238.3H360C358.2 238.3 357 237.3 356.8 235.6L352.6 208.9L360.6 209.2000000000001C373.6 209.2000000000001 382.6 212.2000000000001 382.6 227.2000000000001C382.5 237.8000000000001 373 238.3000000000001 364.5 238.3000000000001zM576 368V16C576 -10.5 554.5 -32 528 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H528C554.5 416 576 394.5 576 368zM128.3 232.6C128.3 253.6 112.1 260.6 93.6 260.6H53.6C51.1 260.6 48.6 258.6 48.4 255.9L32 153.8C31.7 151.8 33.2 149.8 35.2 149.8H54.2C56.9 149.8 59.4 152.7 59.7 155.5L64.2 182.1C65.2 189.3 77.4 186.8 82.2 186.8C110.8 186.8 128.3 203.8 128.3 232.6zM212.5 223.8H193.5C189.7 223.8 189.5 218.3 189.3 215.6C183.5 224.1 175.1 225.6 165.6 225.6C141.1 225.6 122.4 204.1 122.4 180.4C122.4 160.9 134.6 148.2 154.1 148.2C163.1 148.2 174.3 153.1 180.6 160.1C180.1 158.6 179.6 155.4 179.6 153.9C179.6 151.6 180.6 149.9 182.8 149.9H200C202.7 149.9 205 152.8 205.5 155.6L215.7 219.9C216 221.8 214.5 223.8 212.5 223.8zM253 125.9L316.7 218.5C317.2 219 317.2 219.5 317.2 220.2C317.2 221.9 315.7 223.7 314 223.7H294.8C293.1 223.7 291.3 222.7 290.3 221.2L263.8 182.1999999999999L252.8 219.6999999999999C252 221.8999999999999 249.8 223.6999999999999 247.3 223.6999999999999H228.6C226.9000000000001 223.6999999999999 225.4000000000001 221.8999999999999 225.4000000000001 220.1999999999999C225.4000000000001 219 244.9000000000001 163.3999999999999 246.6 158.0999999999999C243.9000000000001 154.2999999999999 226.1 129.4999999999999 226.1 126.4999999999999C226.1 124.6999999999999 227.6 123.2999999999999 229.3 123.2999999999999H248.5C250.3 123.3999999999999 252 124.3999999999999 253 125.8999999999999zM412.3 232.6C412.3 253.6 396.1 260.6 377.6 260.6H337.9000000000001C335.2000000000001 260.6 332.7000000000001 258.6 332.4000000000001 255.9L316.2000000000001 153.9C316.0000000000001 151.9 317.5000000000001 149.9 319.4000000000001 149.9H339.9000000000001C341.9000000000001 149.9 343.4000000000001 151.4 343.9000000000001 153.1L348.4000000000001 182.1C349.4000000000001 189.3 361.6 186.8 366.4000000000001 186.8C394.8 186.8 412.3 203.8 412.3 232.6zM496.5 223.8H477.5C473.7 223.8 473.5 218.3 473.2 215.6C467.7 224.1 459.2 225.6 449.5 225.6C425 225.6 406.3 204.1 406.3 180.4C406.3 160.9 418.5 148.2 438 148.2C447.3 148.2 458.5 153.1 464.5 160.1C464.2 158.6 463.5 155.4 463.5 153.9C463.5 151.6 464.5 149.9 466.7 149.9H484C486.7 149.9 489 152.8 489.5 155.6L499.7 219.9C500 221.8 498.5 223.8 496.5 223.8zM544 257.1C544 259.1 542.5 260.6 540.8 260.6H522.3C520.8 260.6 519.3 259.4 519.0999999999999 257.9L502.8999999999999 153.9L502.5999999999999 153.4C502.5999999999999 151.6 504.0999999999999 149.9 506.0999999999999 149.9H522.5999999999999C525.0999999999999 149.9 527.5999999999999 152.8 527.8 155.6L544 256.8V257.1zM454 205.3C441.8 205.3 432.3 195.6 432.3 183.3C432.3 173.6 439.3 168.3 448.5 168.3C460.5 168.3 470.2 177.5 470.2 189.8C470.3 199.6 463.3 205.3 454 205.3z" />
|
181 |
-
<glyph glyph-name="cc-stripe"
|
182 |
-
unicode=""
|
183 |
-
horiz-adv-x="576" d=" M396.9 191.5C396.9 172.4 388.1 158.1 375 158.1C366.7 158.1 361.7 161.1 358.2 164.8L358 217.6C361.7 221.7 366.8 224.6 375 224.6C387.9 224.7 396.9 210.1 396.9 191.5zM576 368V16C576 -10.5 554.5 -32 528 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H528C554.5 416 576 394.5 576 368zM122.2 166.9C122.2 209.2 67.9 201.6 67.9 217.6C67.9 223.1 72.5 225.3 80 225.3C90.8 225.3 104.5 222 115.3 216.2V249.6C103.5 254.3 91.8 256.1 80 256.1C51.2 256.1 32 241.1 32 215.9C32 176.6 86 183 86 166C86 159.4 80.3 157.3 72.4 157.3C60.6 157.3 45.5 162.2 33.5 168.6V134.7000000000001C46.7 129.0000000000001 60.1 126.6 72.3 126.6C101.9 126.8 122.2 141.3 122.2 166.9zM191.1 253.8H164.1V284.6L129.4 277.2L129.2000000000001 163.3C129.2000000000001 142.3 145.0000000000001 126.8 166.1000000000001 126.8C177.7000000000001 126.8 186.3000000000001 128.9 191.0000000000001 131.5V160.3999999999999C186.5000000000001 158.5999999999999 164.0000000000001 152.0999999999999 164.0000000000001 173V223.5H191.0000000000001V253.8zM264.9000000000001 253.8C260.2000000000001 255.5 243.6 258.6 235.3000000000001 243.3L233.1000000000001 253.8H202.4000000000001V129.3H237.9000000000001V213.7C246.3000000000001 224.7 260.5000000000001 222.6 265.0000000000001 221.1V253.8zM309.1 253.8H273.4000000000001V129.3H309.1V253.8zM309.1 301.1L273.4000000000001 293.5V264.6L309.1 272.2V301.1zM431.8 192.3C431.8 233.6 408.3 256.1 383.4000000000001 256.1C369.5000000000001 256.1 360.5000000000001 249.5 355.6 245L353.8 253.8H322.5V88L358 95.5L358.1 135.7C363.2000000000001 132 370.8 126.7 383.2000000000001 126.7C408.6 126.8 431.8000000000001 147.2 431.8000000000001 192.3zM544 191.1C544 227.5 526.4 256.2 492.7 256.2C458.9 256.2 438.4 227.5 438.4 191.3C438.4 148.5 462.6 126.8 497.2 126.8C514.2 126.8 526.9 130.6999999999999 536.6 136V164.6C526.9 159.7 515.8000000000001 156.7 501.7 156.7C487.9 156.7 475.7 161.6 474.1 178.2H543.6C543.7 180.2 544 187.6 544 191.1zM492.4 227.2C483.5 227.2 473.7 220.5 473.7 204.5H510.4C510.4 220.5 501.1 227.2 492.4 227.2z" />
|
184 |
-
<glyph glyph-name="cc-visa"
|
185 |
-
unicode=""
|
186 |
-
horiz-adv-x="576" d=" M470.1 216.7S477.7 179.5 479.4 171.7H446C449.3 180.6 462 215.2 462 215.2C461.8 214.9 465.3 224.3 467.3 230.1L470.1 216.7zM576 368V16C576 -10.5 554.5 -32 528 -32H48C21.5 -32 0 -10.5 0 16V368C0 394.5 21.5 416 48 416H528C554.5 416 576 394.5 576 368zM152.5 116.8L215.7 272H173.2L133.9 166L129.6 187.5L115.6 258.9C113.3 268.8 106.2 271.6 97.4 272H32.7L32 268.9C47.8 264.9 61.9 259.1 74.2 251.8L110 116.8H152.5zM246.9 116.6L272.1 272H231.9000000000001L206.8000000000001 116.6H246.9000000000001zM386.8 167.4C387 185.1 376.2 198.6 353.1 209.7000000000001C339 216.8000000000001 330.4000000000001 221.6000000000001 330.4000000000001 228.9000000000001C330.6 235.5000000000001 337.7000000000001 242.3000000000001 353.5000000000001 242.3000000000001C366.6000000000001 242.6000000000001 376.2000000000001 239.5000000000001 383.4000000000001 236.4000000000001L387.0000000000001 234.7000000000001L392.5000000000001 268.3000000000001C384.6000000000001 271.4000000000001 372.0000000000001 274.9000000000001 356.5000000000001 274.9000000000001C316.8000000000001 274.9000000000001 288.9000000000001 253.7000000000001 288.7000000000001 223.5C288.4000000000001 201.2 308.7000000000001 188.8 323.9000000000001 181.3C339.4000000000001 173.7 344.7000000000001 168.7 344.7000000000001 162C344.5000000000001 151.6 332.1 146.8 320.6 146.8C304.6 146.8 296 149.3 282.9000000000001 155.1L277.6 157.6L272 122.7000000000001C281.4 118.4 298.8 114.6 316.8 114.4C359 114.3 386.5 135.2000000000001 386.8 167.4zM528 116.6L495.6 272H464.5C454.9 272 447.6 269.2 443.5 259.1L383.8 116.6H426S432.9 135.8 434.4 139.9H486C487.2 134.4 490.8 116.6 490.8 116.6H528z" />
|
187 |
-
<glyph glyph-name="centercode"
|
188 |
-
unicode=""
|
189 |
-
horiz-adv-x="512" d=" M329.2 179.4C325.4 144.2 293.8 118.8 258.6 122.6C223.4 126.4 198 158 201.8 193.2C205.6 228.4 237.2 253.8 272.4 250C307.5 246.2 333 214.5999999999999 329.2 179.4zM243.4 -55.7C96.7 -48 -8.2 82.5 10.1 223.7C21.3 310.3 75.9 380.6 149.2 415.7C310.2 492.8 498.9 378.3 503.9 199.1C508 52.1 385.5 -63.1 243.4 -55.7zM423.3 124.3C451.1999999999999 242.3 262.8 330.2 186.1 358.5C128.6 302.2 117 169.9 152.3 14.1C221.1 -1.7 321.4 40.4999999999999 423.3 124.3z" />
|
190 |
-
<glyph glyph-name="centos"
|
191 |
-
unicode=""
|
192 |
-
horiz-adv-x="447.5" d=" M289.6 350.2L321.2000000000001 318.5L244.9000000000001 242V350.2H289.6zM127.2 318.5L203.5 242V350.2H158.8L127.2 318.5zM168.7 360.1H213.4V232.2L224.2000000000001 221.4L235.0000000000001 232.2V360.1H279.7000000000001L224.2000000000001 415.7L168.7000000000001 360.1zM194.9 192L184.1 202.8H55.5V247.6L0 192L55.5 136.4V181.2H184.1L194.9 192zM274.2 212.7H382.1V257.5L350.5 289.2L274.2 212.7zM447.5 192L392 247.6V202.8H264.3L253.5 192L264.3 181.2H392V136.4L447.5 192zM65.4 271.5L97.9 303.2L188.2 212.7H203.5V228L113.2 318.5L144.8 350.2H65.4V271.5zM382.1 350.2H303.6L335.2000000000001 318.5L244.9000000000001 228V212.7H260.2000000000001L350.5000000000001 303.2L382.1000000000001 271.5V350.2zM203.5 33.8V141.9L127.2 65.4L158.8 33.7H203.5zM65.4 212.7H174.2L97.9 289.2L65.4 257.5V212.7zM382.1 112.5L350.5 80.8L260.2 171.3H244.9V156L335.2 65.5L303.6 33.8H382.1V112.5zM382.1 171.3H274.2L350.5 94.8L382.1 126.5V171.3zM321.2000000000001 65.5L244.9 142V33.9H289.6L321.2000000000001 65.5zM97.9 94.8L174.2 171.3H65.4V126.5L97.9 94.8zM279.7000000000001 23.9H235V151.8L224.2 162.6L213.4 151.8V23.9H168.7L224.2 -31.7L279.7 23.9zM113.2000000000001 65.5L203.5000000000001 156V171.3H188.2000000000001L97.9000000000001 80.8L65.4000000000001 112.5V33.8H144.8000000000001L113.2000000000001 65.5z" />
|
193 |
-
<glyph glyph-name="chrome"
|
194 |
-
unicode=""
|
195 |
-
horiz-adv-x="496" d=" M131.5 230.5L55.1 347.9C102.7 407.1 174.1 439.7 247.1 440C289.4 440.3 332.6 429.5 371.9 406.8C415.3 381.6 448.3 345.4 469.3 303.8L264 314.6C205.9 318 150.6 285.3 131.5 230.5zM164.4 192C164.4 145.8 201.8 108.4 248 108.4S331.6 145.8 331.6 192S294.2000000000001 275.6 248.0000000000001 275.6S164.4 238.3 164.4 192zM479.3 281.2L339.6 274C377.5 229.7 378.1 165.8 346.2000000000001 116.8L234.1 -55.6C280.6 -58.1 328.5 -47.9 371.9 -22.7C479.3 39.3 522.8 169.3 479.3 281.2zM133.7 144.4L40.4 327.9C14.9 288.9 0 242.1 0 192C0 68 90.8 -34.7 209.5 -52.9L273.2 71.9C215.6 61.1 160 92.7000000000001 133.7 144.4z" />
|
196 |
-
<glyph glyph-name="cloudscale"
|
197 |
-
unicode=""
|
198 |
-
horiz-adv-x="448" d=" M318.1 294L308.7000000000001 286.4C286.2000000000001 305.7000000000001 257.2000000000001 320 225.4000000000001 320C153.8 320 96 259.2 96 187.7C96 181.1 96.4 174.6 97.4 168.3C95.4 224.3 139.2 265.7000000000001 190 265.7000000000001C214.2 265.7000000000001 236.2 256.3 252.6 241.0000000000001L227.4 220.6C219.1 221.5 210.6 218.8 204.3 212.5C193.2 201.5 193.2 183.6 204.3 172.5C215.4 161.5 233.2 161.5 244.3 172.5C250.6 178.8 253.3 187.4 252.4 195.6L327.6 284.4C333.9000000000001 290.9 324.3 300.3 318.1 294zM234.3 182.5C228.7 177 219.7 177 214.1 182.5C208.5 188.1 208.5 197.1 214.1 202.7S228.7 208.3 234.3 202.7S239.9 188 234.3 182.5zM224 416C100.5 416 0 315.5 0 192S100.5 -32 224 -32S448 68.5 448 192S347.5 416 224 416zM224 32C135.8 32 64 103.8 64 192S135.8 352 224 352S384 280.2 384 192S312.2 32 224 32z" />
|
199 |
-
<glyph glyph-name="cloudsmith"
|
200 |
-
unicode=""
|
201 |
-
horiz-adv-x="332" d=" M332.5 28.1C332.5 -18.3 294.9 -56 248.5 -56S164.5 -18.3 164.5 28.1S202.1 112.1 248.5 112.1S332.5 74.5 332.5 28.1zM248.5 272C294.9 272 328.5 309.6 328.5 356S294.9 440 248.5 440S160.5 402.4000000000001 160.5 356S130.9 280 84.5 280S0.5 238.4000000000001 0.5 192S38.1 112 84.5 112S168.5 145.6 168.5 192S202.1 272 248.5 272z" />
|
202 |
-
<glyph glyph-name="cloudversify"
|
203 |
-
unicode=""
|
204 |
-
horiz-adv-x="616" d=" M148.6 144C156.8 75.5 216 28.5 294.6 32.7C345.8 -10.6 431.4000000000001 -13.1 481 38.3C550.2 37.2 599.5 82.9 612.5 137.8C627.3 200.3 594.3 270.3 520.4 292.9C487.4 381 389 394.4 333.9 377.9C276.6 360.6 249.6 324.7 234.6 268.2C226.8 265.5 208.1 259.3 189.6 244.1C201.3 244.1 204.8 235.2 204.8 224.6V204.2C204.8 193.5 196.1 184.7 185.3 184.7H165.1C154.4 184.7 145.6 190.7 145.6 201.4V208H98.8C95 208 88 203.7 88 196.1V155.7C88 149.3 93.3 143.9 99.7 143.9H148.6zM376 136C365.3 89.7 397.7 63.6 431.3 49.2C324.1 15.4 259.7 100 296 160C262.8 138.4 262.3 88.8 266.8 67.1C248.9 79.5 213 99.5 209.4 146.9C206.4 186.8 230.9 222.6 266.4 240.8000000000001C297 256.6 369.9 249.3 400 200C385.9 248 346.2 270.1 298.2 274.8C329.1 305.5 362.6 325.1 412.4 318.5C482.2 309.2 545.5999999999999 235.7 480.1 168C515.0999999999999 184.3 528.8 222.4 527.5999999999999 244.9L538.0999999999999 225.3C549.8999999999999 203.3 553.3 177.7 547.4999999999999 153.3C538.2999999999998 114.3 506.8999999999999 84.5 467.7999999999999 76.8C435.6999999999999 70.5 384.7 81.9 375.9999999999999 136zM128 240H88.2C79.3 240 72 247.3 72 256.2V295.8C72 304.7 79.3 312 88.2 312H128C136.9 312 144.2 304.7 144.2 295.8V256.2C144.2 247.3 136.9 240 128 240zM10.1 280C4.5 280 0 284.5 0 290.1V317.9C0 323.5 4.5 328 10.1 328H37.8C43.3 328 47.9 323.5 47.9 317.9V290.1C47.9 284.5 43.4 280 37.8 280H10.1zM168 305.3V326.7000000000001C168 331.8 172.2 336 177.3 336H198.7C203.8 336 208 331.8 208 326.7000000000001V305.3C208 300.2000000000001 203.8000000000001 296 198.7 296H177.3C172.2 296 168 300.2 168 305.3zM56 212.5V187.5C56 181.2 50.9 176 44.6 176H19.4C13.1 176 8 181.2 8 187.5V212.5C8 218.8 13.1 224 19.4 224H44.5C50.9 224 56 218.8 56 212.5z" />
|
205 |
-
<glyph glyph-name="codepen"
|
206 |
-
unicode=""
|
207 |
-
horiz-adv-x="512" d=" M502.285 288.296L268.2850000000001 444.296C260.298 449.211 251.7740000000001 449.256 243.7140000000001 444.296L9.714 288.296C3.714 284.2970000000001 0 277.153 0 270.011V114.012C0 106.869 3.714 99.726 9.715 95.726L243.715 -60.296C251.702 -65.211 260.226 -65.256 268.286 -60.296L502.286 95.726C508.286 99.725 512.001 106.869 512.001 114.012V270.011C512 277.153 508.286 284.2970000000001 502.285 288.296zM278 384.8690000000001L450.286 270.011L373.429 218.582L278 282.2970000000001V384.8690000000001zM234 384.8690000000001V282.2970000000001L138.571 218.582L61.714 270.011L234 384.8690000000001zM44 228.868L99.143 192.011L44 155.154V228.868zM234 -0.847L61.714 114.011L138.571 165.4400000000001L234 101.725V-0.847zM256 140.011L178.285 192.011L256 244.011L333.7150000000001 192.011L256 140.011zM278 -0.847V101.725L373.429 165.4400000000001L450.286 114.0110000000001L278 -0.847zM468 155.154L412.857 192.011L468 228.868V155.154z" />
|
208 |
-
<glyph glyph-name="codiepie"
|
209 |
-
unicode=""
|
210 |
-
horiz-adv-x="472" d=" M422.5 245.1C453.2 245.1 456 192 422.2 192H411.4V147.7H384.8V245.1H422.5zM472 95.4C429.9 3.5 350.4 -56 248 -56C111 -56 0 55 0 192S111 440 248 440C345.4 440 420.8 386.3 466.2 301.6L280.2 192.8L472 95.4zM433.5 82.9L373.2 113.6C346.1 69.3 302.8 42.1999999999999 250.8 42.1999999999999C168.3 42.1999999999999 101.6 108.8999999999999 101.6 191.0999999999999C101.6 273.5999999999999 168.3 340.2999999999999 250.8 340.2999999999999C299.2 340.2999999999999 339.7 316.7999999999999 367.7 276.8999999999999L427.2 311.4999999999999C386.5 374.0999999999999 322.5 411.4999999999999 248 411.4999999999999C126.8 411.4999999999999 28.5 313.1999999999999 28.5 191.9999999999999S126.8 -27.5 248 -27.5C326.6 -27.5 394.5 14.6 433.5 82.9z" />
|
211 |
-
<glyph glyph-name="confluence"
|
212 |
-
unicode=""
|
213 |
-
horiz-adv-x="512" d=" M2.3 35.8C-2.2 28.2 0.2 18.3 7.8 13.6L113.7 -51.6C121.4 -56.2999999999999 131.4 -53.9999999999999 136.1 -46.3C136.1 -46.1999999999999 136.2 -46.1 136.2 -46.1C203.3 66.1 216.7 49.8000000000001 417.1 -45.4C425.2 -49.3 434.9 -45.8 438.8 -37.7C438.9 -37.6 438.9 -37.4 439 -37.3L489.3999999999999 76.8C492.9999999999999 84.9 489.2999999999999 94.4 481.2999999999999 98.1C459.0999999999999 108.4999999999999 415.0999999999999 129.3 375.3999999999999 148.4C127.5 269 44.6 102.7 2.3 35.8zM509.7 347.9000000000001C514.2 355.5 511.8 365.4000000000001 504.2 370.1L398.4 435.2C390.9 440.2 380.8 438.3 375.8 430.8C375.6 430.5 375.4 430.2 375.2 429.8C307.8999999999999 317.2 294.0999999999999 334.2 94.5999999999999 428.9C86.4999999999999 432.8 76.7999999999999 429.3 72.8999999999999 421.2C72.7999999999999 421.1 72.7999999999999 420.9 72.6999999999999 420.8L22.2 306.7C18.6 298.6 22.3 289.1 30.3 285.4C52.5 275 96.6 254.2 136.3 235C384.3 115 467.1 280.4 509.7 347.9z" />
|
214 |
-
<glyph glyph-name="connectdevelop"
|
215 |
-
unicode=""
|
216 |
-
horiz-adv-x="576" d=" M550.5 207L500.411 293.786C501.482 295.928 502.286 298.339 502.286 301.0180000000001C502.286 309.054 495.59 315.751 487.554 316.019L432.107 411.9120000000001C432.643 413.519 433.178 415.126 433.178 416.733C433.178 425.304 426.214 432.001 417.91 432.001C413.089 432.001 409.071 429.858 406.124 426.376H299.518C296.839 429.857 292.8210000000001 432 288 432S279.161 429.857 276.482 426.375H170.411C167.464 429.857 163.447 432 158.625 432C150.322 432 143.357 425.304 143.357 416.732C143.357 415.125 143.893 413.25 144.429 411.911L88.446 314.678C83.09 312.2680000000001 79.339 307.178 79.339 301.017C79.339 300.482 79.607 299.9460000000001 79.607 299.41L26.303 207.267C19.071 205.928 13.713 199.767 13.713 192.267C13.713 185.035 18.802 178.874 25.767 177.267L80.946 81.909C80.41 80.302 80.142 78.963 80.142 77.088C80.142 69.8559999999999 85.231 63.6949999999999 92.196 62.356L143.893 -27.376C143.357 -28.983 142.822 -30.858 142.822 -32.733C142.822 -41.304 149.786 -48.001 158.09 -48.001C162.911 -48.001 166.929 -45.858 169.608 -42.6439999999999H276.483C279.161 -45.857 283.447 -48 288 -48S296.839 -45.857 299.5180000000001 -42.643H406.6610000000001C409.3390000000001 -45.589 413.3570000000001 -47.464 417.6430000000001 -47.464C426.2140000000001 -47.464 432.9110000000001 -40.5 432.9110000000001 -32.196C432.9110000000001 -30.589 432.6440000000001 -29.25 432.1080000000001 -27.911L483.8050000000001 62.357C490.7690000000001 63.696 495.859 69.857 495.859 77.0889999999999C495.859 78.696 495.5910000000001 80.3029999999999 495.0550000000001 81.91L549.9660000000001 177.268C556.9300000000002 178.607 562.2880000000001 184.768 562.2880000000001 192.268C562.2860000000002 199.5 557.1960000000001 205.661 550.5000000000001 207zM153.535 -2.732L109.875 73.071H153.535V-2.732zM153.535 81.107H109.875C109.607 82.178 109.071 83.249 108.536 84.321L153.535 131.731V81.107zM153.535 143.518L103.178 90.2139999999999C101.839 90.7499999999999 100.499 91.5539999999999 99.16 91.821L43.447 188.25C43.982 189.589 43.982 190.929 43.982 192.268S43.982 194.678 43.714 195.75L95.679 285.75C98.358 286.0180000000001 101.036 286.822 103.447 288.429L153.536 236.464V143.518zM153.535 245.84L107.732 293.25C109.071 295.393 109.875 298.071 109.875 301.017C109.875 301.285 109.607 301.821 109.607 302.089L153.535 317.893V245.84zM153.535 326.465L109.875 310.661L153.535 386.197V326.465zM480.054 287.357L480.8579999999999 286.018L445.5 118.875L381.75 186.107L479.786 287.625L480.054 287.357zM291.75 92.893L303.2680000000001 81.107H280.5L291.75 92.893zM291.4820000000001 104.143L208.179 189.589L287.7320000000001 273.964L370.7680000000001 186.375L291.4820000000001 104.1429999999999zM296.8390000000001 98.25L376.1250000000001 180.482L443.6250000000001 109.232L437.7330000000001 81.107H313.714L296.839 98.25zM410.411 403.607C411.4820000000001 403.0710000000001 412.553 402.535 413.8930000000001 402.267L471.75 301.553V301.017C471.75 298.0710000000001 472.553 295.3930000000001 473.893 293.25L376.393 192L293.358 279.589L410.411 403.607zM401.304 405.75L287.7320000000001 285.482L230.6780000000001 345.75L397.0170000000001 405.75H401.3040000000001zM277.821 405.75C280.499 403.072 283.981 401.4650000000001 288 401.4650000000001S295.5 403.072 298.1789999999999 405.75H373.1789999999999L224.786 352.179L173.893 405.75H277.8210000000001zM161.572 400.125L162.643 402.267A33.834 33.834 0 0 1 165.322 403.0710000000001L216.483 349.231L161.572 329.41V400.125zM161.572 320.839L222.375 342.803L282.107 279.589L202.554 195.482L161.572 237.535V320.839zM161.572 228.161L198 190.393L161.572 152.089V228.161zM161.572 140.303L203.625 184.767L286.393 98.785L269.25 81.107H161.572V140.303zM168.536 -21.75C166.929 -20.143 165.054 -19.072 162.643 -18.268L161.572 -16.6609999999999V73.071H261.482L169.875 -21.75H168.536zM298.447 -21.75C295.7680000000001 -19.34 292.019 -17.465 288 -17.465S280.233 -19.34 277.553 -21.75H181.124L272.731 73.071H311.035L402.642 -21.75H298.447zM418.447 -9.964L414.161 -17.464C412.822 -17.732 411.751 -18.267 410.679 -18.803L321.483 73.072H435.8589999999999L418.447 -9.964zM431.303 12.268L444.161 73.071H466.125L431.303 12.268zM466.125 81.107H445.7680000000001L450.3210000000001 102.2670000000001L467.4640000000001 84.0530000000001C466.929 83.2500000000001 466.393 82.179 466.1250000000001 81.107zM532.2860000000001 188.518L476.8390000000001 91.821C475.5000000000001 91.286 474.1600000000001 90.75 472.8210000000001 89.947L452.1960000000001 111.911L486.7500000000001 275.839L532.5530000000001 196.553C532.2860000000001 195.214 531.7500000000001 193.875 531.7500000000001 192.268C531.7500000000001 190.929 532.0180000000001 189.857 532.2860000000001 188.518z" />
|
217 |
-
<glyph glyph-name="contao"
|
218 |
-
unicode=""
|
219 |
-
horiz-adv-x="512" d=" M45.4 143C59.8 75.9 71.8 14 113.6 -32H34C15.3 -32 0 -16.8 0 2V382C0 400.7 15.2 416 34 416H91.7C77.9 403.4 65.6 388.8 54.8 372.4C9.4 302.4 27.8 225.6 45.4 143zM478 416H387.8C409.2 394.6 427 366.5 440.5 331.9L303.4 302.6C288.5 331.6 265.6 355.9 220.8 346.5C196.2 341.2 179.8 327.2 172.5 311.9C163.7 293.2000000000001 159.3 272.1 180.7 171.6C201.8 71.4 214.4 53.9 230.2 40.4C243.1 29.3 263.6 23.4 288.5 28.7C333 38.1 344.2 69.4 345.9 101.9L483.3 131.5000000000001C486.4999999999999 60.0000000000001 464.6 6.3000000000001 425.9 -32.0999999999999H478C496.7 -32.0999999999999 512 -16.8999999999999 512 1.9000000000001V382C512 400.8 496.8 416 478 416z" />
|
220 |
-
<glyph glyph-name="cpanel"
|
221 |
-
unicode=""
|
222 |
-
horiz-adv-x="640" d=" M52.9 234.3H92.9L86.7 210.7C84.8 204.2 79.3 199.8 72.4 199.8H53.8C28.9 199.8 29.1 162.4 53.8 162.4H65.1C69.3 162.4 72.7 158.5000000000001 71.5 154.1L64.4 128H52C18.5 128 -7 159.4 1.7 193.2C9 220.2 30 234.3 52.9 234.3M73.1 128L108 258.1C109.8 264.5 115.2 269 122.3 269H159.3C183.4 269 204.7 252.6 210.3 227.8C216.9 198.7 195.8 162.5 158.6 162.5H126.6L133 186.3C134.8000000000001 192.5 140.3000000000001 197.1 147.3000000000001 197.1H157.6000000000001C170.0000000000001 197.1 178.4000000000001 208.8 175.9000000000001 219.7C173.8000000000001 228.9 166.0000000000001 234.5000000000001 157.6000000000001 234.5000000000001H137.8000000000001L112 138.8C110.1 132.6 104.6 128.1 97.8 128.1L73.1 128M293.7 197.4C294 198.4 295.6 202.7 291.6 202.7H234.1C224.4 202.7 217.5 211.6 219.9 221.2L223.4 234.6H301.3C320.1 234.6 334.6 217 329.8 197.8L315.8 146C313 135.4 303.6 128.2 292.4 128.2L234.9 128.4C192 128.4 196.4 192.2 235.6 192.2H284L280.5 179C278.6 172.8 273.1 168.2 266.3 168.2H244.7C239.4 168.2 239.4 160.3 244.7 160.3H279.6C284.2000000000001 160.3 284.7000000000001 164.2 285.1 165.6L293.7000000000001 197.4M396.8000000000001 234.3000000000001C431.2000000000001 234.3000000000001 456.1000000000001 202.0000000000001 447.1000000000001 168.9L438.3000000000001 135.8C437.1000000000001 130.9 432.6000000000001 128 428.0000000000001 128H408.9000000000001C404.4000000000001 128 401.3 132 402.5000000000001 136.3L413.1000000000001 176.3C416.4000000000001 187.9 407.5000000000001 199.7 395.0000000000001 199.7H375.2000000000001L358.0000000000001 135.7000000000001C356.8000000000001 130.9 352.4000000000001 127.9 347.6000000000001 127.9H328.7000000000001C324.5000000000001 127.9 321.1000000000001 131.8 322.3000000000002 136.2000000000001L348.5000000000001 234.2000000000001H396.8000000000002M498 196.4L490 166.4C489.1 163.1 491.5 159.7 495.1 159.7H568.4L562.6999999999999 138.7C560.8 132.5 555.3 128 548.4999999999999 128H481.7999999999999C461.7999999999999 128 448.4999999999999 147 453.4999999999999 164.7L464.2999999999999 204.7C469.0999999999999 222.3 484.9999999999999 234.3 502.8999999999999 234.3H550.1999999999999C569.1999999999999 234.3 583.4 216.6 578.4999999999999 197.5L575.2999999999998 185.5C572.3999999999999 174.5 562.5999999999998 167.9 552.0999999999998 167.9H498.6999999999998L502.1999999999998 180.9C503.7999999999998 187.1 509.3999999999998 191.7 516.3999999999999 191.7H538C540 191.7 541.3 192.7 541.9 194.7L542.6 197.3C543.3000000000001 200 541.3000000000001 202.4 538.7 202.4H505.8000000000001C501.7 202.4 498.9000000000001 200.3 498.0000000000001 196.4zM568.2 128L603.8000000000001 261.1C605.0000000000001 265.8 609.3000000000001 269 614.2 269H633.1C637.6 269 640.8000000000001 265 639.6 260.7L613.1 162.5C608 141.8 588.9 128 568.2 128" />
|
223 |
-
<glyph glyph-name="creative-commons-by"
|
224 |
-
unicode=""
|
225 |
-
horiz-adv-x="496" d=" M314.9 253.6V152.2H286.6V31.7H209.5V152.1H181.2V253.6C181.2 258 182.8 261.8 185.8 264.9C188.9 268 192.7 269.6 197.1 269.6H299C303.1 269.6 306.8 268 310.1 264.9C313.2000000000001 261.7000000000001 314.9000000000001 258 314.9000000000001 253.6zM213.4 317.3C213.4 340.6 224.9 352.3 247.9 352.3S282.4 340.6 282.4 317.3C282.4 294.3 270.9 282.8 247.9 282.8S213.4 294.3 213.4 317.3zM247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3z" />
|
226 |
-
<glyph glyph-name="creative-commons-nc-eu"
|
227 |
-
unicode=""
|
228 |
-
horiz-adv-x="496" d=" M247.7 440C103.6 440 0 323.2 0 192C0 55.7 111.7 -56 247.7 -56C377.9 -56 496 44.9 496 192C496 331 388.4 440 247.7 440zM248.3 -10.7C136.3 -10.7 44.7 81.8 44.7 192C44.7 215.2 48.4 237.2 55.6 258L121.3 228.9H116.6V199.4H139.9C139.9 193.2 139.5 196.2 139.5 179.9H116.7V150.4H143.7C155.1 83.4 210.9 49.1 268.3 49.1C294.9 49.1 318.9 56.9999999999999 333.1 64.9L323.1 111C314.4 106.4 294.9 100.2 275.8 100.2C247.6 100.2 217.7 111.1 208.5 150.4H298.8L427.1 93.6C425.6 91.4999999999999 370.9 -10.7 248.3 -10.7zM231.6 179.9L231.1 180.3L232 179.9H231.6zM308.8 199.4H312.5V228.9H242.2L213.6 241.5C216.1 247 219 252 222.4 255.8C235.3 271.6 253.5 278.2 273.5 278.2C291.8 278.2 308.8 272.8 319.6 268.2L331.2000000000001 315.5C316.2000000000001 322.1 294.2000000000001 327.9 268.9000000000001 327.9C229.9000000000001 327.9 196.7000000000001 312.1 173 285.6C167.7 279.5 163.2 272.7000000000001 159.1 265.5L77.5 301.6C142.1 398.4000000000001 235.2 395.2000000000001 248.2 395.2000000000001C361.2000000000001 395.2000000000001 451.2 305 451.2 191.8C451.2 173.1 449.1 155.5 444.9000000000001 138.9L308.8000000000001 199.4z" />
|
229 |
-
<glyph glyph-name="creative-commons-nc-jp"
|
230 |
-
unicode=""
|
231 |
-
horiz-adv-x="496" d=" M247.7 440C103.6 440 0 323.2 0 192C0 55.6 111.8 -56 247.7 -56C377.9 -56 496 44.8 496 192C496 330.8 388.5 440 247.7 440zM248.3 -10.7C136.3 -10.7 44.7 81.8 44.7 192C44.7 213.1 47.7 233.2 53.7 252.3L180.7 195.8H152.8V157.2H210.9L216.6 145.4V126.7H152.8V88H216.6V32H278.3V88H342.5V123.7L423.5 87.6C422 85.4 366.3999999999999 -10.7 248.3 -10.7zM335.9 126.6H278.3V145.3L281.2 150.9L335.8999999999999 126.6zM342.4 178V195.8H303.8L366.8 311.8H301L257.6 215.8L234.6 226L195 311.7H129.2000000000001L156.5000000000001 260.7L74.6000000000001 297.2C102.4000000000001 341.3 157.2000000000001 395.3 248.3000000000001 395.3C361.1 395.3 451.3000000000001 305.3 451.3000000000001 191.9C451.3000000000001 170.9 448.6000000000001 151.3 443.4000000000001 132.9L342.4000000000001 178z" />
|
232 |
-
<glyph glyph-name="creative-commons-nc"
|
233 |
-
unicode=""
|
234 |
-
horiz-adv-x="496" d=" M247.6 440C387.4 440 496 332.1 496 192C496 44.8 377.5 -56 247.6 -56C113.1 -56 0 54.8 0 192C0 324.9 104.7 440 247.6 440zM55.8 258.9C48.4 238.5 44.7 216.2 44.7 192C44.7 81.1 136.8 -10.4 248.4 -10.4C370.8 -10.4 425.6 91.4 426.9 93.7000000000001L333.5 135.3000000000001C325.8 98.2000000000001 292.3 82.3000000000001 265.3 79.9000000000001V41.8000000000001H236.5V80C209 80.3 183.9 90.2 161.2 109.7L195.3 144.2C227 114.8 281.7 112.4 281.7 146.4C281.7 152.6 279.5 157.6 275.1 161.5C260.9 167.5 273.3 161.6 55.8 258.9zM248.4 395.7C210 395.7 136 387 77.9 302.7L172.7 260.2C182.7 291.5 213.1 303.1 236.5 304.5V342.6H265.3V304.5C288 303.3 308.7 295.6 327.3 281.5L295 248.3C252.3 278.2000000000001 211.5 256.3 225 237.2C278.4 213.1 268.8 217.4 318 195.6L445.1 138.9C449.2000000000001 156.3 451.3 174.0000000000001 451.3 192C451.3 249.0000000000001 431.5 297 392 335.9000000000001C352.7 375.8000000000001 304.8 395.7000000000001 248.4 395.7000000000001z" />
|
235 |
-
<glyph glyph-name="creative-commons-nd"
|
236 |
-
unicode=""
|
237 |
-
horiz-adv-x="496" d=" M247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3zM342.4 251V208.5H162.1V251H342.4zM342.4 171.2V128.7H162.1V171.2H342.4z" />
|
238 |
-
<glyph glyph-name="creative-commons-pd-alt"
|
239 |
-
unicode=""
|
240 |
-
horiz-adv-x="496" d=" M247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3zM135.5 124.7V262H203.7C237.4 262 254.2 246.5 254.2 215.5C254.2 206.5 251.2 169 197.1 169H170.1V124.7H135.5zM169.6 236.3V194.7H198.8C226.7 194.7 228.8 236.3 197.9 236.3H169.6zM263.5 124.7V262H316.7C338.1 262 386.7 256.8 386.7 193.4C386.7 129.9 338.1 124.8 316.7 124.8H263.5zM297.6 233.2V153.5H317.5C341.5 153.5 352 168.8 352 193.4C352 235.4 320.8 233.3 317 233.3L297.6 233.2z" />
|
241 |
-
<glyph glyph-name="creative-commons-pd"
|
242 |
-
unicode=""
|
243 |
-
horiz-adv-x="496" d=" M248 440C111 440 0 328.9 0 192C0 55 111 -56 248 -56S496 55 496 192C496 328.9 385 440 248 440zM248 -9.5C108.8 -9.5 12.2 128.5 57.8 258.4L136.6 223.3C134.5 212.8 133.3 201.8 133.3 190.4C133.3 91.4 207.2 63.5 253.7 63.5C276.6 63.5 307.2000000000001 70.2 333.1 93L297 136.9C291.5 130.6 279.4 120.2 260.7 120.2C222.9 120.2 207 160.1 206.8 192.1C437.2 89.5 423.3 95.6 424.7 95.3C390.4 32.9 324.1 -9.5 248 -9.5zM442.2 140.5L218.2 240.5C237 274.5 273.1 271.2 292.9 251.5L333.3 293.1C306.2 316.4 275.3 320.6 255.2 320.6C207.8 320.6 174.3 300.1 154.5 269L79.5999999999999 302.4C115.6999999999999 357.3 177.6999999999999 393.6 248.1 393.6C359.2 393.6 449.5999999999999 303.2 449.5999999999999 192.1C449.5999999999999 174.1 447.2 156.7000000000001 442.7999999999999 140.1C442.4999999999999 140.2000000000001 442.3999999999999 140.3 442.1999999999999 140.5z" />
|
244 |
-
<glyph glyph-name="creative-commons-remix"
|
245 |
-
unicode=""
|
246 |
-
horiz-adv-x="496" d=" M247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3zM410.1 187.6L415 185.4V115.4C407.8 111.8 351.6 87.9 347.7 86.6C341.2 88.4 234 133.4 210.4 142.8L146.2 116.2L82.9 143.7V207.5L142.2 232.3C141.5 233 141.8 227.3 141.8 302.7000000000001L209.1 332.4000000000001L361 269.5V207.9L410.1 187.6zM339.7000000000001 106.1V149.9H339.3000000000001V151.7000000000001L225.5000000000001 198.2000000000001V153L339.3000000000001 106.1V106.5L339.7000000000001 106.1zM347.2000000000001 163.7000000000001L387.1 180.1L350.3 195.6L311.3 179.2000000000001L347.2 163.7000000000001zM399.5000000000001 125.6V168.6L355.2 150V106.6L399.5 125.6z" />
|
247 |
-
<glyph glyph-name="creative-commons-sa"
|
248 |
-
unicode=""
|
249 |
-
horiz-adv-x="496" d=" M247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3zM137.7 227C150.7 310.9 218.2 322.7 246.6 322.7C346.4 322.7 374.1 240.2 374.1 188.5C374.1 124.9 333.1 55.6 245.2 55.6C206.3 55.6 146.1 75.6 135.8 152.6H198.3C199.8 122.5 217.9 107.4 252.8 107.4C276.1 107.4 310.8 125.6 310.8 190.2000000000001C310.8 272.7000000000001 261.7 270.8000000000001 254.1 270.8000000000001C221 270.8000000000001 202.4 256.2000000000001 198.3 227.0000000000001H216.5L167.3 177.8000000000001L118.3 227.0000000000001H137.7z" />
|
250 |
-
<glyph glyph-name="creative-commons-sampling-plus"
|
251 |
-
unicode=""
|
252 |
-
horiz-adv-x="496" d=" M247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3zM355.4 189.7C350.7 189.7 346.4 186.9 344.7 182.5L340.7 173L329.7 265.8C328 279.7000000000001 307.7 279.2000000000001 306.6 265.4L302.3 214L297.1 282.8C296 297.1 275 297 273.9 282.8L270.4 237.9L264.5 332.2C263.6 346.7 242.2 346.6 241.3 332.2L236.2 248.5L231.9 314.8C231 329.2000000000001 209.7 329.2000000000001 208.7 314.8L203.4 234.6L199.3 291.6C198.2 305.9000000000001 177.3 305.9000000000001 176.1 291.8L168.4 202L166.6 214.2C164.9 225.6 149.5 227.8 144.6 217.5L131.4 189.8H87.5V166.6H138.8C143.2 166.6 147.2 169.1 149.2 173L159.9 99.9C161.9 86.4 181.8 86.9 183 100.6L186.8 144.2L192.5 65.9C193.6 51.5 214.8 51.7 215.7 66L220.3 136.4L225.1 63.1C226 48.7 247.4 48.7 248.3 63.2L253.2 143.7L257.7 71.9C258.6 57.6 279.8 57.4 280.9 71.7L285.5 130.3L290.4 65.9C291.5 51.6 312.4 51.7 313.5 65.8L320.3 148.8L323 126.5C324.4 114.6999999999999 340.7 112.3999999999999 345.3 123.3999999999999L363.3 166.7999999999999H413.8V190L355.4000000000001 189.7zM277.4 184.5H255.5V162.6C255.5 158.5 252.2 155.1 248 155.1C243.9 155.1 240.5 158.4 240.5 162.6V184.5H218.6C214.5 184.5 211.1 187.8 211.1 192C211.1 196.1 214.5 199.5 218.6 199.5H240.5V221.4C240.5 225.5 243.9 228.9 248 228.9S255.5 225.6 255.5 221.4V199.5H277.4C281.5 199.5 284.9 196.2 284.9 192C284.9 187.9 281.5 184.5 277.4 184.5z" />
|
253 |
-
<glyph glyph-name="creative-commons-sampling"
|
254 |
-
unicode=""
|
255 |
-
horiz-adv-x="496" d=" M247.6 440C389.4 440 496 329.9 496 192C496 44.9 377.5 -56 247.6 -56C113.6 -56 0 53.5 0 192C0 324.9 104.7 440 247.6 440zM248.4 395.3C130.2 395.3 44.7 297.4 44.7 192C44.7 82.2 135.9 -10.8 248.4 -10.8C351.6 -10.8 451.2 70.3 451.2 192C451.3 305.8 361 395.3 248.4 395.3zM252 342.1C254.8 342.4 263.5 341.1 263.5 330.6L270.1 223.4L275 282.7C275 288.7 279.7 293.3 285.6 293.3C291.5 293.3 296.2000000000001 288.6 296.2000000000001 282.7C296.2000000000001 280.2 295.7000000000001 288.4 301.9000000000001 201.2L307.7000000000001 265.4C308.0000000000001 268.3 310.6 274.7 317.9000000000001 274.7C321.7000000000001 274.7 327.8 272.4 328.5000000000001 265.8L340.0000000000001 169.3L345.3000000000001 182.1C347.1000000000001 186.5 350.5000000000001 188.7 355.5000000000001 188.7H413.5000000000001V167.4H362.6000000000001L344.4000000000001 123.1C340.5000000000001 113.2 324.9000000000001 114 323.6000000000001 126.2
|
1 |
+
<?xml version="1.0" standalone="no"?>
|
2 |
<!--
|
3 |
+
Font Awesome Free 5.7.1 by @fontawesome - https://fontawesome.com
|
4 |
License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
5 |
-->
|
6 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
7 |
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
8 |
+
<metadata>
|
9 |
+
Created by FontForge 20190112 at Fri Feb 1 12:28:28 2019
|
10 |
+
By Robert Madole
|
11 |
+
Copyright (c) Font Awesome
|
12 |
+
</metadata>
|
13 |
<defs>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|