Version Description
Download this release
Release Info
Developer | justinbusa |
Plugin | WordPress Page Builder – Beaver Builder |
Version | 1.6.4.4 |
Comparing to | |
See all releases |
Code changes from version 1.6.4.3 to 1.6.4.4
- changelog.txt +27 -0
- classes/class-fl-builder-admin.php +28 -0
- classes/class-fl-builder-model.php +3 -2
- classes/class-fl-builder-service-campayn.php +294 -0
- classes/class-fl-builder-service-convertkit.php +204 -0
- classes/class-fl-builder-service-drip.php +262 -0
- classes/class-fl-builder-service-mailrelay.php +244 -0
- classes/class-fl-builder-service-sendy.php +206 -0
- classes/class-fl-builder-services.php +25 -0
- classes/class-fl-builder.php +18 -18
- css/font-awesome.min.css +2 -2
- fl-builder.php +3 -2
- fonts/FontAwesome.otf +0 -0
- fonts/fontawesome-webfont.eot +0 -0
- fonts/fontawesome-webfont.svg +39 -24
- fonts/fontawesome-webfont.ttf +0 -0
- fonts/fontawesome-webfont.woff +0 -0
- fonts/fontawesome-webfont.woff2 +0 -0
- includes/admin-settings-post-types.php +3 -2
- includes/updater-config.php +1 -1
- includes/vendor/convertkit/ConvertKit.php +150 -0
- includes/vendor/drip/Drip_API.class.php +628 -0
- includes/vendor/sendy/SendyPHP.php +218 -0
- json/font-awesome.json +1 -1
- languages/readme.md +1 -1
- modules/photo/includes/frontend.php +2 -1
- modules/photo/photo.php +40 -0
- modules/video/includes/frontend.php +2 -2
- modules/video/video.php +16 -2
- modules/widget/includes/frontend.php +0 -1
- modules/widget/widget.php +3 -0
- readme.txt +2 -2
changelog.txt
CHANGED
@@ -1,3 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
<h4>1.6.4.3 - 11/23/2015</h4>
|
2 |
<p><strong>Enhancements</strong></p>
|
3 |
<ul>
|
1 |
+
<h4>1.6.4.4 - 12/08/2015</h4>
|
2 |
+
<p><strong>Enhancements</strong></p>
|
3 |
+
<ul>
|
4 |
+
<li>Added Success Action setting to the Contact Form module to show a message or redirect to a URL when the form is submitted.</li>
|
5 |
+
<li>The from email address for Contact Form module submissions is now set to the email of the person that filled out the form.</li>
|
6 |
+
<li>Added WebM fallback support to the Video module.</li>
|
7 |
+
<li>Added srcset support to the Photo module for better responsiveness of images in anticipation of WordPress 4.4.</li>
|
8 |
+
<li>Added ConvertKit integration to the Subscribe Form module.</li>
|
9 |
+
<li>Added Drip integration to the Subscribe Form module.</li>
|
10 |
+
<li>Added Campayn integration to the Subscribe Form module.</li>
|
11 |
+
<li>Added Mailrelay integration to the Subscribe Form module.</li>
|
12 |
+
<li>Added Sendy integration to the Subscribe Form module.</li>
|
13 |
+
<li>Added two new filters for working with post types that the builder is enabled on.</li>
|
14 |
+
<li>Added JavaScript event to the Accordion module for when sections are toggled.</li>
|
15 |
+
<li>Updated Font Awesome.</li>
|
16 |
+
</ul>
|
17 |
+
<p><strong>Bug Fixes</strong></p>
|
18 |
+
<ul>
|
19 |
+
<li>Fixed a bug with theme white labeling and child themes.</li>
|
20 |
+
<li>Fixed a bug with theme white labeling and the Customizer.</li>
|
21 |
+
<li>Fixed a bug with Gantry framework compatibility.</li>
|
22 |
+
<li>Fixed a bug with floating content in the Tabs module.</li>
|
23 |
+
<li>Fixed a bug with blurry background photos in the Post Slider module.</li>
|
24 |
+
<li>Fixed a bug causing global translations to be overridden by local translations.</li>
|
25 |
+
<li>Fixed a bug with cache flushing in the Widget module.</li>
|
26 |
+
</ul>
|
27 |
+
|
28 |
<h4>1.6.4.3 - 11/23/2015</h4>
|
29 |
<p><strong>Enhancements</strong></p>
|
30 |
<ul>
|
classes/class-fl-builder-admin.php
CHANGED
@@ -279,7 +279,14 @@ final class FLBuilderAdmin {
|
|
279 |
$theme_data = FLBuilderModel::get_theme_branding();
|
280 |
|
281 |
if ( ! empty( $theme_data['name'] ) ) {
|
|
|
282 |
$themes['bb-theme']['name'] = $theme_data['name'];
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
}
|
284 |
if ( ! empty( $theme_data['description'] ) ) {
|
285 |
$themes['bb-theme']['description'] = $theme_data['description'];
|
@@ -296,4 +303,25 @@ final class FLBuilderAdmin {
|
|
296 |
|
297 |
return $themes;
|
298 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
}
|
279 |
$theme_data = FLBuilderModel::get_theme_branding();
|
280 |
|
281 |
if ( ! empty( $theme_data['name'] ) ) {
|
282 |
+
|
283 |
$themes['bb-theme']['name'] = $theme_data['name'];
|
284 |
+
|
285 |
+
foreach ( $themes as $theme_key => $theme ) {
|
286 |
+
if ( isset( $theme['parent'] ) && $theme['parent'] == 'Beaver Builder Theme' ) {
|
287 |
+
$themes[ $theme_key ]['parent'] = $theme_data['name'];
|
288 |
+
}
|
289 |
+
}
|
290 |
}
|
291 |
if ( ! empty( $theme_data['description'] ) ) {
|
292 |
$themes['bb-theme']['description'] = $theme_data['description'];
|
303 |
|
304 |
return $themes;
|
305 |
}
|
306 |
+
|
307 |
+
/**
|
308 |
+
* White labels the builder theme using the gettext filter
|
309 |
+
* to cover areas that we can't access like the Customizer.
|
310 |
+
*
|
311 |
+
* @since 1.6.4.4
|
312 |
+
* @return string
|
313 |
+
*/
|
314 |
+
static public function white_label_theme_gettext( $text )
|
315 |
+
{
|
316 |
+
if ( is_admin() && 'Beaver Builder Theme' == $text ) {
|
317 |
+
|
318 |
+
$theme_data = FLBuilderModel::get_theme_branding();
|
319 |
+
|
320 |
+
if ( ! empty( $theme_data['name'] ) ) {
|
321 |
+
$text = $theme_data['name'];
|
322 |
+
}
|
323 |
+
}
|
324 |
+
|
325 |
+
return $text;
|
326 |
+
}
|
327 |
}
|
classes/class-fl-builder-model.php
CHANGED
@@ -227,12 +227,13 @@ final class FLBuilderModel {
|
|
227 |
$value = self::get_admin_settings_option( '_fl_builder_post_types', true );
|
228 |
|
229 |
if ( ! $value ) {
|
230 |
-
|
231 |
}
|
232 |
else {
|
233 |
$value[] = 'fl-builder-template';
|
234 |
-
return $value;
|
235 |
}
|
|
|
|
|
236 |
}
|
237 |
|
238 |
/**
|
227 |
$value = self::get_admin_settings_option( '_fl_builder_post_types', true );
|
228 |
|
229 |
if ( ! $value ) {
|
230 |
+
$value = array( 'page', 'fl-builder-template' );
|
231 |
}
|
232 |
else {
|
233 |
$value[] = 'fl-builder-template';
|
|
|
234 |
}
|
235 |
+
|
236 |
+
return apply_filters( 'fl_builder_post_types', $value );
|
237 |
}
|
238 |
|
239 |
/**
|
classes/class-fl-builder-service-campayn.php
ADDED
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper class for the Campayn API.
|
5 |
+
*
|
6 |
+
* @since 1.5.4
|
7 |
+
*/
|
8 |
+
final class FLBuilderServiceCampayn extends FLBuilderService {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* The ID for this service.
|
12 |
+
*
|
13 |
+
* @since 1.5.4
|
14 |
+
* @var string $id
|
15 |
+
*/
|
16 |
+
public $id = 'campayn';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* The HTTP protocal
|
20 |
+
*
|
21 |
+
* @since 1.5.8
|
22 |
+
* @access private
|
23 |
+
* @var string $api_protocol
|
24 |
+
*/
|
25 |
+
private $api_protocol = 'http';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* The API version
|
29 |
+
*
|
30 |
+
* @since 1.5.8
|
31 |
+
* @access private
|
32 |
+
* @var string $api_version
|
33 |
+
*/
|
34 |
+
private $api_version = 1;
|
35 |
+
|
36 |
+
/**
|
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 |
+
{
|
48 |
+
// Exclude http:// from the user's input
|
49 |
+
$request_uri = $this->api_protocol .'://'. preg_replace('#^https?://#', '', $base_url) .'/api/v' .$this->api_version . $endpoint;
|
50 |
+
|
51 |
+
$params['timeout'] = 60;
|
52 |
+
$params['body'] = isset($params['data']) && $params['data'] ? json_encode($params['data']) : '';
|
53 |
+
$params['headers'] = array('Authorization' => 'TRUEREST apikey='. $api_key);
|
54 |
+
$response = wp_remote_get( $request_uri, $params );
|
55 |
+
$response_code = wp_remote_retrieve_response_code( $response );
|
56 |
+
$response_message = wp_remote_retrieve_response_message( $response );
|
57 |
+
$get_response = json_decode(wp_remote_retrieve_body( $response ), true);
|
58 |
+
|
59 |
+
if ( is_wp_error($response) || (200 != $response_code) ) {
|
60 |
+
|
61 |
+
if ( is_wp_error( $response ) ) {
|
62 |
+
$data['error'] = $response->get_error_message();
|
63 |
+
}
|
64 |
+
else {
|
65 |
+
$data['error'] = isset($get_response['msg']) ? $get_response['msg'] : $response_code .' - '. $response_message;
|
66 |
+
}
|
67 |
+
|
68 |
+
}
|
69 |
+
else {
|
70 |
+
if ($get_response) {
|
71 |
+
$data = $get_response;
|
72 |
+
}
|
73 |
+
else {
|
74 |
+
$data = $response;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
return $data;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Test the API connection.
|
82 |
+
*
|
83 |
+
* @since 1.5.4
|
84 |
+
* @param array $fields {
|
85 |
+
* @type string $api_host A valid Host.
|
86 |
+
* @type string $api_key A valid API key.
|
87 |
+
* }
|
88 |
+
* @return array{
|
89 |
+
* @type bool|string $error The error message or false if no error.
|
90 |
+
* @type array $data An array of data used to make the connection.
|
91 |
+
* }
|
92 |
+
*/
|
93 |
+
public function connect( $fields = array() )
|
94 |
+
{
|
95 |
+
$response = array(
|
96 |
+
'error' => false,
|
97 |
+
'data' => array()
|
98 |
+
);
|
99 |
+
|
100 |
+
// Make sure we have the Host.
|
101 |
+
if ( ! isset( $fields['api_host'] ) || empty( $fields['api_host'] ) ) {
|
102 |
+
$response['error'] = __( 'Error: You must provide a Host.', 'fl-builder' );
|
103 |
+
}
|
104 |
+
// Make sure we have an API key.
|
105 |
+
else if ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
106 |
+
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
107 |
+
}
|
108 |
+
// Try to connect and store the connection data.
|
109 |
+
else {
|
110 |
+
|
111 |
+
$result = $this->get_api_response( $fields['api_host'], $fields['api_key'], '/lists.json' );
|
112 |
+
|
113 |
+
if (!isset($result['error'])) {
|
114 |
+
$response['data'] = array( 'api_host' => $fields['api_host'], 'api_key' => $fields['api_key'] );
|
115 |
+
}
|
116 |
+
else {
|
117 |
+
$response['error'] = sprintf(__( 'Error: Could not connect to Campayn. %s', 'fl-builder' ), $result['error']);
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
return $response;
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Renders the markup for the connection settings.
|
126 |
+
*
|
127 |
+
* @since 1.5.4
|
128 |
+
* @return string The connection settings markup.
|
129 |
+
*/
|
130 |
+
public function render_connect_settings()
|
131 |
+
{
|
132 |
+
ob_start();
|
133 |
+
|
134 |
+
FLBuilder::render_settings_field( 'api_host', array(
|
135 |
+
'row_class' => 'fl-builder-service-connect-row',
|
136 |
+
'class' => 'fl-builder-service-connect-input',
|
137 |
+
'type' => 'text',
|
138 |
+
'label' => __( 'Host', 'fl-builder' ),
|
139 |
+
'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' ),
|
140 |
+
'preview' => array(
|
141 |
+
'type' => 'none'
|
142 |
+
)
|
143 |
+
));
|
144 |
+
|
145 |
+
FLBuilder::render_settings_field( 'api_key', array(
|
146 |
+
'row_class' => 'fl-builder-service-connect-row',
|
147 |
+
'class' => 'fl-builder-service-connect-input',
|
148 |
+
'type' => 'text',
|
149 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
150 |
+
'help' => __( 'Your API key can be found in your Campayn account under Settings > API Key.', 'fl-builder' ),
|
151 |
+
'preview' => array(
|
152 |
+
'type' => 'none'
|
153 |
+
)
|
154 |
+
));
|
155 |
+
|
156 |
+
return ob_get_clean();
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Render the markup for service specific fields.
|
161 |
+
*
|
162 |
+
* @since 1.5.4
|
163 |
+
* @param string $account The name of the saved account.
|
164 |
+
* @param object $settings Saved module settings.
|
165 |
+
* @return array {
|
166 |
+
* @type bool|string $error The error message or false if no error.
|
167 |
+
* @type string $html The field markup.
|
168 |
+
* }
|
169 |
+
*/
|
170 |
+
public function render_fields( $account, $settings )
|
171 |
+
{
|
172 |
+
$account_data = $this->get_account_data( $account );
|
173 |
+
$results = $this->get_api_response( $account_data['api_host'], $account_data['api_key'], '/lists.json' );
|
174 |
+
|
175 |
+
$response = array(
|
176 |
+
'error' => false,
|
177 |
+
'html' => ''
|
178 |
+
);
|
179 |
+
|
180 |
+
if ( isset($results['error']) ) {
|
181 |
+
$response['error'] = sprintf(__( 'Error: Please check your API key. %s', 'fl-builder' ), $results['error']);
|
182 |
+
}
|
183 |
+
else {
|
184 |
+
$response['html'] = $this->render_list_field( $results, $settings );
|
185 |
+
}
|
186 |
+
|
187 |
+
return $response;
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Render markup for the list field.
|
192 |
+
*
|
193 |
+
* @since 1.5.4
|
194 |
+
* @param array $lists List data from the API.
|
195 |
+
* @param object $settings Saved module settings.
|
196 |
+
* @return string The markup for the list field.
|
197 |
+
* @access private
|
198 |
+
*/
|
199 |
+
private function render_list_field( $lists, $settings )
|
200 |
+
{
|
201 |
+
ob_start();
|
202 |
+
|
203 |
+
$options = array( '' => __( 'Choose...', 'fl-builder' ) );
|
204 |
+
|
205 |
+
foreach ( $lists as $list ) {
|
206 |
+
$options[ $list['id'] ] = $list['list_name'];
|
207 |
+
}
|
208 |
+
|
209 |
+
FLBuilder::render_settings_field( 'list_id', array(
|
210 |
+
'row_class' => 'fl-builder-service-field-row',
|
211 |
+
'class' => 'fl-builder-service-list-select',
|
212 |
+
'type' => 'select',
|
213 |
+
'label' => _x( 'List', 'An email list from third party provider.', 'fl-builder' ),
|
214 |
+
'options' => $options,
|
215 |
+
'preview' => array(
|
216 |
+
'type' => 'none'
|
217 |
+
)
|
218 |
+
), $settings);
|
219 |
+
|
220 |
+
return ob_get_clean();
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Subscribe an email address to Campayn.
|
225 |
+
*
|
226 |
+
* @since 1.5.4
|
227 |
+
* @param object $settings A module settings object.
|
228 |
+
* @param string $email The email to subscribe.
|
229 |
+
* @param string $name Optional. The full name of the person subscribing.
|
230 |
+
* @return array {
|
231 |
+
* @type bool|string $error The error message or false if no error.
|
232 |
+
* }
|
233 |
+
*/
|
234 |
+
public function subscribe( $settings, $email, $name = '' )
|
235 |
+
{
|
236 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
237 |
+
$response = array( 'error' => false );
|
238 |
+
$contact_id = null;
|
239 |
+
|
240 |
+
if ( ! $account_data ) {
|
241 |
+
$response['error'] = __( 'There was an error subscribing to Campayn. The account is no longer connected.', 'fl-builder' );
|
242 |
+
}
|
243 |
+
else {
|
244 |
+
|
245 |
+
// Build data array
|
246 |
+
$data = array('email' => $email);
|
247 |
+
|
248 |
+
// Add the name to the data array if we have one.
|
249 |
+
if ( $name ) {
|
250 |
+
|
251 |
+
$names = explode( ' ', $name );
|
252 |
+
|
253 |
+
if ( isset( $names[0] ) ) {
|
254 |
+
$data['first_name'] = $names[0];
|
255 |
+
}
|
256 |
+
if ( isset( $names[1] ) ) {
|
257 |
+
$data['last_name'] = $names[1];
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
// Check if email already exists
|
262 |
+
$result = $this->get_api_response( $account_data['api_host'], $account_data['api_key'],
|
263 |
+
"/lists/{$settings->list_id}/contacts.json?filter[contact]=". $email
|
264 |
+
);
|
265 |
+
|
266 |
+
// Already exists
|
267 |
+
if ( ! isset($result['error']) && (is_array($result) && isset($result[0]['id'])) ) {
|
268 |
+
$contact_id = $result[0]['id'];
|
269 |
+
}
|
270 |
+
|
271 |
+
// Add the contact if it doesn't exist.
|
272 |
+
if ( ! $contact_id ) {
|
273 |
+
$endpoint = "/lists/{$settings->list_id}/contacts.json";
|
274 |
+
$method = 'POST';
|
275 |
+
}
|
276 |
+
else {
|
277 |
+
$endpoint = "/contacts/{$contact_id}.json";
|
278 |
+
$method = 'PUT';
|
279 |
+
$data['id'] = $contact_id;
|
280 |
+
}
|
281 |
+
|
282 |
+
$result = $this->get_api_response( $account_data['api_host'], $account_data['api_key'], $endpoint, array(
|
283 |
+
'data' => $data,
|
284 |
+
'method' => $method
|
285 |
+
) );
|
286 |
+
|
287 |
+
if ( isset($result['error']) ) {
|
288 |
+
$response['error'] = sprintf(__( 'There was an error subscribing to Campayn. %s', 'fl-builder' ), $result['error']);
|
289 |
+
}
|
290 |
+
}
|
291 |
+
|
292 |
+
return $response;
|
293 |
+
}
|
294 |
+
}
|
classes/class-fl-builder-service-convertkit.php
ADDED
@@ -0,0 +1,204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper class for the ConvertKit API.
|
5 |
+
*
|
6 |
+
* @since 1.5.4
|
7 |
+
*/
|
8 |
+
final class FLBuilderServiceConvertKit extends FLBuilderService {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* The ID for this service.
|
12 |
+
*
|
13 |
+
* @since 1.5.4
|
14 |
+
* @var string $id
|
15 |
+
*/
|
16 |
+
public $id = 'convertkit';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @since 1.5.4
|
20 |
+
* @var object $api_instance
|
21 |
+
* @access private
|
22 |
+
*/
|
23 |
+
private $api_instance = null;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Get an instance of the API.
|
27 |
+
*
|
28 |
+
* @since 1.5.4
|
29 |
+
* @param string $api_key A valid API key.
|
30 |
+
* @return object The API instance.
|
31 |
+
*/
|
32 |
+
public function get_api( $api_key )
|
33 |
+
{
|
34 |
+
if ( $this->api_instance ) {
|
35 |
+
return $this->api_instance;
|
36 |
+
}
|
37 |
+
if ( ! class_exists( 'ConvertKit' ) ) {
|
38 |
+
require_once FL_BUILDER_DIR . 'includes/vendor/convertkit/ConvertKit.php';
|
39 |
+
}
|
40 |
+
|
41 |
+
$this->api_instance = new ConvertKit( $api_key );
|
42 |
+
|
43 |
+
return $this->api_instance;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Test the API connection.
|
48 |
+
*
|
49 |
+
* @since 1.5.4
|
50 |
+
* @param array $fields {
|
51 |
+
* @type string $api_key A valid API key.
|
52 |
+
* }
|
53 |
+
* @return array{
|
54 |
+
* @type bool|string $error The error message or false if no error.
|
55 |
+
* @type array $data An array of data used to make the connection.
|
56 |
+
* }
|
57 |
+
*/
|
58 |
+
public function connect( $fields = array() )
|
59 |
+
{
|
60 |
+
$response = array(
|
61 |
+
'error' => false,
|
62 |
+
'data' => array()
|
63 |
+
);
|
64 |
+
|
65 |
+
// Make sure we have an API key.
|
66 |
+
if ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
67 |
+
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
68 |
+
}
|
69 |
+
// Try to connect and store the connection data.
|
70 |
+
else {
|
71 |
+
|
72 |
+
$api = $this->get_api( $fields['api_key'] );
|
73 |
+
|
74 |
+
if ($api->is_authenticated()) {
|
75 |
+
$response['data'] = array( 'api_key' => $fields['api_key'] );
|
76 |
+
}
|
77 |
+
else {
|
78 |
+
$response['error'] = sprintf(__( 'Error: Please check your API key. %s', 'fl-builder' ), $api::$response['error_message']);
|
79 |
+
}
|
80 |
+
}
|
81 |
+
|
82 |
+
return $response;
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Renders the markup for the connection settings.
|
87 |
+
*
|
88 |
+
* @since 1.5.4
|
89 |
+
* @return string The connection settings markup.
|
90 |
+
*/
|
91 |
+
public function render_connect_settings()
|
92 |
+
{
|
93 |
+
ob_start();
|
94 |
+
|
95 |
+
FLBuilder::render_settings_field( 'api_key', array(
|
96 |
+
'row_class' => 'fl-builder-service-connect-row',
|
97 |
+
'class' => 'fl-builder-service-connect-input',
|
98 |
+
'type' => 'text',
|
99 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
100 |
+
'help' => __( 'Your API key can be found in your ConvertKit account under Account > Account Settings > API Key.', 'fl-builder' ),
|
101 |
+
'preview' => array(
|
102 |
+
'type' => 'none'
|
103 |
+
)
|
104 |
+
));
|
105 |
+
|
106 |
+
return ob_get_clean();
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Render the markup for service specific fields.
|
111 |
+
*
|
112 |
+
* @since 1.5.4
|
113 |
+
* @param string $account The name of the saved account.
|
114 |
+
* @param object $settings Saved module settings.
|
115 |
+
* @return array {
|
116 |
+
* @type bool|string $error The error message or false if no error.
|
117 |
+
* @type string $html The field markup.
|
118 |
+
* }
|
119 |
+
*/
|
120 |
+
public function render_fields( $account, $settings )
|
121 |
+
{
|
122 |
+
$account_data = $this->get_account_data( $account );
|
123 |
+
$api = $this->get_api( $account_data['api_key'] );
|
124 |
+
$forms = $api->get_resources('forms');
|
125 |
+
$response = array(
|
126 |
+
'error' => false,
|
127 |
+
'html' => ''
|
128 |
+
);
|
129 |
+
|
130 |
+
if ( ! $forms ) {
|
131 |
+
$response['error'] = __( 'Error: Please check your API key.', 'fl-builder' );
|
132 |
+
}
|
133 |
+
else {
|
134 |
+
$response['html'] = $this->render_list_field( $forms, $settings );
|
135 |
+
}
|
136 |
+
|
137 |
+
return $response;
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Render markup for the list field.
|
142 |
+
*
|
143 |
+
* @since 1.5.4
|
144 |
+
* @param array $lists List data from the API.
|
145 |
+
* @param object $settings Saved module settings.
|
146 |
+
* @return string The markup for the list field.
|
147 |
+
* @access private
|
148 |
+
*/
|
149 |
+
private function render_list_field( $forms, $settings )
|
150 |
+
{
|
151 |
+
ob_start();
|
152 |
+
|
153 |
+
$options = array( '' => __( 'Choose...', 'fl-builder' ) );
|
154 |
+
|
155 |
+
foreach ( $forms as $form ) {
|
156 |
+
$options[ $form['id'] ] = $form['name'];
|
157 |
+
}
|
158 |
+
|
159 |
+
FLBuilder::render_settings_field( 'list_id', array(
|
160 |
+
'row_class' => 'fl-builder-service-field-row',
|
161 |
+
'class' => 'fl-builder-service-list-select',
|
162 |
+
'type' => 'select',
|
163 |
+
'label' => _x( 'List', 'An email list from a third party provider.', 'fl-builder' ),
|
164 |
+
'options' => $options,
|
165 |
+
'preview' => array(
|
166 |
+
'type' => 'none'
|
167 |
+
)
|
168 |
+
), $settings);
|
169 |
+
|
170 |
+
return ob_get_clean();
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Subscribe an email address to ConvertKit.
|
175 |
+
*
|
176 |
+
* @since 1.5.4
|
177 |
+
* @param object $settings A module settings object.
|
178 |
+
* @param string $email The email to subscribe.
|
179 |
+
* @param string $name Optional. The full name of the person subscribing.
|
180 |
+
* @return array {
|
181 |
+
* @type bool|string $error The error message or false if no error.
|
182 |
+
* }
|
183 |
+
*/
|
184 |
+
public function subscribe( $settings, $email, $name = '' )
|
185 |
+
{
|
186 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
187 |
+
$response = array( 'error' => false );
|
188 |
+
|
189 |
+
if ( ! $account_data ) {
|
190 |
+
$response['error'] = __( 'There was an error subscribing to ConvertKit. The account is no longer connected.', 'fl-builder' );
|
191 |
+
}
|
192 |
+
else {
|
193 |
+
|
194 |
+
$api = $this->get_api( $account_data['api_key'] );
|
195 |
+
|
196 |
+
$result = $api->form_subscribe( $settings->list_id, array('email' => $email, 'fname' => $name) );
|
197 |
+
if ($result->status != "created") {
|
198 |
+
$response['error'] = __( 'There was an error subscribing to ConvertKit.', 'fl-builder' );
|
199 |
+
}
|
200 |
+
}
|
201 |
+
|
202 |
+
return $response;
|
203 |
+
}
|
204 |
+
}
|
classes/class-fl-builder-service-drip.php
ADDED
@@ -0,0 +1,262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper class for the Drip API.
|
5 |
+
*
|
6 |
+
* @since 1.5.4
|
7 |
+
*/
|
8 |
+
final class FLBuilderServiceDrip extends FLBuilderService {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* The ID for this service.
|
12 |
+
*
|
13 |
+
* @since 1.5.4
|
14 |
+
* @var string $id
|
15 |
+
*/
|
16 |
+
public $id = 'drip';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @since 1.5.4
|
20 |
+
* @var object $api_instance
|
21 |
+
* @access private
|
22 |
+
*/
|
23 |
+
private $api_instance = null;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Get an instance of the API.
|
27 |
+
*
|
28 |
+
* @since 1.5.4
|
29 |
+
* @param string $api_key A valid API token.
|
30 |
+
* @return object The API instance.
|
31 |
+
*/
|
32 |
+
public function get_api( $api_key )
|
33 |
+
{
|
34 |
+
if ( $this->api_instance ) {
|
35 |
+
return $this->api_instance;
|
36 |
+
}
|
37 |
+
if ( ! class_exists( 'Drip_Api' ) ) {
|
38 |
+
require_once FL_BUILDER_DIR . 'includes/vendor/drip/Drip_API.class.php';
|
39 |
+
}
|
40 |
+
|
41 |
+
$this->api_instance = new Drip_Api( $api_key );
|
42 |
+
|
43 |
+
return $this->api_instance;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Test the API connection.
|
48 |
+
*
|
49 |
+
* @since 1.5.4
|
50 |
+
* @param array $fields {
|
51 |
+
* @type string $api_key A valid API key.
|
52 |
+
* }
|
53 |
+
* @return array{
|
54 |
+
* @type bool|string $error The error message or false if no error.
|
55 |
+
* @type array $data An array of data used to make the connection.
|
56 |
+
* }
|
57 |
+
*/
|
58 |
+
public function connect( $fields = array() )
|
59 |
+
{
|
60 |
+
$response = array(
|
61 |
+
'error' => false,
|
62 |
+
'data' => array()
|
63 |
+
);
|
64 |
+
|
65 |
+
// Make sure we have an API token.
|
66 |
+
if ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
67 |
+
$response['error'] = __( 'Error: You must provide an API token.', 'fl-builder' );
|
68 |
+
}
|
69 |
+
// Make sure we have an Account ID.
|
70 |
+
elseif ( ! isset( $fields['api_account_id'] ) || empty( $fields['api_account_id'] ) ) {
|
71 |
+
$response['error'] = __( 'Error: You must provide an Account ID.', 'fl-builder' );
|
72 |
+
}
|
73 |
+
// Try to connect and store the connection data.
|
74 |
+
else {
|
75 |
+
try {
|
76 |
+
|
77 |
+
$api = $this->get_api( $fields['api_key'] );
|
78 |
+
try {
|
79 |
+
|
80 |
+
$account = $api->fetch_account( $fields['api_account_id'] );
|
81 |
+
$error_message = $api->get_error_message();
|
82 |
+
|
83 |
+
if ( ! empty( $error_message ) ) {
|
84 |
+
$response['error'] = $error_message;
|
85 |
+
}
|
86 |
+
else {
|
87 |
+
$response['data'] = array( 'api_key' => $fields['api_key'], 'api_account_id' => $fields['api_account_id'] );
|
88 |
+
}
|
89 |
+
}
|
90 |
+
catch (Exception $e) {
|
91 |
+
$response['error'] = sprintf(
|
92 |
+
__( 'Error: Please check your Account ID. %s', 'fl-builder' ),
|
93 |
+
$e->getMessage()
|
94 |
+
);
|
95 |
+
}
|
96 |
+
}
|
97 |
+
catch (Exception $e) {
|
98 |
+
$response['error'] = sprintf(
|
99 |
+
__( 'Error: Please check your API token. %s', 'fl-builder' ),
|
100 |
+
$e->getMessage()
|
101 |
+
);
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
return $response;
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Renders the markup for the connection settings.
|
110 |
+
*
|
111 |
+
* @since 1.5.4
|
112 |
+
* @return string The connection settings markup.
|
113 |
+
*/
|
114 |
+
public function render_connect_settings()
|
115 |
+
{
|
116 |
+
ob_start();
|
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 Token', 'fl-builder' ),
|
123 |
+
'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"' ),
|
124 |
+
'preview' => array(
|
125 |
+
'type' => 'none'
|
126 |
+
)
|
127 |
+
));
|
128 |
+
|
129 |
+
FLBuilder::render_settings_field( 'api_account_id', array(
|
130 |
+
'row_class' => 'fl-builder-service-connect-row',
|
131 |
+
'class' => 'fl-builder-service-connect-input',
|
132 |
+
'type' => 'text',
|
133 |
+
'label' => __( 'Account ID', 'fl-builder' ),
|
134 |
+
'help' => __( 'Your Account ID can be found in your Drip account under Settings > Site Setup.', 'fl-builder' ),
|
135 |
+
'preview' => array(
|
136 |
+
'type' => 'none'
|
137 |
+
)
|
138 |
+
));
|
139 |
+
|
140 |
+
return ob_get_clean();
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Render the markup for service specific fields.
|
145 |
+
*
|
146 |
+
* @since 1.5.4
|
147 |
+
* @param string $account The name of the saved account.
|
148 |
+
* @param object $settings Saved module settings.
|
149 |
+
* @return array {
|
150 |
+
* @type bool|string $error The error message or false if no error.
|
151 |
+
* @type string $html The field markup.
|
152 |
+
* }
|
153 |
+
*/
|
154 |
+
public function render_fields( $account, $settings )
|
155 |
+
{
|
156 |
+
$response = array(
|
157 |
+
'error' => false,
|
158 |
+
'html' => $this->render_tag_field( $settings )
|
159 |
+
);
|
160 |
+
|
161 |
+
return $response;
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Render markup for the tag field.
|
166 |
+
*
|
167 |
+
* @since 1.5.4
|
168 |
+
* @param object $settings Saved module settings.
|
169 |
+
* @return string The markup for the tag field.
|
170 |
+
* @access private
|
171 |
+
*/
|
172 |
+
private function render_tag_field( $settings )
|
173 |
+
{
|
174 |
+
ob_start();
|
175 |
+
|
176 |
+
FLBuilder::render_settings_field( 'list_id', array(
|
177 |
+
'row_class' => 'fl-builder-service-field-row',
|
178 |
+
'class' => 'fl-builder-service-list-select',
|
179 |
+
'type' => 'text',
|
180 |
+
'label' => _x( 'Tags', 'A tag to add to contacts in Drip when they subscribe.', 'fl-builder' ),
|
181 |
+
'help' => __('For multiple tags, separate with comma.', 'fl-builder'),
|
182 |
+
'preview' => array(
|
183 |
+
'type' => 'none'
|
184 |
+
)
|
185 |
+
), $settings);
|
186 |
+
|
187 |
+
return ob_get_clean();
|
188 |
+
}
|
189 |
+
|
190 |
+
/**
|
191 |
+
* Subscribe an email address to Drip.
|
192 |
+
*
|
193 |
+
* @since 1.5.4
|
194 |
+
* @param object $settings A module settings object.
|
195 |
+
* @param string $email The email to subscribe.
|
196 |
+
* @param string $name Optional. The full name of the person subscribing.
|
197 |
+
* @return array {
|
198 |
+
* @type bool|string $error The error message or false if no error.
|
199 |
+
* }
|
200 |
+
*/
|
201 |
+
public function subscribe( $settings, $email, $name = '' )
|
202 |
+
{
|
203 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
204 |
+
$response = array( 'error' => false );
|
205 |
+
$subscriber_id = null;
|
206 |
+
|
207 |
+
if ( ! $account_data ) {
|
208 |
+
$response['error'] = __( 'There was an error subscribing to Drip. The account is no longer connected.', 'fl-builder' );
|
209 |
+
}
|
210 |
+
else {
|
211 |
+
|
212 |
+
$api = $this->get_api( $account_data['api_key'] );
|
213 |
+
$args = array(
|
214 |
+
'account_id' => $account_data['api_account_id'],
|
215 |
+
'email' => $email
|
216 |
+
);
|
217 |
+
|
218 |
+
// Check if the contact already exists
|
219 |
+
try {
|
220 |
+
$result = $api->fetch_subscriber( $args );
|
221 |
+
|
222 |
+
if ( $result && isset($result['id']) ) {
|
223 |
+
$subscriber_id = $result['id'];
|
224 |
+
}
|
225 |
+
|
226 |
+
}
|
227 |
+
catch ( Exception $e ) {
|
228 |
+
$response['error'] = sprintf(
|
229 |
+
__( 'There was an error searching contact from Drip. %s', 'fl-builder' ),
|
230 |
+
$e->getMessage()
|
231 |
+
);
|
232 |
+
return $response;
|
233 |
+
}
|
234 |
+
|
235 |
+
if ( $subscriber_id ) {
|
236 |
+
$args['user_id'] = $subscriber_id;
|
237 |
+
}
|
238 |
+
|
239 |
+
if ( $settings->list_id ) {
|
240 |
+
$args['tags'] = explode(',', $settings->list_id);
|
241 |
+
}
|
242 |
+
|
243 |
+
if ( $name ) {
|
244 |
+
$args['custom_fields'] = array( 'name' => $name );
|
245 |
+
}
|
246 |
+
|
247 |
+
// Create or update contact
|
248 |
+
try {
|
249 |
+
|
250 |
+
$result = $api->create_or_update_subscriber( $args );
|
251 |
+
}
|
252 |
+
catch ( Exception $e ) {
|
253 |
+
$response['error'] = sprintf(
|
254 |
+
__( 'There was an error subscribing to Drip. %s', 'fl-builder' ),
|
255 |
+
$e->getMessage()
|
256 |
+
);
|
257 |
+
}
|
258 |
+
}
|
259 |
+
|
260 |
+
return $response;
|
261 |
+
}
|
262 |
+
}
|
classes/class-fl-builder-service-mailrelay.php
ADDED
@@ -0,0 +1,244 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper class for the Mailrelay API.
|
5 |
+
*
|
6 |
+
* @since 1.5.4
|
7 |
+
*/
|
8 |
+
final class FLBuilderServiceMailrelay extends FLBuilderService {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* The ID for this service.
|
12 |
+
*
|
13 |
+
* @since 1.5.4
|
14 |
+
* @var string $id
|
15 |
+
*/
|
16 |
+
public $id = 'mailrelay';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* The API url suffix for this service.
|
20 |
+
*
|
21 |
+
* @since 1.5.8
|
22 |
+
* @access private
|
23 |
+
* @var string $api_url
|
24 |
+
*/
|
25 |
+
private $api_url = '/ccm/admin/api/version/2/&type=json';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Request data from the thir party API.
|
29 |
+
*
|
30 |
+
* @since 1.5.4
|
31 |
+
* @param string $base_url Base URL where API is available
|
32 |
+
* @param string $method Method to request available from this service.
|
33 |
+
* @param array $params Data to be passed to API
|
34 |
+
* @return array|object The API response.
|
35 |
+
*/
|
36 |
+
private function get_api_response( $base_url, $params )
|
37 |
+
{
|
38 |
+
// Exclude http:// for the specific service
|
39 |
+
$base_url = preg_replace('#^https?://#', '', $base_url);
|
40 |
+
$response = wp_remote_post( 'https://'. $base_url . $this->api_url, array( 'timeout' => 60, 'body' => $params ) );
|
41 |
+
|
42 |
+
if (is_wp_error($response) || (isset($response->status) && $response->status == 0)) {
|
43 |
+
if (isset($response->status)) {
|
44 |
+
$data = json_decode($response, true);
|
45 |
+
}
|
46 |
+
else {
|
47 |
+
$data['error'] = $response->get_error_message();
|
48 |
+
}
|
49 |
+
|
50 |
+
} else {
|
51 |
+
$data = json_decode(wp_remote_retrieve_body( $response ), true);
|
52 |
+
}
|
53 |
+
return $data;
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Test the API connection.
|
58 |
+
*
|
59 |
+
* @since 1.5.4
|
60 |
+
* @param array $fields {
|
61 |
+
* @type string $api_host A valid Host.
|
62 |
+
* @type string $api_key A valid API key.
|
63 |
+
* }
|
64 |
+
* @return array{
|
65 |
+
* @type bool|string $error The error message or false if no error.
|
66 |
+
* @type array $data An array of data used to make the connection.
|
67 |
+
* }
|
68 |
+
*/
|
69 |
+
public function connect( $fields = array() )
|
70 |
+
{
|
71 |
+
$response = array(
|
72 |
+
'error' => false,
|
73 |
+
'data' => array()
|
74 |
+
);
|
75 |
+
|
76 |
+
// Make sure we have the Host.
|
77 |
+
if ( ! isset( $fields['api_host'] ) || empty( $fields['api_host'] ) ) {
|
78 |
+
$response['error'] = __( 'Error: You must provide a Host.', 'fl-builder' );
|
79 |
+
}
|
80 |
+
// Make sure we have an API key.
|
81 |
+
else if ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
82 |
+
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
83 |
+
}
|
84 |
+
// Try to connect and store the connection data.
|
85 |
+
else {
|
86 |
+
|
87 |
+
$result = $this->get_api_response( $fields['api_host'], array(
|
88 |
+
'function' => 'getGroups',
|
89 |
+
'apiKey' => $fields['api_key'],
|
90 |
+
'offset' => 0,
|
91 |
+
'count' => 1
|
92 |
+
) );
|
93 |
+
|
94 |
+
if (!isset($result['error'])) {
|
95 |
+
$response['data'] = array( 'api_host' => $fields['api_host'], 'api_key' => $fields['api_key'] );
|
96 |
+
}
|
97 |
+
else {
|
98 |
+
$response['error'] = sprintf(__( 'Error: Could not connect to Mailrelay. %s', 'fl-builder' ), $result['error']);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
return $response;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Renders the markup for the connection settings.
|
107 |
+
*
|
108 |
+
* @since 1.5.4
|
109 |
+
* @return string The connection settings markup.
|
110 |
+
*/
|
111 |
+
public function render_connect_settings()
|
112 |
+
{
|
113 |
+
ob_start();
|
114 |
+
|
115 |
+
FLBuilder::render_settings_field( 'api_host', array(
|
116 |
+
'row_class' => 'fl-builder-service-connect-row',
|
117 |
+
'class' => 'fl-builder-service-connect-input',
|
118 |
+
'type' => 'text',
|
119 |
+
'label' => __( 'Host', 'fl-builder' ),
|
120 |
+
'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' ),
|
121 |
+
'preview' => array(
|
122 |
+
'type' => 'none'
|
123 |
+
)
|
124 |
+
));
|
125 |
+
|
126 |
+
FLBuilder::render_settings_field( 'api_key', array(
|
127 |
+
'row_class' => 'fl-builder-service-connect-row',
|
128 |
+
'class' => 'fl-builder-service-connect-input',
|
129 |
+
'type' => 'text',
|
130 |
+
'label' => __( 'API Key', 'fl-builder' ),
|
131 |
+
'help' => __( 'Your API key can be found in your Mailrelay account under Menu > Settings > API access.', 'fl-builder' ),
|
132 |
+
'preview' => array(
|
133 |
+
'type' => 'none'
|
134 |
+
)
|
135 |
+
));
|
136 |
+
|
137 |
+
return ob_get_clean();
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Render the markup for service specific fields.
|
142 |
+
*
|
143 |
+
* @since 1.5.4
|
144 |
+
* @param string $account The name of the saved account.
|
145 |
+
* @param object $settings Saved module settings.
|
146 |
+
* @return array {
|
147 |
+
* @type bool|string $error The error message or false if no error.
|
148 |
+
* @type string $html The field markup.
|
149 |
+
* }
|
150 |
+
*/
|
151 |
+
public function render_fields( $account, $settings )
|
152 |
+
{
|
153 |
+
$account_data = $this->get_account_data( $account );
|
154 |
+
$result = $this->get_api_response( $account_data['api_host'], array(
|
155 |
+
'function' => 'getGroups',
|
156 |
+
'apiKey' => $account_data['api_key']
|
157 |
+
) );
|
158 |
+
|
159 |
+
$response = array(
|
160 |
+
'error' => false,
|
161 |
+
'html' => ''
|
162 |
+
);
|
163 |
+
|
164 |
+
if ( isset($result['error']) ) {
|
165 |
+
$response['error'] = sprintf(__( 'Error: Please check your API key. %s', 'fl-builder' ), $result['error']);
|
166 |
+
}
|
167 |
+
else {
|
168 |
+
$response['html'] = $this->render_list_field( $result['data'], $settings );
|
169 |
+
}
|
170 |
+
|
171 |
+
return $response;
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* Render markup for the list field.
|
176 |
+
*
|
177 |
+
* @since 1.5.4
|
178 |
+
* @param array $lists List data from the API.
|
179 |
+
* @param object $settings Saved module settings.
|
180 |
+
* @return string The markup for the list field.
|
181 |
+
* @access private
|
182 |
+
*/
|
183 |
+
private function render_list_field( $groups, $settings )
|
184 |
+
{
|
185 |
+
ob_start();
|
186 |
+
|
187 |
+
$options = array( '' => __( 'Choose...', 'fl-builder' ) );
|
188 |
+
|
189 |
+
foreach ( $groups as $group ) {
|
190 |
+
$options[ $group['id'] ] = $group['name'];
|
191 |
+
}
|
192 |
+
|
193 |
+
FLBuilder::render_settings_field( 'list_id', array(
|
194 |
+
'row_class' => 'fl-builder-service-field-row',
|
195 |
+
'class' => 'fl-builder-service-list-select',
|
196 |
+
'type' => 'select',
|
197 |
+
'multi-select' => true,
|
198 |
+
'label' => _x( 'Group', 'A list of subscribers group from a Mailrelay account.', 'fl-builder' ),
|
199 |
+
'options' => $options,
|
200 |
+
'preview' => array(
|
201 |
+
'type' => 'none'
|
202 |
+
)
|
203 |
+
), $settings);
|
204 |
+
|
205 |
+
return ob_get_clean();
|
206 |
+
}
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Subscribe an email address to Mailrelay.
|
210 |
+
*
|
211 |
+
* @since 1.5.4
|
212 |
+
* @param object $settings A module settings object.
|
213 |
+
* @param string $email The email to subscribe.
|
214 |
+
* @param string $name Optional. The full name of the person subscribing.
|
215 |
+
* @return array {
|
216 |
+
* @type bool|string $error The error message or false if no error.
|
217 |
+
* }
|
218 |
+
*/
|
219 |
+
public function subscribe( $settings, $email, $name = '' )
|
220 |
+
{
|
221 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
222 |
+
$response = array( 'error' => false );
|
223 |
+
|
224 |
+
if ( ! $account_data ) {
|
225 |
+
$response['error'] = __( 'There was an error subscribing to Mailrelay. The account is no longer connected.', 'fl-builder' );
|
226 |
+
}
|
227 |
+
else {
|
228 |
+
|
229 |
+
$result = $this->get_api_response( $account_data['api_host'], array(
|
230 |
+
'function' => 'addSubscriber',
|
231 |
+
'apiKey' => $account_data['api_key'],
|
232 |
+
'email' => $email,
|
233 |
+
'name' => $name,
|
234 |
+
'groups' => $settings->list_id,
|
235 |
+
) );
|
236 |
+
|
237 |
+
if (isset($result['error'])) {
|
238 |
+
$response['error'] = sprintf(__( 'There was an error subscribing to Mailrelay. %s', 'fl-builder' ), $result['error']);
|
239 |
+
}
|
240 |
+
}
|
241 |
+
|
242 |
+
return $response;
|
243 |
+
}
|
244 |
+
}
|
classes/class-fl-builder-service-sendy.php
ADDED
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper class for the Sendy API.
|
5 |
+
*
|
6 |
+
* @since 1.5.4
|
7 |
+
*/
|
8 |
+
final class FLBuilderServiceSendy extends FLBuilderService {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* The ID for this service.
|
12 |
+
*
|
13 |
+
* @since 1.5.4
|
14 |
+
* @var string $id
|
15 |
+
*/
|
16 |
+
public $id = 'sendy';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @since 1.5.4
|
20 |
+
* @var object $api_instance
|
21 |
+
* @access private
|
22 |
+
*/
|
23 |
+
private $api_instance = null;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Get an instance of the API.
|
27 |
+
*
|
28 |
+
* @since 1.5.4
|
29 |
+
* @param array $args A valid API authentication data.
|
30 |
+
* @return object The API instance.
|
31 |
+
*/
|
32 |
+
public function get_api( array $args )
|
33 |
+
{
|
34 |
+
if ( $this->api_instance ) {
|
35 |
+
return $this->api_instance;
|
36 |
+
}
|
37 |
+
if ( ! class_exists( '\\SendyPHP\\SendyPHP' ) ) {
|
38 |
+
require_once FL_BUILDER_DIR . 'includes/vendor/sendy/SendyPHP.php';
|
39 |
+
}
|
40 |
+
|
41 |
+
$this->api_instance = new \SendyPHP\SendyPHP( $args );
|
42 |
+
|
43 |
+
return $this->api_instance;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Test the API connection.
|
48 |
+
*
|
49 |
+
* @since 1.5.4
|
50 |
+
* @param array $fields {
|
51 |
+
* @type string $api_host A valid Host.
|
52 |
+
* @type string $api_key A valid API key.
|
53 |
+
* }
|
54 |
+
* @return array{
|
55 |
+
* @type bool|string $error The error message or false if no error.
|
56 |
+
* @type array $data An array of data used to make the connection.
|
57 |
+
* }
|
58 |
+
*/
|
59 |
+
public function connect( $fields = array() )
|
60 |
+
{
|
61 |
+
$response = array(
|
62 |
+
'error' => false,
|
63 |
+
'data' => array()
|
64 |
+
);
|
65 |
+
|
66 |
+
// Make sure we have the Host.
|
67 |
+
if ( ! isset( $fields['api_host'] ) || empty( $fields['api_host'] ) ) {
|
68 |
+
$response['error'] = __( 'Error: You must provide your Sendy installation URL.', 'fl-builder' );
|
69 |
+
}
|
70 |
+
// Make sure we have an API key.
|
71 |
+
if ( ! isset( $fields['api_key'] ) || empty( $fields['api_key'] ) ) {
|
72 |
+
$response['error'] = __( 'Error: You must provide an API key.', 'fl-builder' );
|
73 |
+
}
|
74 |
+
// Make sure we have the list ID.
|
75 |
+
if ( ! isset( $fields['list_id'] ) || empty( $fields['list_id'] ) ) {
|
76 |
+
$response['error'] = __( 'Error: You must provide a list ID.', 'fl-builder' );
|
77 |
+
}
|
78 |
+
// Try to connect and store the connection data.
|
79 |
+
else {
|
80 |
+
|
81 |
+
$api = $this->get_api( array(
|
82 |
+
'installation_url' => $fields['api_host'],
|
83 |
+
'api_key' => $fields['api_key'],
|
84 |
+
'list_id' => $fields['list_id']
|
85 |
+
) );
|
86 |
+
|
87 |
+
// Send request for list ID validation
|
88 |
+
$get_api_response = $api->subcount();
|
89 |
+
|
90 |
+
if ( true === $get_api_response['status'] ) {
|
91 |
+
$response['data'] = array('api_host' => $fields['api_host'], 'api_key' => $fields['api_key'], 'list_id' => $fields['list_id']);
|
92 |
+
}
|
93 |
+
else {
|
94 |
+
$response['error'] = sprintf(__( 'Error: Could not connect to Sendy. %s', 'fl-builder' ), $get_api_response['message']);
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
return $response;
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Renders the markup for the connection settings.
|
103 |
+
*
|
104 |
+
* @since 1.5.4
|
105 |
+
* @return string The connection settings markup.
|
106 |
+
*/
|
107 |
+
public function render_connect_settings()
|
108 |
+
{
|
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' => __( 'Installation URL', 'fl-builder' ),
|
116 |
+
'help' => __( 'The URL where your Sendy application is installed (e.g. http://mywebsite.com/sendy).', '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' => __( 'Found in your Sendy application under Settings.', 'fl-builder' ),
|
128 |
+
'preview' => array(
|
129 |
+
'type' => 'none'
|
130 |
+
)
|
131 |
+
));
|
132 |
+
|
133 |
+
FLBuilder::render_settings_field( 'list_id', array(
|
134 |
+
'row_class' => 'fl-builder-service-connect-row',
|
135 |
+
'class' => 'fl-builder-service-connect-input',
|
136 |
+
'type' => 'text',
|
137 |
+
'label' => __( 'List ID', 'fl-builder' ),
|
138 |
+
'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' ),
|
139 |
+
'preview' => array(
|
140 |
+
'type' => 'none'
|
141 |
+
)
|
142 |
+
));
|
143 |
+
|
144 |
+
return ob_get_clean();
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Render the markup for service specific fields.
|
149 |
+
*
|
150 |
+
* @since 1.5.4
|
151 |
+
* @param string $account The name of the saved account.
|
152 |
+
* @param object $settings Saved module settings.
|
153 |
+
* @return array {
|
154 |
+
* @type bool|string $error The error message or false if no error.
|
155 |
+
* @type string $html The field markup.
|
156 |
+
* }
|
157 |
+
*/
|
158 |
+
public function render_fields( $account, $settings )
|
159 |
+
{
|
160 |
+
|
161 |
+
$response = array(
|
162 |
+
'error' => false,
|
163 |
+
'html' => ''
|
164 |
+
);
|
165 |
+
|
166 |
+
return $response;
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* Subscribe an email address to Sendy.
|
171 |
+
*
|
172 |
+
* @since 1.5.4
|
173 |
+
* @param object $settings A module settings object.
|
174 |
+
* @param string $email The email to subscribe.
|
175 |
+
* @param string $name Optional. The full name of the person subscribing.
|
176 |
+
* @return array {
|
177 |
+
* @type bool|string $error The error message or false if no error.
|
178 |
+
* }
|
179 |
+
*/
|
180 |
+
public function subscribe( $settings, $email, $name = '' )
|
181 |
+
{
|
182 |
+
$account_data = $this->get_account_data( $settings->service_account );
|
183 |
+
$response = array( 'error' => false );
|
184 |
+
|
185 |
+
if ( ! $account_data ) {
|
186 |
+
$response['error'] = __( 'There was an error subscribing to Sendy. The account is no longer connected.', 'fl-builder' );
|
187 |
+
}
|
188 |
+
else {
|
189 |
+
|
190 |
+
$api = $this->get_api( array(
|
191 |
+
'installation_url' => $account_data['api_host'],
|
192 |
+
'api_key' => $account_data['api_key'],
|
193 |
+
'list_id' => $account_data['list_id']
|
194 |
+
) );
|
195 |
+
|
196 |
+
// Send request for list ID validation
|
197 |
+
$get_api_response = $api->subscribe(array('name' => $name, 'email' => $email));
|
198 |
+
|
199 |
+
if ( false === $get_api_response['status'] ) {
|
200 |
+
$response['error'] = sprintf(__( 'There was an error subscribing to Sendy. %s', 'fl-builder' ), $get_api_response['message']);
|
201 |
+
}
|
202 |
+
}
|
203 |
+
|
204 |
+
return $response;
|
205 |
+
}
|
206 |
+
}
|
classes/class-fl-builder-services.php
CHANGED
@@ -30,11 +30,26 @@ final class FLBuilderServices {
|
|
30 |
'name' => 'Campaign Monitor',
|
31 |
'class' => 'FLBuilderServiceCampaignMonitor'
|
32 |
),
|
|
|
|
|
|
|
|
|
|
|
33 |
'constant-contact' => array(
|
34 |
'type' => 'autoresponder',
|
35 |
'name' => 'Constant Contact',
|
36 |
'class' => 'FLBuilderServiceConstantContact'
|
37 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
'email-address' => array(
|
39 |
'type' => 'autoresponder',
|
40 |
'name' => 'Email Address',
|
@@ -75,10 +90,20 @@ final class FLBuilderServices {
|
|
75 |
'name' => 'MailPoet',
|
76 |
'class' => 'FLBuilderServiceMailPoet'
|
77 |
),
|
|
|
|
|
|
|
|
|
|
|
78 |
'sendinblue' => array(
|
79 |
'type' => 'autoresponder',
|
80 |
'name' => 'SendinBlue',
|
81 |
'class' => 'FLBuilderServiceSendinBlue'
|
|
|
|
|
|
|
|
|
|
|
82 |
)
|
83 |
);
|
84 |
|
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',
|
90 |
'name' => 'MailPoet',
|
91 |
'class' => 'FLBuilderServiceMailPoet'
|
92 |
),
|
93 |
+
'mailrelay' => array(
|
94 |
+
'type' => 'autoresponder',
|
95 |
+
'name' => 'Mailrelay',
|
96 |
+
'class' => 'FLBuilderServiceMailrelay'
|
97 |
+
),
|
98 |
'sendinblue' => array(
|
99 |
'type' => 'autoresponder',
|
100 |
'name' => 'SendinBlue',
|
101 |
'class' => 'FLBuilderServiceSendinBlue'
|
102 |
+
),
|
103 |
+
'sendy' => array(
|
104 |
+
'type' => 'autoresponder',
|
105 |
+
'name' => 'Sendy',
|
106 |
+
'class' => 'FLBuilderServiceSendy'
|
107 |
)
|
108 |
);
|
109 |
|
classes/class-fl-builder.php
CHANGED
@@ -30,17 +30,17 @@ final class FLBuilder {
|
|
30 |
$locale = apply_filters( 'plugin_locale', get_locale(), 'fl-builder' );
|
31 |
|
32 |
//Setup paths to current locale file
|
|
|
33 |
$mofile_local = trailingslashit( FL_BUILDER_DIR ) . 'languages/' . $locale . '.mo';
|
34 |
-
$mofile_global = trailingslashit( WP_LANG_DIR ) . 'plugins/beaver-builder/' . $locale . '.mo';
|
35 |
|
36 |
-
if ( file_exists( $
|
37 |
-
//Look in
|
38 |
-
return load_textdomain( 'fl-builder', $mofile_local );
|
39 |
-
}
|
40 |
-
else if ( file_exists( $mofile_global ) ) {
|
41 |
-
//Look in global /wp-content/languages/plugins/beaver-builder/ folder
|
42 |
return load_textdomain( 'fl-builder', $mofile_global );
|
43 |
}
|
|
|
|
|
|
|
|
|
44 |
|
45 |
//Nothing found
|
46 |
return false;
|
@@ -761,7 +761,7 @@ final class FLBuilder {
|
|
761 |
// Do the wp_enqueue_scripts action here to register any scripts or
|
762 |
// styles that might need to be registered for shortcodes or widgets.
|
763 |
ob_start();
|
764 |
-
do_action( 'wp_enqueue_scripts' );
|
765 |
ob_end_clean();
|
766 |
|
767 |
// Dequeue scripts and styles so we can capture only those
|
@@ -1196,16 +1196,16 @@ final class FLBuilder {
|
|
1196 |
// Register the template category tax.
|
1197 |
register_taxonomy( 'fl-builder-template-category', array( 'fl-builder-template' ), array(
|
1198 |
'labels' => array(
|
1199 |
-
'name' => _x( 'Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1200 |
-
'singular_name' => _x( 'Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1201 |
-
'search_items' => _x( 'Search Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1202 |
-
'all_items' => _x( 'All Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1203 |
-
'parent_item' => _x( 'Parent Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1204 |
-
'parent_item_colon' => _x( 'Parent Category:', 'Custom taxonomy label.', 'fl-builder' ),
|
1205 |
-
'edit_item' => _x( 'Edit Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1206 |
-
'update_item' => _x( 'Update Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1207 |
-
'add_new_item' => _x( 'Add New Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1208 |
-
'new_item_name' => _x( 'New Category Name', 'Custom taxonomy label.', 'fl-builder' ),
|
1209 |
'menu_name' => _x( 'Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1210 |
),
|
1211 |
'hierarchical' => true,
|
30 |
$locale = apply_filters( 'plugin_locale', get_locale(), 'fl-builder' );
|
31 |
|
32 |
//Setup paths to current locale file
|
33 |
+
$mofile_global = trailingslashit( WP_LANG_DIR ) . 'plugins/bb-plugin/' . $locale . '.mo';
|
34 |
$mofile_local = trailingslashit( FL_BUILDER_DIR ) . 'languages/' . $locale . '.mo';
|
|
|
35 |
|
36 |
+
if ( file_exists( $mofile_global ) ) {
|
37 |
+
//Look in global /wp-content/languages/plugins/bb-plugin/ folder
|
|
|
|
|
|
|
|
|
38 |
return load_textdomain( 'fl-builder', $mofile_global );
|
39 |
}
|
40 |
+
else if ( file_exists( $mofile_local ) ) {
|
41 |
+
//Look in local /wp-content/plugins/bb-plugin/languages/ folder
|
42 |
+
return load_textdomain( 'fl-builder', $mofile_local );
|
43 |
+
}
|
44 |
|
45 |
//Nothing found
|
46 |
return false;
|
761 |
// Do the wp_enqueue_scripts action here to register any scripts or
|
762 |
// styles that might need to be registered for shortcodes or widgets.
|
763 |
ob_start();
|
764 |
+
try { do_action( 'wp_enqueue_scripts' ); } catch( Exception $e ) {}
|
765 |
ob_end_clean();
|
766 |
|
767 |
// Dequeue scripts and styles so we can capture only those
|
1196 |
// Register the template category tax.
|
1197 |
register_taxonomy( 'fl-builder-template-category', array( 'fl-builder-template' ), array(
|
1198 |
'labels' => array(
|
1199 |
+
'name' => _x( 'Template Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1200 |
+
'singular_name' => _x( 'Template Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1201 |
+
'search_items' => _x( 'Search Template Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1202 |
+
'all_items' => _x( 'All Template Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1203 |
+
'parent_item' => _x( 'Parent Template Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1204 |
+
'parent_item_colon' => _x( 'Parent Template Category:', 'Custom taxonomy label.', 'fl-builder' ),
|
1205 |
+
'edit_item' => _x( 'Edit Template Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1206 |
+
'update_item' => _x( 'Update Template Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1207 |
+
'add_new_item' => _x( 'Add New Template Category', 'Custom taxonomy label.', 'fl-builder' ),
|
1208 |
+
'new_item_name' => _x( 'New Template Category Name', 'Custom taxonomy label.', 'fl-builder' ),
|
1209 |
'menu_name' => _x( 'Categories', 'Custom taxonomy label.', 'fl-builder' ),
|
1210 |
),
|
1211 |
'hierarchical' => true,
|
css/font-awesome.min.css
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
/*!
|
2 |
-
* Font Awesome 4.
|
3 |
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
4 |
-
*/@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}
|
1 |
/*!
|
2 |
+
* Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome
|
3 |
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
4 |
+
*/@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.5.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}
|
fl-builder.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Beaver Builder Plugin (Lite Version)
|
4 |
* Plugin URI: https://www.wpbeaverbuilder.com/?utm_source=external&utm_medium=builder&utm_campaign=plugins-page
|
5 |
* Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
|
6 |
-
* Version: 1.6.4.
|
7 |
* Author: The Beaver Builder Team
|
8 |
* Author URI: https://www.wpbeaverbuilder.com/?utm_source=external&utm_medium=builder&utm_campaign=plugins-page
|
9 |
* Copyright: (c) 2014 Beaver Builder
|
@@ -11,7 +11,7 @@
|
|
11 |
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
12 |
* Text Domain: fl-builder
|
13 |
*/
|
14 |
-
define('FL_BUILDER_VERSION', '1.6.4.
|
15 |
define('FL_BUILDER_FILE', __FILE__);
|
16 |
define('FL_BUILDER_DIR', plugin_dir_path(FL_BUILDER_FILE));
|
17 |
define('FL_BUILDER_URL', plugins_url('/', FL_BUILDER_FILE));
|
@@ -72,6 +72,7 @@ add_filter('post_row_actions', 'FLBuilderAdminPo
|
|
72 |
add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'FLBuilderAdmin::render_plugin_action_links');
|
73 |
add_filter('all_plugins', 'FLBuilderAdmin::white_label_plugins_page');
|
74 |
add_filter('wp_prepare_themes_for_js', 'FLBuilderAdmin::white_label_themes_page');
|
|
|
75 |
|
76 |
/* AJAX Actions */
|
77 |
add_action('fl_ajax_fl_builder_save', 'FLBuilderModel::update');
|
3 |
* Plugin Name: Beaver Builder Plugin (Lite Version)
|
4 |
* Plugin URI: https://www.wpbeaverbuilder.com/?utm_source=external&utm_medium=builder&utm_campaign=plugins-page
|
5 |
* Description: A drag and drop frontend WordPress page builder plugin that works with almost any theme!
|
6 |
+
* Version: 1.6.4.4
|
7 |
* Author: The Beaver Builder Team
|
8 |
* Author URI: https://www.wpbeaverbuilder.com/?utm_source=external&utm_medium=builder&utm_campaign=plugins-page
|
9 |
* Copyright: (c) 2014 Beaver Builder
|
11 |
* License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
12 |
* Text Domain: fl-builder
|
13 |
*/
|
14 |
+
define('FL_BUILDER_VERSION', '1.6.4.4');
|
15 |
define('FL_BUILDER_FILE', __FILE__);
|
16 |
define('FL_BUILDER_DIR', plugin_dir_path(FL_BUILDER_FILE));
|
17 |
define('FL_BUILDER_URL', plugins_url('/', FL_BUILDER_FILE));
|
72 |
add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'FLBuilderAdmin::render_plugin_action_links');
|
73 |
add_filter('all_plugins', 'FLBuilderAdmin::white_label_plugins_page');
|
74 |
add_filter('wp_prepare_themes_for_js', 'FLBuilderAdmin::white_label_themes_page');
|
75 |
+
add_filter('gettext', 'FLBuilderAdmin::white_label_theme_gettext');
|
76 |
|
77 |
/* AJAX Actions */
|
78 |
add_action('fl_ajax_fl_builder_save', 'FLBuilderModel::update');
|
fonts/FontAwesome.otf
CHANGED
Binary file
|
fonts/fontawesome-webfont.eot
CHANGED
Binary file
|
fonts/fontawesome-webfont.svg
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
-
<svg xmlns="http://www.w3.org/2000/svg"
|
4 |
<metadata></metadata>
|
5 |
<defs>
|
6 |
<font id="fontawesomeregular" horiz-adv-x="1536" >
|
@@ -219,8 +219,8 @@
|
|
219 |
<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
|
220 |
<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
221 |
<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
|
222 |
-
<glyph unicode="" d="
|
223 |
-
<glyph unicode="" horiz-adv-x="
|
224 |
<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
|
225 |
<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
|
226 |
<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
@@ -362,7 +362,7 @@
|
|
362 |
<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
363 |
<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
|
364 |
<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
|
365 |
-
<glyph unicode=""
|
366 |
<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
|
367 |
<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
|
368 |
<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
@@ -410,7 +410,7 @@
|
|
410 |
<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
|
411 |
<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
|
412 |
<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
|
413 |
-
<glyph unicode=""
|
414 |
<glyph unicode="" horiz-adv-x="1792" d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
415 |
<glyph unicode="" d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
416 |
<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
|
@@ -454,7 +454,7 @@
|
|
454 |
<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
|
455 |
<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
|
456 |
<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
|
457 |
-
<glyph unicode="" horiz-adv-x="1792" d="
|
458 |
<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
|
459 |
<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
460 |
<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
@@ -555,7 +555,7 @@
|
|
555 |
<glyph unicode="" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
|
556 |
<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
|
557 |
<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
|
558 |
-
<glyph unicode="" horiz-adv-x="1792" d="
|
559 |
<glyph unicode="" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
|
560 |
<glyph unicode="" horiz-adv-x="2296" d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 4 5 8q16 18 60 23h13q5 18 19 30t33 8 t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-106 2 -211 0v1q-1 -27 2.5 -86 t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34l3 9v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4l-10 -2.5t-12 -2 l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-2 0 -3 -0.5t-3 -0.5h-3q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130t-73 70 q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -2 -1 -5t-1 -4q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
|
561 |
<glyph unicode="" horiz-adv-x="2304" d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
|
@@ -600,11 +600,11 @@
|
|
600 |
<glyph unicode="" horiz-adv-x="1792" d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 t191 -286t71 -348z" />
|
601 |
<glyph unicode="" horiz-adv-x="1792" d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
|
602 |
<glyph unicode="" horiz-adv-x="1792" d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
|
603 |
-
<glyph unicode="" d="
|
604 |
-
<glyph unicode="" horiz-adv-x="1792" d="
|
605 |
<glyph unicode="" horiz-adv-x="2048" d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
606 |
<glyph unicode="" horiz-adv-x="1792" d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 q-68 175 -180 287z" />
|
607 |
-
<glyph unicode=""
|
608 |
<glyph unicode="" horiz-adv-x="1792" d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
|
609 |
<glyph unicode="" horiz-adv-x="1792" d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
|
610 |
<glyph unicode="" horiz-adv-x="1792" d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
@@ -621,20 +621,35 @@
|
|
621 |
<glyph unicode="" horiz-adv-x="1792" d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
|
622 |
<glyph unicode="" d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
|
623 |
<glyph unicode="" d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
|
624 |
-
<glyph unicode="" horiz-adv-x="1792" />
|
625 |
-
<glyph unicode="" horiz-adv-x="1792" />
|
626 |
-
<glyph unicode="" horiz-adv-x="
|
627 |
-
<glyph unicode="" horiz-adv-x="1792" />
|
628 |
-
<glyph unicode="" horiz-adv-x="1792" />
|
629 |
-
<glyph unicode="" horiz-adv-x="1792" />
|
630 |
-
<glyph unicode="" horiz-adv-x="
|
631 |
-
<glyph unicode="" horiz-adv-x="1792" />
|
632 |
-
<glyph unicode="" horiz-adv-x="
|
633 |
-
<glyph unicode=""
|
634 |
-
<glyph unicode=""
|
635 |
-
<glyph unicode=""
|
636 |
-
<glyph unicode=""
|
637 |
-
<glyph unicode=""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
638 |
<glyph unicode="" horiz-adv-x="1792" />
|
639 |
</font>
|
640 |
</defs></svg>
|
1 |
<?xml version="1.0" standalone="no"?>
|
2 |
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
+
<svg xmlns="http://www.w3.org/2000/svg">
|
4 |
<metadata></metadata>
|
5 |
<defs>
|
6 |
<font id="fontawesomeregular" horiz-adv-x="1536" >
|
219 |
<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
|
220 |
<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
221 |
<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
|
222 |
+
<glyph unicode="" d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585 h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
223 |
+
<glyph unicode="" horiz-adv-x="2304" d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62 q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
|
224 |
<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
|
225 |
<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
|
226 |
<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
|
362 |
<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
363 |
<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
|
364 |
<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
|
365 |
+
<glyph unicode="" d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
|
366 |
<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
|
367 |
<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
|
368 |
<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
410 |
<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
|
411 |
<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
|
412 |
<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
|
413 |
+
<glyph unicode="" d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5 t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
|
414 |
<glyph unicode="" horiz-adv-x="1792" d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
415 |
<glyph unicode="" d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
416 |
<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
|
454 |
<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
|
455 |
<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
|
456 |
<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
|
457 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5 t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
|
458 |
<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
|
459 |
<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
460 |
<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
|
555 |
<glyph unicode="" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
|
556 |
<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
|
557 |
<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
|
558 |
+
<glyph unicode="" horiz-adv-x="1792" d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116 q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
|
559 |
<glyph unicode="" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
|
560 |
<glyph unicode="" horiz-adv-x="2296" d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 4 5 8q16 18 60 23h13q5 18 19 30t33 8 t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-106 2 -211 0v1q-1 -27 2.5 -86 t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34l3 9v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4l-10 -2.5t-12 -2 l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-2 0 -3 -0.5t-3 -0.5h-3q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130t-73 70 q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -2 -1 -5t-1 -4q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
|
561 |
<glyph unicode="" horiz-adv-x="2304" d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
|
600 |
<glyph unicode="" horiz-adv-x="1792" d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 t191 -286t71 -348z" />
|
601 |
<glyph unicode="" horiz-adv-x="1792" d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
|
602 |
<glyph unicode="" horiz-adv-x="1792" d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
|
603 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339 q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z " />
|
604 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606 q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
|
605 |
<glyph unicode="" horiz-adv-x="2048" d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
|
606 |
<glyph unicode="" horiz-adv-x="1792" d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 q-68 175 -180 287z" />
|
607 |
+
<glyph unicode="" d="M1401 -11l-6 -6q-113 -114 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6 q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13 q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 32 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249 q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 32.5 -6t30.5 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183 q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46 t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
|
608 |
<glyph unicode="" horiz-adv-x="1792" d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
|
609 |
<glyph unicode="" horiz-adv-x="1792" d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
|
610 |
<glyph unicode="" horiz-adv-x="1792" d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h128q52 0 90 -38t38 -90z" />
|
621 |
<glyph unicode="" horiz-adv-x="1792" d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
|
622 |
<glyph unicode="" d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
|
623 |
<glyph unicode="" d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
|
624 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5 l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44 t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106 q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
|
625 |
+
<glyph unicode="" horiz-adv-x="1792" d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53 q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
|
626 |
+
<glyph unicode="" horiz-adv-x="2304" d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
|
627 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1549 857q55 0 85.5 -28.5t30.5 -83.5t-34 -82t-91 -27h-136v-177h-25v398h170zM1710 267l-4 -11l-5 -10q-113 -230 -330.5 -366t-474.5 -136q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q244 0 454.5 -124t329.5 -338l2 -4l8 -16 q-30 -15 -136.5 -68.5t-163.5 -84.5q-6 -3 -479 -268q384 -183 799 -366zM896 -234q250 0 462.5 132.5t322.5 357.5l-287 129q-72 -140 -206 -222t-292 -82q-151 0 -280 75t-204 204t-75 280t75 280t204 204t280 75t280 -73.5t204 -204.5l280 143q-116 208 -321 329 t-443 121q-119 0 -232.5 -31.5t-209 -87.5t-176.5 -137t-137 -176.5t-87.5 -209t-31.5 -232.5t31.5 -232.5t87.5 -209t137 -176.5t176.5 -137t209 -87.5t232.5 -31.5z" />
|
628 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
|
629 |
+
<glyph unicode="" horiz-adv-x="1792" d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96 q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h16v393q-32 19 -32 55q0 26 19 45t45 19t45 -19t19 -45q0 -36 -32 -55v-9h272q16 0 16 -16v-224q0 -16 -16 -16h-272v-128h16q16 0 16 -16v-112h128 v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96q16 0 16 -16z" />
|
630 |
+
<glyph unicode="" horiz-adv-x="2304" d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96 q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5 t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
|
631 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348 t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
|
632 |
+
<glyph unicode="" horiz-adv-x="2304" d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22 q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5 q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13 q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
|
633 |
+
<glyph unicode="" d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83 t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20 q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5 t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
|
634 |
+
<glyph unicode="" d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103 t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
|
635 |
+
<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
|
636 |
+
<glyph unicode="" d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
|
637 |
+
<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
|
638 |
+
<glyph unicode="" horiz-adv-x="1792" d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
|
639 |
+
<glyph unicode="" horiz-adv-x="2048" d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5 t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416 q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441 h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
|
640 |
+
<glyph unicode="" horiz-adv-x="1792" d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12 q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311 q15 0 25 -12q9 -12 6 -28z" />
|
641 |
+
<glyph unicode="" d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5 t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
|
642 |
+
<glyph unicode="" horiz-adv-x="1024" d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
|
643 |
+
<glyph unicode="" d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5 t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
|
644 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
645 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
646 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
647 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
648 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
649 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
650 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
651 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
652 |
+
<glyph unicode="" horiz-adv-x="1792" />
|
653 |
<glyph unicode="" horiz-adv-x="1792" />
|
654 |
</font>
|
655 |
</defs></svg>
|
fonts/fontawesome-webfont.ttf
CHANGED
Binary file
|
fonts/fontawesome-webfont.woff
CHANGED
Binary file
|
fonts/fontawesome-webfont.woff2
CHANGED
Binary file
|
includes/admin-settings-post-types.php
CHANGED
@@ -41,8 +41,9 @@
|
|
41 |
<?php
|
42 |
|
43 |
$saved_post_types = FLBuilderModel::get_post_types();
|
44 |
-
$post_types
|
45 |
-
|
|
|
46 |
foreach($post_types as $post_type) :
|
47 |
|
48 |
$checked = in_array($post_type->name, $saved_post_types) ? 'checked' : '';
|
41 |
<?php
|
42 |
|
43 |
$saved_post_types = FLBuilderModel::get_post_types();
|
44 |
+
$post_types = get_post_types( array( 'public' => true ), 'objects' );
|
45 |
+
$post_types = apply_filters( 'fl_builder_admin_settings_post_types', $post_types );
|
46 |
+
|
47 |
foreach($post_types as $post_type) :
|
48 |
|
49 |
$checked = in_array($post_type->name, $saved_post_types) ? 'checked' : '';
|
includes/updater-config.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
if(class_exists('FLUpdater')) {
|
4 |
FLUpdater::add_product(array(
|
5 |
'name' => 'Beaver Builder Plugin (Lite Version)',
|
6 |
-
'version' => '1.6.4.
|
7 |
'slug' => 'bb-plugin',
|
8 |
'type' => 'plugin'
|
9 |
));
|
3 |
if(class_exists('FLUpdater')) {
|
4 |
FLUpdater::add_product(array(
|
5 |
'name' => 'Beaver Builder Plugin (Lite Version)',
|
6 |
+
'version' => '1.6.4.4',
|
7 |
'slug' => 'bb-plugin',
|
8 |
'type' => 'plugin'
|
9 |
));
|
includes/vendor/convertkit/ConvertKit.php
ADDED
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Establishes API connection to ConvertKit App
|
4 |
+
*/
|
5 |
+
class ConvertKit {
|
6 |
+
protected $api_key;
|
7 |
+
protected $api_version = 3;
|
8 |
+
protected $api_url_base = 'https://api.convertkit.com/';
|
9 |
+
protected $resources = array();
|
10 |
+
protected $markup = array();
|
11 |
+
static $response = array();
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Constructor for ConvertKit instance
|
15 |
+
*
|
16 |
+
* @param String $api_key ConvertKit API Key
|
17 |
+
*/
|
18 |
+
public function __construct($api_key) {
|
19 |
+
$this->api_key = $api_key;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Check if the API connection is authenticated
|
24 |
+
*
|
25 |
+
* @param string $resource
|
26 |
+
* @return boolean
|
27 |
+
*/
|
28 |
+
public function is_authenticated() {
|
29 |
+
$api_response = $this->_get_api_response('forms');
|
30 |
+
|
31 |
+
self::$response = $api_response;
|
32 |
+
if (is_wp_error($api_response) || isset($api_response['error']) || isset($api_response['error_message'])) {
|
33 |
+
return false;
|
34 |
+
}
|
35 |
+
return true;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Gets a resource index
|
40 |
+
*
|
41 |
+
* GET /{$resource}/
|
42 |
+
*
|
43 |
+
* @param string $resource Resource type
|
44 |
+
* @return object API response
|
45 |
+
*/
|
46 |
+
public function get_resources($resource) {
|
47 |
+
|
48 |
+
if(!array_key_exists($resource, $this->resources)) {
|
49 |
+
$api_response = $this->_get_api_response($resource);
|
50 |
+
|
51 |
+
self::$response = $api_response;
|
52 |
+
if (is_wp_error($api_response) || isset($api_response['error']) || isset($api_response['error_message'])) {
|
53 |
+
$this->resources[$resource] = array();
|
54 |
+
} else {
|
55 |
+
$this->resources[$resource] = $api_response;
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
return $this->resources[$resource];
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Adds a subscriber to a form
|
64 |
+
*
|
65 |
+
* @param string $form_id Form ID
|
66 |
+
* @param array $options Array of user data
|
67 |
+
*/
|
68 |
+
public function form_subscribe($form_id, $options) {
|
69 |
+
$request = sprintf('forms/%s/subscribe', $form_id);
|
70 |
+
$args = array(
|
71 |
+
'email' => $options['email'],
|
72 |
+
'fname' => $options['fname']
|
73 |
+
);
|
74 |
+
return $this->make_request($request, 'POST', $args);
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Unsubscribes a subscriber from a form
|
79 |
+
*
|
80 |
+
* @param string $form_id Resource ID
|
81 |
+
* @param array $options Array of user data
|
82 |
+
*/
|
83 |
+
public function form_unsubscribe($form_id, $options) {
|
84 |
+
$request = sprintf('forms/%s/unsubscribe', $form_id);
|
85 |
+
$args = array(
|
86 |
+
'email' => $options['email']
|
87 |
+
);
|
88 |
+
return $this->make_request($request, 'POST', $args);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Get API response
|
93 |
+
* @param string $path
|
94 |
+
* @return array|object
|
95 |
+
*/
|
96 |
+
private function _get_api_response($path = '') {
|
97 |
+
$args = array('k' => $this->api_key, 'v' => $this->api_version);
|
98 |
+
$url = add_query_arg($args, path_join($this->api_url_base, $path));
|
99 |
+
$response = wp_remote_get($url);
|
100 |
+
|
101 |
+
if(is_wp_error($response)) {
|
102 |
+
$data = $response;
|
103 |
+
} else {
|
104 |
+
$data = json_decode(wp_remote_retrieve_body($response), true);
|
105 |
+
}
|
106 |
+
return $data;
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Make a request to the ConvertKit API
|
111 |
+
*
|
112 |
+
* @param string $request Request string
|
113 |
+
* @param string $method HTTP Method
|
114 |
+
* @param array $args Request arguments
|
115 |
+
* @return object Response object
|
116 |
+
*/
|
117 |
+
public function make_request($request, $method = 'GET', $args = array()) {
|
118 |
+
$url = $this->build_request_url($request, $args);
|
119 |
+
$ch = curl_init();
|
120 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
121 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
122 |
+
curl_setopt($ch, CURLOPT_HEADER, false);
|
123 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
|
124 |
+
$results = curl_exec($ch);
|
125 |
+
curl_close($ch);
|
126 |
+
|
127 |
+
return json_decode($results);
|
128 |
+
}
|
129 |
+
|
130 |
+
/**
|
131 |
+
* Merge default request arguments with those of this request
|
132 |
+
*
|
133 |
+
* @param array $args Request arguments
|
134 |
+
* @return array Request arguments
|
135 |
+
*/
|
136 |
+
public function filter_request_arguments($args = array()) {
|
137 |
+
return array_merge($args, array('k' => $this->api_key, 'v' => $this->api_version));
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Build the full request URL
|
142 |
+
*
|
143 |
+
* @param string $request Request path
|
144 |
+
* @param array $args Request arguments
|
145 |
+
* @return string Request URL
|
146 |
+
*/
|
147 |
+
public function build_request_url($request, array $args) {
|
148 |
+
return $this->api_url_base . $request . '?' . http_build_query($this->filter_request_arguments($args));
|
149 |
+
}
|
150 |
+
}
|
includes/vendor/drip/Drip_API.class.php
ADDED
@@ -0,0 +1,628 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Drip API
|
5 |
+
* @author Svetoslav Marinov (SLAVI)
|
6 |
+
*/
|
7 |
+
Class Drip_Api {
|
8 |
+
private $version = "2";
|
9 |
+
private $api_token = '';
|
10 |
+
private $error_code = '';
|
11 |
+
private $error_message = '';
|
12 |
+
private $user_agent = "Drip API PHP Wrapper (getdrip.com)";
|
13 |
+
private $api_end_point = 'https://api.getdrip.com/v2/';
|
14 |
+
//private $api_end_point = 'http://localhost/echo/'; // dbg only
|
15 |
+
private $recent_req_info = array(); // holds dbg info from a recent request
|
16 |
+
private $timeout = 30;
|
17 |
+
private $connect_timeout = 30;
|
18 |
+
private $debug = false; // Requests headers and other info to be fetched from the request. Command-line windows will show info in STDERR
|
19 |
+
|
20 |
+
const GET = 1;
|
21 |
+
const POST = 2;
|
22 |
+
const DELETE = 3;
|
23 |
+
const PUT = 4;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Accepts the token and saves it internally.
|
27 |
+
*
|
28 |
+
* @param string $api_token e.g. qsor48ughrjufyu2dadraasfa1212424
|
29 |
+
* @throws Exception
|
30 |
+
*/
|
31 |
+
public function __construct($api_token) {
|
32 |
+
$api_token = trim($api_token);
|
33 |
+
|
34 |
+
if (empty($api_token) || !preg_match('#^[\w-]+$#si', $api_token)) {
|
35 |
+
throw new Exception("Missing or invalid Drip API token.");
|
36 |
+
}
|
37 |
+
|
38 |
+
$this->api_token = $api_token;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Requests the campaigns for the given account.
|
43 |
+
* @param array
|
44 |
+
* @return array
|
45 |
+
*/
|
46 |
+
public function get_campaigns($params) {
|
47 |
+
if (empty($params['account_id'])) {
|
48 |
+
throw new Exception("Account ID not specified");
|
49 |
+
}
|
50 |
+
|
51 |
+
$account_id = $params['account_id'];
|
52 |
+
unset($params['account_id']); // clear it from the params
|
53 |
+
|
54 |
+
if (isset($params['status'])) {
|
55 |
+
if (!in_array($params['status'], array('active', 'draft', 'paused', 'all'))) {
|
56 |
+
throw new Exception("Invalid campaign status.");
|
57 |
+
}
|
58 |
+
} elseif (0) {
|
59 |
+
$params['status'] = 'active'; // api defaults to all but we want active ones
|
60 |
+
}
|
61 |
+
|
62 |
+
$url = $this->api_end_point . "$account_id/campaigns";
|
63 |
+
$res = $this->make_request($url, $params);
|
64 |
+
|
65 |
+
if (!empty($res['buffer'])) {
|
66 |
+
$raw_json = json_decode($res['buffer'], true);
|
67 |
+
}
|
68 |
+
|
69 |
+
// here we distinguish errors from no campaigns.
|
70 |
+
// when there's no json that's an error
|
71 |
+
$campaigns = empty($raw_json)
|
72 |
+
? false
|
73 |
+
: empty($raw_json['campaigns'])
|
74 |
+
? array()
|
75 |
+
: $raw_json['campaigns'];
|
76 |
+
|
77 |
+
return $campaigns;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Fetch a campaign for the given account based on it's ID.
|
82 |
+
* @param array (account_id, campaign_id)
|
83 |
+
* @return array
|
84 |
+
*/
|
85 |
+
public function fetch_campaign($params) {
|
86 |
+
if (empty($params['account_id'])) {
|
87 |
+
throw new Exception("Account ID not specified");
|
88 |
+
}
|
89 |
+
|
90 |
+
$account_id = $params['account_id'];
|
91 |
+
unset($params['account_id']); // clear it from the params
|
92 |
+
|
93 |
+
if (!empty($params['campaign_id'])) {
|
94 |
+
$campaign_id = $params['campaign_id'];
|
95 |
+
unset($params['campaign_id']); // clear it from the params
|
96 |
+
} else {
|
97 |
+
throw new Exception("Campaign ID was not specified. You must specify a Campaign ID");
|
98 |
+
}
|
99 |
+
|
100 |
+
$url = $this->api_end_point . "$account_id/campaigns/$campaign_id";
|
101 |
+
$res = $this->make_request($url, $params);
|
102 |
+
|
103 |
+
if (!empty($res['buffer'])) {
|
104 |
+
$raw_json = json_decode($res['buffer'], true);
|
105 |
+
}
|
106 |
+
|
107 |
+
// here we distinguish errors from no campaign
|
108 |
+
// when there's no json that's an error
|
109 |
+
$campaigns = empty($raw_json)
|
110 |
+
? false
|
111 |
+
: empty($raw_json['campaigns'])
|
112 |
+
? array()
|
113 |
+
: $raw_json['campaigns'];
|
114 |
+
|
115 |
+
return $campaigns;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Requests the accounts for the given account.
|
120 |
+
* Parses the response JSON and returns an array which contains: id, name, created_at etc
|
121 |
+
* @param void
|
122 |
+
* @return bool/array
|
123 |
+
*/
|
124 |
+
public function get_accounts() {
|
125 |
+
$url = $this->api_end_point . 'accounts';
|
126 |
+
$res = $this->make_request($url);
|
127 |
+
|
128 |
+
if (!empty($res['buffer'])) {
|
129 |
+
$raw_json = json_decode($res['buffer'], true);
|
130 |
+
}
|
131 |
+
|
132 |
+
$data = empty($raw_json)
|
133 |
+
? false
|
134 |
+
: empty($raw_json['accounts'])
|
135 |
+
? array()
|
136 |
+
: $raw_json['accounts'];
|
137 |
+
|
138 |
+
return $data;
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Get a specific account provided by the user
|
143 |
+
* Parses the response JSON and returns an array which contains: id, name, created_at etc
|
144 |
+
* @param integer $account_id
|
145 |
+
* @return bool/array
|
146 |
+
*/
|
147 |
+
public function fetch_account($account_id) {
|
148 |
+
if (empty($account_id)) {
|
149 |
+
throw new Exception("Account ID not specified");
|
150 |
+
}
|
151 |
+
$url = $this->api_end_point . "accounts/{$account_id}";
|
152 |
+
$res = $this->make_request($url);
|
153 |
+
|
154 |
+
if (!empty($res['buffer'])) {
|
155 |
+
$raw_json = json_decode($res['buffer'], true);
|
156 |
+
}
|
157 |
+
|
158 |
+
$data = empty($raw_json)
|
159 |
+
? false
|
160 |
+
: empty($raw_json['accounts'])
|
161 |
+
? array()
|
162 |
+
: $raw_json['accounts'];
|
163 |
+
|
164 |
+
return $data;
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* Sends a request to add a subscriber and returns its record or false
|
169 |
+
*
|
170 |
+
* @param array $params
|
171 |
+
* @param array/bool $account
|
172 |
+
*/
|
173 |
+
public function create_or_update_subscriber($params) {
|
174 |
+
if (empty($params['account_id'])) {
|
175 |
+
throw new Exception("Account ID not specified");
|
176 |
+
}
|
177 |
+
|
178 |
+
$account_id = $params['account_id'];
|
179 |
+
unset($params['account_id']); // clear it from the params
|
180 |
+
|
181 |
+
$api_action = "/$account_id/subscribers";
|
182 |
+
$url = $this->api_end_point . $api_action;
|
183 |
+
|
184 |
+
// The API wants the params to be JSON encoded
|
185 |
+
$req_params = array('subscribers' => array($params));
|
186 |
+
|
187 |
+
$res = $this->make_request($url, $req_params, self::POST);
|
188 |
+
|
189 |
+
if (!empty($res['buffer'])) {
|
190 |
+
$raw_json = json_decode($res['buffer'], true);
|
191 |
+
}
|
192 |
+
|
193 |
+
$data = empty($raw_json)
|
194 |
+
? false
|
195 |
+
: empty($raw_json['subscribers'])
|
196 |
+
? array()
|
197 |
+
: $raw_json['subscribers'][0];
|
198 |
+
|
199 |
+
return $data;
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
*
|
204 |
+
* @param array $params
|
205 |
+
* @param array $params
|
206 |
+
*/
|
207 |
+
public function fetch_subscriber($params) {
|
208 |
+
if (empty($params['account_id'])) {
|
209 |
+
throw new Exception("Account ID not specified");
|
210 |
+
}
|
211 |
+
|
212 |
+
$account_id = $params['account_id'];
|
213 |
+
unset($params['account_id']); // clear it from the params
|
214 |
+
|
215 |
+
if (!empty($params['subscriber_id'])) {
|
216 |
+
$subscriber_id = $params['subscriber_id'];
|
217 |
+
unset($params['subscriber_id']); // clear it from the params
|
218 |
+
} elseif (!empty($params['email'])) {
|
219 |
+
$subscriber_id = $params['email'];
|
220 |
+
unset($params['email']); // clear it from the params
|
221 |
+
} else {
|
222 |
+
throw new Exception("Subscriber ID or Email was not specified. You must specify either Subscriber ID or Email.");
|
223 |
+
}
|
224 |
+
|
225 |
+
$subscriber_id = urlencode($subscriber_id);
|
226 |
+
|
227 |
+
$api_action = "$account_id/subscribers/$subscriber_id";
|
228 |
+
$url = $this->api_end_point . $api_action;
|
229 |
+
|
230 |
+
$res = $this->make_request($url);
|
231 |
+
|
232 |
+
if (!empty($res['buffer'])) {
|
233 |
+
$raw_json = json_decode($res['buffer'], true);
|
234 |
+
}
|
235 |
+
|
236 |
+
$data = empty($raw_json)
|
237 |
+
? false
|
238 |
+
: empty($raw_json['subscribers'])
|
239 |
+
? array()
|
240 |
+
: $raw_json['subscribers'][0];
|
241 |
+
|
242 |
+
return $data;
|
243 |
+
}
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Subscribes a user to a given campaign for a given account.
|
247 |
+
*
|
248 |
+
* @param array $params
|
249 |
+
* @param array $accounts
|
250 |
+
*/
|
251 |
+
public function subscribe_subscriber($params) {
|
252 |
+
if (empty($params['account_id'])) {
|
253 |
+
throw new Exception("Account ID not specified");
|
254 |
+
}
|
255 |
+
|
256 |
+
$account_id = $params['account_id'];
|
257 |
+
unset($params['account_id']); // clear it from the params
|
258 |
+
|
259 |
+
if (empty($params['campaign_id'])) {
|
260 |
+
throw new Exception("Campaign ID not specified");
|
261 |
+
}
|
262 |
+
|
263 |
+
$campaign_id = $params['campaign_id'];
|
264 |
+
unset($params['campaign_id']); // clear it from the params
|
265 |
+
|
266 |
+
if (empty($params['email'])) {
|
267 |
+
throw new Exception("Email not specified");
|
268 |
+
}
|
269 |
+
|
270 |
+
if (!isset($params['double_optin'])) {
|
271 |
+
$params['double_optin'] = true;
|
272 |
+
}
|
273 |
+
|
274 |
+
$api_action = "$account_id/campaigns/$campaign_id/subscribers";
|
275 |
+
$url = $this->api_end_point . $api_action;
|
276 |
+
|
277 |
+
// The API wants the params to be JSON encoded
|
278 |
+
$req_params = array('subscribers' => array($params));
|
279 |
+
|
280 |
+
$res = $this->make_request($url, $req_params, self::POST);
|
281 |
+
|
282 |
+
if (!empty($res['buffer'])) {
|
283 |
+
$raw_json = json_decode($res['buffer'], true);
|
284 |
+
}
|
285 |
+
|
286 |
+
$data = empty($raw_json)
|
287 |
+
? false
|
288 |
+
: empty($raw_json['subscribers'])
|
289 |
+
? array()
|
290 |
+
: $raw_json['subscribers'][0];
|
291 |
+
|
292 |
+
return $data;
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
*
|
297 |
+
* Some keys are removed from the params so they don't get send with the other data to Drip.
|
298 |
+
*
|
299 |
+
* @param array $params
|
300 |
+
* @param array $params
|
301 |
+
*/
|
302 |
+
public function unsubscribe_subscriber($params) {
|
303 |
+
if (empty($params['account_id'])) {
|
304 |
+
throw new Exception("Account ID not specified");
|
305 |
+
}
|
306 |
+
|
307 |
+
$account_id = $params['account_id'];
|
308 |
+
unset($params['account_id']); // clear it from the params
|
309 |
+
|
310 |
+
if (!empty($params['subscriber_id'])) {
|
311 |
+
$subscriber_id = $params['subscriber_id'];
|
312 |
+
unset($params['subscriber_id']); // clear it from the params
|
313 |
+
} elseif (!empty($params['email'])) {
|
314 |
+
$subscriber_id = $params['email'];
|
315 |
+
unset($params['email']); // clear it from the params
|
316 |
+
} else {
|
317 |
+
throw new Exception("Subscriber ID or Email was not specified. You must specify either Subscriber ID or Email.");
|
318 |
+
}
|
319 |
+
|
320 |
+
$subscriber_id = urlencode($subscriber_id);
|
321 |
+
|
322 |
+
$api_action = "$account_id/subscribers/$subscriber_id/unsubscribe";
|
323 |
+
$url = $this->api_end_point . $api_action;
|
324 |
+
|
325 |
+
$req_params = $params;
|
326 |
+
$res = $this->make_request($url, $req_params, self::POST);
|
327 |
+
|
328 |
+
if (!empty($res['buffer'])) {
|
329 |
+
$raw_json = json_decode($res['buffer'], true);
|
330 |
+
}
|
331 |
+
|
332 |
+
$data = empty($raw_json)
|
333 |
+
? false
|
334 |
+
: empty($raw_json['subscribers'])
|
335 |
+
? array()
|
336 |
+
: $raw_json['subscribers'][0];
|
337 |
+
|
338 |
+
return $data;
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
*
|
343 |
+
* This calls POST /:account_id/tags to add the tag. It just returns some status code no content
|
344 |
+
*
|
345 |
+
* @param array $params
|
346 |
+
* @param bool $status
|
347 |
+
*/
|
348 |
+
public function tag_subscriber($params) {
|
349 |
+
$status = false;
|
350 |
+
|
351 |
+
if (empty($params['account_id'])) {
|
352 |
+
throw new Exception("Account ID not specified");
|
353 |
+
}
|
354 |
+
|
355 |
+
$account_id = $params['account_id'];
|
356 |
+
unset($params['account_id']); // clear it from the params
|
357 |
+
|
358 |
+
if (empty($params['email'])) {
|
359 |
+
throw new Exception("Email was not specified");
|
360 |
+
}
|
361 |
+
|
362 |
+
if (empty($params['tag'])) {
|
363 |
+
throw new Exception("Tag was not specified");
|
364 |
+
}
|
365 |
+
|
366 |
+
$api_action = "$account_id/tags";
|
367 |
+
$url = $this->api_end_point . $api_action;
|
368 |
+
|
369 |
+
// The API wants the params to be JSON encoded
|
370 |
+
$req_params = array('tags' => array($params));
|
371 |
+
|
372 |
+
$res = $this->make_request($url, $req_params, self::POST);
|
373 |
+
|
374 |
+
if ($res['http_code'] == 201) {
|
375 |
+
$status = true;
|
376 |
+
}
|
377 |
+
|
378 |
+
return $status;
|
379 |
+
}
|
380 |
+
|
381 |
+
/**
|
382 |
+
*
|
383 |
+
* This calls DELETE /:account_id/tags to remove the tags. It just returns some status code no content
|
384 |
+
*
|
385 |
+
* @param array $params
|
386 |
+
* @param bool $status success or failure
|
387 |
+
*/
|
388 |
+
public function untag_subscriber($params) {
|
389 |
+
$status = false;
|
390 |
+
|
391 |
+
if (empty($params['account_id'])) {
|
392 |
+
throw new Exception("Account ID not specified");
|
393 |
+
}
|
394 |
+
|
395 |
+
$account_id = $params['account_id'];
|
396 |
+
unset($params['account_id']); // clear it from the params
|
397 |
+
|
398 |
+
if (empty($params['email'])) {
|
399 |
+
throw new Exception("Email was not specified");
|
400 |
+
}
|
401 |
+
|
402 |
+
if (empty($params['tag'])) {
|
403 |
+
throw new Exception("Tag was not specified");
|
404 |
+
}
|
405 |
+
|
406 |
+
$api_action = "$account_id/tags";
|
407 |
+
$url = $this->api_end_point . $api_action;
|
408 |
+
|
409 |
+
// The API wants the params to be JSON encoded
|
410 |
+
$req_params = array('tags' => array($params));
|
411 |
+
|
412 |
+
$res = $this->make_request($url, $req_params, self::DELETE);
|
413 |
+
|
414 |
+
if ($res['http_code'] == 204) {
|
415 |
+
$status = true;
|
416 |
+
}
|
417 |
+
|
418 |
+
return $status;
|
419 |
+
}
|
420 |
+
|
421 |
+
/**
|
422 |
+
*
|
423 |
+
* Posts an event specified by the user.
|
424 |
+
*
|
425 |
+
* @param array $params
|
426 |
+
* @param bool
|
427 |
+
*/
|
428 |
+
public function record_event($params) {
|
429 |
+
$status = false;
|
430 |
+
|
431 |
+
if (empty($params['account_id'])) {
|
432 |
+
throw new Exception("Account ID not specified");
|
433 |
+
}
|
434 |
+
|
435 |
+
if (empty($params['action'])) {
|
436 |
+
throw new Exception("Action was not specified");
|
437 |
+
}
|
438 |
+
|
439 |
+
$account_id = $params['account_id'];
|
440 |
+
unset($params['account_id']); // clear it from the params
|
441 |
+
|
442 |
+
$api_action = "$account_id/events";
|
443 |
+
$url = $this->api_end_point . $api_action;
|
444 |
+
|
445 |
+
// The API wants the params to be JSON encoded
|
446 |
+
$req_params = array('events' => array($params));
|
447 |
+
|
448 |
+
$res = $this->make_request($url, $req_params, self::POST);
|
449 |
+
|
450 |
+
if ($res['http_code'] == 204) {
|
451 |
+
$status = true;
|
452 |
+
}
|
453 |
+
|
454 |
+
return $status;
|
455 |
+
}
|
456 |
+
|
457 |
+
/**
|
458 |
+
*
|
459 |
+
* @param string $url
|
460 |
+
* @param array $params
|
461 |
+
* @param int $req_method
|
462 |
+
* @return type
|
463 |
+
* @throws Exception
|
464 |
+
*/
|
465 |
+
public function make_request($url, $params = array(), $req_method = self::GET) {
|
466 |
+
if (!function_exists('curl_init')) {
|
467 |
+
throw new Exception("Cannot find cURL php extension or it's not loaded.");
|
468 |
+
}
|
469 |
+
|
470 |
+
$ch = curl_init();
|
471 |
+
|
472 |
+
if ($this->debug) {
|
473 |
+
//curl_setopt($ch, CURLOPT_HEADER, true);
|
474 |
+
// TRUE to output verbose information. Writes output to STDERR, or the file specified using CURLOPT_STDERR.
|
475 |
+
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
476 |
+
}
|
477 |
+
|
478 |
+
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
|
479 |
+
curl_setopt($ch, CURLOPT_FORBID_REUSE, true);
|
480 |
+
|
481 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
482 |
+
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
|
483 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
484 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
485 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
|
486 |
+
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->connect_timeout);
|
487 |
+
curl_setopt($ch, CURLOPT_USERPWD, $this->api_token . ":" . ''); // no pwd
|
488 |
+
curl_setopt($ch, CURLOPT_USERAGENT, empty($params['user_agent']) ? $this->user_agent : $params['user_agent']);
|
489 |
+
|
490 |
+
if ($req_method == self::POST) { // We want post but no params to supply. Probably we have a nice link structure which includes all the info.
|
491 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
492 |
+
} elseif ($req_method == self::DELETE) {
|
493 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
|
494 |
+
} elseif ($req_method == self::PUT) {
|
495 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
|
496 |
+
}
|
497 |
+
|
498 |
+
if (!empty($params)) {
|
499 |
+
if ((isset($params['__req']) && strtolower($params['__req']) == 'get')
|
500 |
+
|| $req_method == self::GET) {
|
501 |
+
unset($params['__req']);
|
502 |
+
$url .= '?' . http_build_query($params);
|
503 |
+
} elseif ($req_method == self::POST || $req_method == self::DELETE) {
|
504 |
+
$params_str = is_array($params) ? json_encode($params) : $params;
|
505 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $params_str);
|
506 |
+
}
|
507 |
+
}
|
508 |
+
|
509 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
510 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
511 |
+
'Accept:application/json, text/javascript, */*; q=0.01',
|
512 |
+
'Content-Type: application/vnd.api+json',
|
513 |
+
));
|
514 |
+
|
515 |
+
$buffer = curl_exec($ch);
|
516 |
+
$status = !empty($buffer);
|
517 |
+
|
518 |
+
$data = array(
|
519 |
+
'url' => $url,
|
520 |
+
'params' => $params,
|
521 |
+
'status' => $status,
|
522 |
+
'error' => empty($buffer) ? curl_error($ch) : '',
|
523 |
+
'error_no' => empty($buffer) ? curl_errno($ch) : '',
|
524 |
+
'http_code' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
|
525 |
+
'debug' => $this->debug ? curl_getinfo($ch) : '',
|
526 |
+
);
|
527 |
+
|
528 |
+
curl_close($ch);
|
529 |
+
|
530 |
+
// remove some weird headers HTTP/1.1 100 Continue or HTTP/1.1 200 OK
|
531 |
+
$buffer = preg_replace('#HTTP/[\d.]+\s+\d+\s+\w+[\r\n]+#si', '', $buffer);
|
532 |
+
$buffer = trim($buffer);
|
533 |
+
$data['buffer'] = $buffer;
|
534 |
+
|
535 |
+
$this->_parse_error($data);
|
536 |
+
$this->recent_req_info = $data;
|
537 |
+
|
538 |
+
return $data;
|
539 |
+
}
|
540 |
+
|
541 |
+
/**
|
542 |
+
* This returns the RAW data from the each request that has been sent (if any).
|
543 |
+
* @return arraay of arrays
|
544 |
+
*/
|
545 |
+
public function get_request_info() {
|
546 |
+
return $this->recent_req_info;
|
547 |
+
}
|
548 |
+
|
549 |
+
/**
|
550 |
+
* Retruns whatever was accumultaed in error_message
|
551 |
+
* @param string
|
552 |
+
*/
|
553 |
+
public function get_error_message() {
|
554 |
+
return $this->error_message;
|
555 |
+
}
|
556 |
+
|
557 |
+
/**
|
558 |
+
* Retruns whatever was accumultaed in error_code
|
559 |
+
* @return string
|
560 |
+
*/
|
561 |
+
public function get_error_code() {
|
562 |
+
return $this->error_code;
|
563 |
+
}
|
564 |
+
|
565 |
+
/**
|
566 |
+
* Some keys are removed from the params so they don't get send with the other data to Drip.
|
567 |
+
*
|
568 |
+
* @param array $params
|
569 |
+
* @param array
|
570 |
+
*/
|
571 |
+
public function _parse_error($res) {
|
572 |
+
if (empty($res['http_code']) || $res['http_code'] >= 200 && $res['http_code'] <= 299) {
|
573 |
+
return true;
|
574 |
+
}
|
575 |
+
|
576 |
+
if (empty($res['buffer'])) {
|
577 |
+
$this->error_message = "Response from the server.";
|
578 |
+
$this->error_code = $res['http_code'];
|
579 |
+
} elseif (!empty($res['buffer'])) {
|
580 |
+
$json_arr = json_decode($res['buffer'], true);
|
581 |
+
|
582 |
+
// The JSON error response looks like this.
|
583 |
+
/*
|
584 |
+
{
|
585 |
+
"errors": [{
|
586 |
+
"code": "authorization_error",
|
587 |
+
"message": "You are not authorized to access this resource"
|
588 |
+
}]
|
589 |
+
}
|
590 |
+
*/
|
591 |
+
if (!empty($json_arr['errors'])) { // JSON
|
592 |
+
$messages = $error_codes = array();
|
593 |
+
|
594 |
+
foreach ($json_arr['errors'] as $rec) {
|
595 |
+
$messages[] = $rec['message'];
|
596 |
+
$error_codes[] = $rec['code'];
|
597 |
+
}
|
598 |
+
|
599 |
+
$this->error_code = join(", ", $error_codes);
|
600 |
+
$this->error_message = join("\n", $messages);
|
601 |
+
} else { // There's no JSON in the reply so we'll extract the message from the HTML page by removing the HTML.
|
602 |
+
$msg = $res['buffer'];
|
603 |
+
|
604 |
+
$msg = preg_replace('#.*?<body[^>]*>#si', '', $msg);
|
605 |
+
$msg = preg_replace('#</body[^>]*>.*#si', '', $msg);
|
606 |
+
$msg = strip_tags($msg);
|
607 |
+
$msg = preg_replace('#[\r\n]#si', '', $msg);
|
608 |
+
$msg = preg_replace('#\s+#si', ' ', $msg);
|
609 |
+
$msg = trim($msg);
|
610 |
+
$msg = substr($msg, 0, 256);
|
611 |
+
|
612 |
+
$this->error_code = $res['http_code'];
|
613 |
+
$this->error_message = $msg;
|
614 |
+
}
|
615 |
+
} elseif ($res['http_code'] >= 400 || $res['http_code'] <= 499) {
|
616 |
+
$this->error_message = "Not authorized.";
|
617 |
+
$this->error_code = $res['http_code'];
|
618 |
+
} elseif ($res['http_code'] >= 500 || $res['http_code'] <= 599) {
|
619 |
+
$this->error_message = "Internal Server Error.";
|
620 |
+
$this->error_code = $res['http_code'];
|
621 |
+
}
|
622 |
+
}
|
623 |
+
|
624 |
+
// tmp
|
625 |
+
public function __call($method, $args) {
|
626 |
+
return array();
|
627 |
+
}
|
628 |
+
}
|
includes/vendor/sendy/SendyPHP.php
ADDED
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace SendyPHP;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Sendy Class
|
7 |
+
*/
|
8 |
+
class SendyPHP
|
9 |
+
{
|
10 |
+
protected $installation_url;
|
11 |
+
protected $api_key;
|
12 |
+
protected $list_id;
|
13 |
+
|
14 |
+
public function __construct(array $config)
|
15 |
+
{
|
16 |
+
//error checking
|
17 |
+
$list_id = @$config['list_id'];
|
18 |
+
$installation_url = @$config['installation_url'];
|
19 |
+
$api_key = @$config['api_key'];
|
20 |
+
|
21 |
+
if (empty($list_id)) {
|
22 |
+
throw new \Exception("Required config parameter [list_id] is not set or empty", 1);
|
23 |
+
}
|
24 |
+
|
25 |
+
if (empty($installation_url)) {
|
26 |
+
throw new \Exception("Required config parameter [installation_url] is not set or empty", 1);
|
27 |
+
}
|
28 |
+
|
29 |
+
if (empty($api_key)) {
|
30 |
+
throw new \Exception("Required config parameter [api_key] is not set or empty", 1);
|
31 |
+
}
|
32 |
+
|
33 |
+
$this->list_id = $list_id;
|
34 |
+
$this->installation_url = $installation_url;
|
35 |
+
$this->api_key = $api_key;
|
36 |
+
}
|
37 |
+
|
38 |
+
public function setListId($list_id)
|
39 |
+
{
|
40 |
+
if (empty($list_id)) {
|
41 |
+
throw new \Exception("Required config parameter [list_id] is not set", 1);
|
42 |
+
}
|
43 |
+
|
44 |
+
$this->list_id = $list_id;
|
45 |
+
}
|
46 |
+
|
47 |
+
public function getListId()
|
48 |
+
{
|
49 |
+
return $this->list_id;
|
50 |
+
}
|
51 |
+
|
52 |
+
public function subscribe(array $values)
|
53 |
+
{
|
54 |
+
$type = 'subscribe';
|
55 |
+
|
56 |
+
//Send the subscribe
|
57 |
+
$result = strval($this->buildAndSend($type, $values));
|
58 |
+
|
59 |
+
//Handle results
|
60 |
+
switch ($result) {
|
61 |
+
case '1':
|
62 |
+
return array(
|
63 |
+
'status' => true,
|
64 |
+
'message' => 'Subscribed'
|
65 |
+
);
|
66 |
+
break;
|
67 |
+
|
68 |
+
case 'Already subscribed.':
|
69 |
+
return array(
|
70 |
+
'status' => true,
|
71 |
+
'message' => 'Already subscribed.'
|
72 |
+
);
|
73 |
+
break;
|
74 |
+
|
75 |
+
default:
|
76 |
+
return array(
|
77 |
+
'status' => false,
|
78 |
+
'message' => $result
|
79 |
+
);
|
80 |
+
break;
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
public function unsubscribe($email)
|
85 |
+
{
|
86 |
+
$type = 'unsubscribe';
|
87 |
+
|
88 |
+
//Send the unsubscribe
|
89 |
+
$result = strval($this->buildAndSend($type, array('email' => $email)));
|
90 |
+
|
91 |
+
//Handle results
|
92 |
+
switch ($result) {
|
93 |
+
case '1':
|
94 |
+
return array(
|
95 |
+
'status' => true,
|
96 |
+
'message' => 'Unsubscribed'
|
97 |
+
);
|
98 |
+
break;
|
99 |
+
|
100 |
+
default:
|
101 |
+
return array(
|
102 |
+
'status' => false,
|
103 |
+
'message' => $result
|
104 |
+
);
|
105 |
+
break;
|
106 |
+
}
|
107 |
+
}
|
108 |
+
|
109 |
+
public function substatus($email)
|
110 |
+
{
|
111 |
+
$type = 'api/subscribers/subscription-status.php';
|
112 |
+
|
113 |
+
//Send the request for status
|
114 |
+
$result = $this->buildAndSend($type, array(
|
115 |
+
'email' => $email,
|
116 |
+
'api_key' => $this->api_key,
|
117 |
+
'list_id' => $this->list_id
|
118 |
+
));
|
119 |
+
|
120 |
+
//Handle the results
|
121 |
+
switch ($result) {
|
122 |
+
case 'Subscribed':
|
123 |
+
case 'Unsubscribed':
|
124 |
+
case 'Unconfirmed':
|
125 |
+
case 'Bounced':
|
126 |
+
case 'Soft bounced':
|
127 |
+
case 'Complained':
|
128 |
+
return array(
|
129 |
+
'status' => true,
|
130 |
+
'message' => $result
|
131 |
+
);
|
132 |
+
break;
|
133 |
+
|
134 |
+
default:
|
135 |
+
return array(
|
136 |
+
'status' => false,
|
137 |
+
'message' => $result
|
138 |
+
);
|
139 |
+
break;
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
public function subcount($list = "")
|
144 |
+
{
|
145 |
+
$type = 'api/subscribers/active-subscriber-count.php';
|
146 |
+
|
147 |
+
//if a list is passed in use it, otherwise use $this->list_id
|
148 |
+
if (empty($list)) {
|
149 |
+
$list = $this->list_id;
|
150 |
+
}
|
151 |
+
|
152 |
+
//handle exceptions
|
153 |
+
if (empty($list)) {
|
154 |
+
throw new \Exception("method [subcount] requires parameter [list] or [$this->list_id] to be set.", 1);
|
155 |
+
}
|
156 |
+
|
157 |
+
|
158 |
+
//Send request for subcount
|
159 |
+
$result = $this->buildAndSend($type, array(
|
160 |
+
'api_key' => $this->api_key,
|
161 |
+
'list_id' => $list
|
162 |
+
));
|
163 |
+
|
164 |
+
//Handle the results
|
165 |
+
if (is_numeric($result)) {
|
166 |
+
return array(
|
167 |
+
'status' => true,
|
168 |
+
'message' => $result
|
169 |
+
);
|
170 |
+
}
|
171 |
+
|
172 |
+
//Error
|
173 |
+
return array(
|
174 |
+
'status' => false,
|
175 |
+
'message' => $result
|
176 |
+
);
|
177 |
+
}
|
178 |
+
|
179 |
+
private function buildAndSend($type, array $values)
|
180 |
+
{
|
181 |
+
//error checking
|
182 |
+
if (empty($type)) {
|
183 |
+
throw new \Exception("Required config parameter [type] is not set or empty", 1);
|
184 |
+
}
|
185 |
+
|
186 |
+
if (empty($values)) {
|
187 |
+
throw new \Exception("Required config parameter [values] is not set or empty", 1);
|
188 |
+
}
|
189 |
+
|
190 |
+
//Global options for return
|
191 |
+
$return_options = array(
|
192 |
+
'list' => $this->list_id,
|
193 |
+
'boolean' => 'true'
|
194 |
+
);
|
195 |
+
|
196 |
+
//Merge the passed in values with the options for return
|
197 |
+
$content = array_merge($values, $return_options);
|
198 |
+
|
199 |
+
//build a query using the $content
|
200 |
+
$postdata = http_build_query($content);
|
201 |
+
|
202 |
+
$ch = curl_init($this->installation_url .'/'. $type);
|
203 |
+
|
204 |
+
// Settings to disable SSL verification for testing (leave commented for production use)
|
205 |
+
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
206 |
+
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
207 |
+
|
208 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded"));
|
209 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
210 |
+
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
|
211 |
+
curl_setopt($ch, CURLOPT_POST, 1);
|
212 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
|
213 |
+
$result = curl_exec($ch);
|
214 |
+
curl_close($ch);
|
215 |
+
|
216 |
+
return $result;
|
217 |
+
}
|
218 |
+
}
|
json/font-awesome.json
CHANGED
@@ -1 +1 @@
|
|
1 |
-
["fa-500px","fa-adjust","fa-adn","fa-align-center","fa-align-justify","fa-align-left","fa-align-right","fa-amazon","fa-ambulance","fa-anchor","fa-android","fa-angellist","fa-angle-double-down","fa-angle-double-left","fa-angle-double-right","fa-angle-double-up","fa-angle-down","fa-angle-left","fa-angle-right","fa-angle-up","fa-apple","fa-archive","fa-area-chart","fa-arrow-circle-down","fa-arrow-circle-left","fa-arrow-circle-o-down","fa-arrow-circle-o-left","fa-arrow-circle-o-right","fa-arrow-circle-o-up","fa-arrow-circle-right","fa-arrow-circle-up","fa-arrow-down","fa-arrow-left","fa-arrow-right","fa-arrow-up","fa-arrows","fa-arrows-alt","fa-arrows-h","fa-arrows-v","fa-asterisk","fa-at","fa-automobile","fa-backward","fa-balance-scale","fa-ban","fa-bank","fa-bar-chart","fa-bar-chart-o","fa-barcode","fa-bars","fa-battery-0","fa-battery-1","fa-battery-2","fa-battery-3","fa-battery-4","fa-battery-empty","fa-battery-full","fa-battery-half","fa-battery-quarter","fa-battery-three-quarters","fa-bed","fa-beer","fa-behance","fa-behance-square","fa-bell","fa-bell-o","fa-bell-slash","fa-bell-slash-o","fa-bicycle","fa-binoculars","fa-birthday-cake","fa-bitbucket","fa-bitbucket-square","fa-bitcoin","fa-black-tie","fa-bold","fa-bolt","fa-bomb","fa-book","fa-bookmark","fa-bookmark-o","fa-briefcase","fa-btc","fa-bug","fa-building","fa-building-o","fa-bullhorn","fa-bullseye","fa-bus","fa-buysellads","fa-cab","fa-calculator","fa-calendar","fa-calendar-check-o","fa-calendar-minus-o","fa-calendar-o","fa-calendar-plus-o","fa-calendar-times-o","fa-camera","fa-camera-retro","fa-car","fa-caret-down","fa-caret-left","fa-caret-right","fa-caret-square-o-down","fa-caret-square-o-left","fa-caret-square-o-right","fa-caret-square-o-up","fa-caret-up","fa-cart-arrow-down","fa-cart-plus","fa-cc","fa-cc-amex","fa-cc-diners-club","fa-cc-discover","fa-cc-jcb","fa-cc-mastercard","fa-cc-paypal","fa-cc-stripe","fa-cc-visa","fa-certificate","fa-chain","fa-chain-broken","fa-check","fa-check-circle","fa-check-circle-o","fa-check-square","fa-check-square-o","fa-chevron-circle-down","fa-chevron-circle-left","fa-chevron-circle-right","fa-chevron-circle-up","fa-chevron-down","fa-chevron-left","fa-chevron-right","fa-chevron-up","fa-child","fa-chrome","fa-circle","fa-circle-o","fa-circle-o-notch","fa-circle-thin","fa-clipboard","fa-clock-o","fa-clone","fa-close","fa-cloud","fa-cloud-download","fa-cloud-upload","fa-cny","fa-code","fa-code-fork","fa-codepen","fa-coffee","fa-cog","fa-cogs","fa-columns","fa-comment","fa-comment-o","fa-commenting","fa-commenting-o","fa-comments","fa-comments-o","fa-compass","fa-compress","fa-connectdevelop","fa-contao","fa-copy","fa-copyright","fa-creative-commons","fa-credit-card","fa-crop","fa-crosshairs","fa-css3","fa-cube","fa-cubes","fa-cut","fa-cutlery","fa-dashboard","fa-dashcube","fa-database","fa-dedent","fa-delicious","fa-desktop","fa-deviantart","fa-diamond","fa-digg","fa-dollar","fa-dot-circle-o","fa-download","fa-dribbble","fa-dropbox","fa-drupal","fa-edit","fa-eject","fa-ellipsis-h","fa-ellipsis-v","fa-empire","fa-envelope","fa-envelope-o","fa-envelope-square","fa-eraser","fa-eur","fa-euro","fa-exchange","fa-exclamation","fa-exclamation-circle","fa-exclamation-triangle","fa-expand","fa-expeditedssl","fa-external-link","fa-external-link-square","fa-eye","fa-eye-slash","fa-eyedropper","fa-facebook","fa-facebook-f","fa-facebook-official","fa-facebook-square","fa-fast-backward","fa-fast-forward","fa-fax","fa-feed","fa-female","fa-fighter-jet","fa-file","fa-file-archive-o","fa-file-audio-o","fa-file-code-o","fa-file-excel-o","fa-file-image-o","fa-file-movie-o","fa-file-o","fa-file-pdf-o","fa-file-photo-o","fa-file-picture-o","fa-file-powerpoint-o","fa-file-sound-o","fa-file-text","fa-file-text-o","fa-file-video-o","fa-file-word-o","fa-file-zip-o","fa-files-o","fa-film","fa-filter","fa-fire","fa-fire-extinguisher","fa-firefox","fa-flag","fa-flag-checkered","fa-flag-o","fa-flash","fa-flask","fa-flickr","fa-floppy-o","fa-folder","fa-folder-o","fa-folder-open","fa-folder-open-o","fa-font","fa-fonticons","fa-forumbee","fa-forward","fa-foursquare","fa-frown-o","fa-futbol-o","fa-gamepad","fa-gavel","fa-gbp","fa-ge","fa-gear","fa-gears","fa-genderless","fa-get-pocket","fa-gg","fa-gg-circle","fa-gift","fa-git","fa-git-square","fa-github","fa-github-alt","fa-github-square","fa-gittip","fa-glass","fa-globe","fa-google","fa-google-plus","fa-google-plus-square","fa-google-wallet","fa-graduation-cap","fa-gratipay","fa-group","fa-h-square","fa-hacker-news","fa-hand-grab-o","fa-hand-lizard-o","fa-hand-o-down","fa-hand-o-left","fa-hand-o-right","fa-hand-o-up","fa-hand-paper-o","fa-hand-peace-o","fa-hand-pointer-o","fa-hand-rock-o","fa-hand-scissors-o","fa-hand-spock-o","fa-hand-stop-o","fa-hdd-o","fa-header","fa-headphones","fa-heart","fa-heart-o","fa-heartbeat","fa-history","fa-home","fa-hospital-o","fa-hotel","fa-hourglass","fa-hourglass-1","fa-hourglass-2","fa-hourglass-3","fa-hourglass-end","fa-hourglass-half","fa-hourglass-o","fa-hourglass-start","fa-houzz","fa-html5","fa-i-cursor","fa-ils","fa-image","fa-inbox","fa-indent","fa-industry","fa-info","fa-info-circle","fa-inr","fa-instagram","fa-institution","fa-internet-explorer","fa-intersex","fa-ioxhost","fa-italic","fa-joomla","fa-jpy","fa-jsfiddle","fa-key","fa-keyboard-o","fa-krw","fa-language","fa-laptop","fa-lastfm","fa-lastfm-square","fa-leaf","fa-leanpub","fa-legal","fa-lemon-o","fa-level-down","fa-level-up","fa-life-bouy","fa-life-buoy","fa-life-ring","fa-life-saver","fa-lightbulb-o","fa-line-chart","fa-link","fa-linkedin","fa-linkedin-square","fa-linux","fa-list","fa-list-alt","fa-list-ol","fa-list-ul","fa-location-arrow","fa-lock","fa-long-arrow-down","fa-long-arrow-left","fa-long-arrow-right","fa-long-arrow-up","fa-magic","fa-magnet","fa-mail-forward","fa-mail-reply","fa-mail-reply-all","fa-male","fa-map","fa-map-marker","fa-map-o","fa-map-pin","fa-map-signs","fa-mars","fa-mars-double","fa-mars-stroke","fa-mars-stroke-h","fa-mars-stroke-v","fa-maxcdn","fa-meanpath","fa-medium","fa-medkit","fa-meh-o","fa-mercury","fa-microphone","fa-microphone-slash","fa-minus","fa-minus-circle","fa-minus-square","fa-minus-square-o","fa-mobile","fa-mobile-phone","fa-money","fa-moon-o","fa-mortar-board","fa-motorcycle","fa-mouse-pointer","fa-music","fa-navicon","fa-neuter","fa-newspaper-o","fa-object-group","fa-object-ungroup","fa-odnoklassniki","fa-odnoklassniki-square","fa-opencart","fa-openid","fa-opera","fa-optin-monster","fa-outdent","fa-pagelines","fa-paint-brush","fa-paper-plane","fa-paper-plane-o","fa-paperclip","fa-paragraph","fa-paste","fa-pause","fa-paw","fa-paypal","fa-pencil","fa-pencil-square","fa-pencil-square-o","fa-phone","fa-phone-square","fa-photo","fa-picture-o","fa-pie-chart","fa-pied-piper","fa-pied-piper-alt","fa-pinterest","fa-pinterest-p","fa-pinterest-square","fa-plane","fa-play","fa-play-circle","fa-play-circle-o","fa-plug","fa-plus","fa-plus-circle","fa-plus-square","fa-plus-square-o","fa-power-off","fa-print","fa-puzzle-piece","fa-qq","fa-qrcode","fa-question","fa-question-circle","fa-quote-left","fa-quote-right","fa-ra","fa-random","fa-rebel","fa-recycle","fa-reddit","fa-reddit-square","fa-refresh","fa-registered","fa-remove","fa-renren","fa-reorder","fa-repeat","fa-reply","fa-reply-all","fa-retweet","fa-rmb","fa-road","fa-rocket","fa-rotate-left","fa-rotate-right","fa-rouble","fa-rss","fa-rss-square","fa-rub","fa-ruble","fa-rupee","fa-safari","fa-save","fa-scissors","fa-search","fa-search-minus","fa-search-plus","fa-sellsy","fa-send","fa-send-o","fa-server","fa-share","fa-share-alt","fa-share-alt-square","fa-share-square","fa-share-square-o","fa-shekel","fa-sheqel","fa-shield","fa-ship","fa-shirtsinbulk","fa-shopping-cart","fa-sign-in","fa-sign-out","fa-signal","fa-simplybuilt","fa-sitemap","fa-skyatlas","fa-skype","fa-slack","fa-sliders","fa-slideshare","fa-smile-o","fa-soccer-ball-o","fa-sort","fa-sort-alpha-asc","fa-sort-alpha-desc","fa-sort-amount-asc","fa-sort-amount-desc","fa-sort-asc","fa-sort-desc","fa-sort-down","fa-sort-numeric-asc","fa-sort-numeric-desc","fa-sort-up","fa-soundcloud","fa-space-shuttle","fa-spinner","fa-spoon","fa-spotify","fa-square","fa-square-o","fa-stack-exchange","fa-stack-overflow","fa-star","fa-star-half","fa-star-half-empty","fa-star-half-full","fa-star-half-o","fa-star-o","fa-steam","fa-steam-square","fa-step-backward","fa-step-forward","fa-stethoscope","fa-sticky-note","fa-sticky-note-o","fa-stop","fa-street-view","fa-strikethrough","fa-stumbleupon","fa-stumbleupon-circle","fa-subscript","fa-subway","fa-suitcase","fa-sun-o","fa-superscript","fa-support","fa-table","fa-tablet","fa-tachometer","fa-tag","fa-tags","fa-tasks","fa-taxi","fa-television","fa-tencent-weibo","fa-terminal","fa-text-height","fa-text-width","fa-th","fa-th-large","fa-th-list","fa-thumb-tack","fa-thumbs-down","fa-thumbs-o-down","fa-thumbs-o-up","fa-thumbs-up","fa-ticket","fa-times","fa-times-circle","fa-times-circle-o","fa-tint","fa-toggle-down","fa-toggle-left","fa-toggle-off","fa-toggle-on","fa-toggle-right","fa-toggle-up","fa-trademark","fa-train","fa-transgender","fa-transgender-alt","fa-trash","fa-trash-o","fa-tree","fa-trello","fa-tripadvisor","fa-trophy","fa-truck","fa-try","fa-tty","fa-tumblr","fa-tumblr-square","fa-turkish-lira","fa-tv","fa-twitch","fa-twitter","fa-twitter-square","fa-umbrella","fa-underline","fa-undo","fa-university","fa-unlink","fa-unlock","fa-unlock-alt","fa-unsorted","fa-upload","fa-usd","fa-user","fa-user-md","fa-user-plus","fa-user-secret","fa-user-times","fa-users","fa-venus","fa-venus-double","fa-venus-mars","fa-viacoin","fa-video-camera","fa-vimeo","fa-vimeo-square","fa-vine","fa-vk","fa-volume-down","fa-volume-off","fa-volume-up","fa-warning","fa-wechat","fa-weibo","fa-weixin","fa-whatsapp","fa-wheelchair","fa-wifi","fa-wikipedia-w","fa-windows","fa-won","fa-wordpress","fa-wrench","fa-xing","fa-xing-square","fa-y-combinator","fa-y-combinator-square","fa-yahoo","fa-yc","fa-yc-square","fa-yelp","fa-yen","fa-youtube","fa-youtube-play","fa-youtube-square"]
|
1 |
+
["fa-500px","fa-adjust","fa-adn","fa-align-center","fa-align-justify","fa-align-left","fa-align-right","fa-amazon","fa-ambulance","fa-anchor","fa-android","fa-angellist","fa-angle-double-down","fa-angle-double-left","fa-angle-double-right","fa-angle-double-up","fa-angle-down","fa-angle-left","fa-angle-right","fa-angle-up","fa-apple","fa-archive","fa-area-chart","fa-arrow-circle-down","fa-arrow-circle-left","fa-arrow-circle-o-down","fa-arrow-circle-o-left","fa-arrow-circle-o-right","fa-arrow-circle-o-up","fa-arrow-circle-right","fa-arrow-circle-up","fa-arrow-down","fa-arrow-left","fa-arrow-right","fa-arrow-up","fa-arrows","fa-arrows-alt","fa-arrows-h","fa-arrows-v","fa-asterisk","fa-at","fa-automobile","fa-backward","fa-balance-scale","fa-ban","fa-bank","fa-bar-chart","fa-bar-chart-o","fa-barcode","fa-bars","fa-battery-0","fa-battery-1","fa-battery-2","fa-battery-3","fa-battery-4","fa-battery-empty","fa-battery-full","fa-battery-half","fa-battery-quarter","fa-battery-three-quarters","fa-bed","fa-beer","fa-behance","fa-behance-square","fa-bell","fa-bell-o","fa-bell-slash","fa-bell-slash-o","fa-bicycle","fa-binoculars","fa-birthday-cake","fa-bitbucket","fa-bitbucket-square","fa-bitcoin","fa-black-tie","fa-bluetooth","fa-bluetooth-b","fa-bold","fa-bolt","fa-bomb","fa-book","fa-bookmark","fa-bookmark-o","fa-briefcase","fa-btc","fa-bug","fa-building","fa-building-o","fa-bullhorn","fa-bullseye","fa-bus","fa-buysellads","fa-cab","fa-calculator","fa-calendar","fa-calendar-check-o","fa-calendar-minus-o","fa-calendar-o","fa-calendar-plus-o","fa-calendar-times-o","fa-camera","fa-camera-retro","fa-car","fa-caret-down","fa-caret-left","fa-caret-right","fa-caret-square-o-down","fa-caret-square-o-left","fa-caret-square-o-right","fa-caret-square-o-up","fa-caret-up","fa-cart-arrow-down","fa-cart-plus","fa-cc","fa-cc-amex","fa-cc-diners-club","fa-cc-discover","fa-cc-jcb","fa-cc-mastercard","fa-cc-paypal","fa-cc-stripe","fa-cc-visa","fa-certificate","fa-chain","fa-chain-broken","fa-check","fa-check-circle","fa-check-circle-o","fa-check-square","fa-check-square-o","fa-chevron-circle-down","fa-chevron-circle-left","fa-chevron-circle-right","fa-chevron-circle-up","fa-chevron-down","fa-chevron-left","fa-chevron-right","fa-chevron-up","fa-child","fa-chrome","fa-circle","fa-circle-o","fa-circle-o-notch","fa-circle-thin","fa-clipboard","fa-clock-o","fa-clone","fa-close","fa-cloud","fa-cloud-download","fa-cloud-upload","fa-cny","fa-code","fa-code-fork","fa-codepen","fa-codiepie","fa-coffee","fa-cog","fa-cogs","fa-columns","fa-comment","fa-comment-o","fa-commenting","fa-commenting-o","fa-comments","fa-comments-o","fa-compass","fa-compress","fa-connectdevelop","fa-contao","fa-copy","fa-copyright","fa-creative-commons","fa-credit-card","fa-credit-card-alt","fa-crop","fa-crosshairs","fa-css3","fa-cube","fa-cubes","fa-cut","fa-cutlery","fa-dashboard","fa-dashcube","fa-database","fa-dedent","fa-delicious","fa-desktop","fa-deviantart","fa-diamond","fa-digg","fa-dollar","fa-dot-circle-o","fa-download","fa-dribbble","fa-dropbox","fa-drupal","fa-edge","fa-edit","fa-eject","fa-ellipsis-h","fa-ellipsis-v","fa-empire","fa-envelope","fa-envelope-o","fa-envelope-square","fa-eraser","fa-eur","fa-euro","fa-exchange","fa-exclamation","fa-exclamation-circle","fa-exclamation-triangle","fa-expand","fa-expeditedssl","fa-external-link","fa-external-link-square","fa-eye","fa-eye-slash","fa-eyedropper","fa-facebook","fa-facebook-f","fa-facebook-official","fa-facebook-square","fa-fast-backward","fa-fast-forward","fa-fax","fa-feed","fa-female","fa-fighter-jet","fa-file","fa-file-archive-o","fa-file-audio-o","fa-file-code-o","fa-file-excel-o","fa-file-image-o","fa-file-movie-o","fa-file-o","fa-file-pdf-o","fa-file-photo-o","fa-file-picture-o","fa-file-powerpoint-o","fa-file-sound-o","fa-file-text","fa-file-text-o","fa-file-video-o","fa-file-word-o","fa-file-zip-o","fa-files-o","fa-film","fa-filter","fa-fire","fa-fire-extinguisher","fa-firefox","fa-flag","fa-flag-checkered","fa-flag-o","fa-flash","fa-flask","fa-flickr","fa-floppy-o","fa-folder","fa-folder-o","fa-folder-open","fa-folder-open-o","fa-font","fa-fonticons","fa-fort-awesome","fa-forumbee","fa-forward","fa-foursquare","fa-frown-o","fa-futbol-o","fa-gamepad","fa-gavel","fa-gbp","fa-ge","fa-gear","fa-gears","fa-genderless","fa-get-pocket","fa-gg","fa-gg-circle","fa-gift","fa-git","fa-git-square","fa-github","fa-github-alt","fa-github-square","fa-gittip","fa-glass","fa-globe","fa-google","fa-google-plus","fa-google-plus-square","fa-google-wallet","fa-graduation-cap","fa-gratipay","fa-group","fa-h-square","fa-hacker-news","fa-hand-grab-o","fa-hand-lizard-o","fa-hand-o-down","fa-hand-o-left","fa-hand-o-right","fa-hand-o-up","fa-hand-paper-o","fa-hand-peace-o","fa-hand-pointer-o","fa-hand-rock-o","fa-hand-scissors-o","fa-hand-spock-o","fa-hand-stop-o","fa-hashtag","fa-hdd-o","fa-header","fa-headphones","fa-heart","fa-heart-o","fa-heartbeat","fa-history","fa-home","fa-hospital-o","fa-hotel","fa-hourglass","fa-hourglass-1","fa-hourglass-2","fa-hourglass-3","fa-hourglass-end","fa-hourglass-half","fa-hourglass-o","fa-hourglass-start","fa-houzz","fa-html5","fa-i-cursor","fa-ils","fa-image","fa-inbox","fa-indent","fa-industry","fa-info","fa-info-circle","fa-inr","fa-instagram","fa-institution","fa-internet-explorer","fa-intersex","fa-ioxhost","fa-italic","fa-joomla","fa-jpy","fa-jsfiddle","fa-key","fa-keyboard-o","fa-krw","fa-language","fa-laptop","fa-lastfm","fa-lastfm-square","fa-leaf","fa-leanpub","fa-legal","fa-lemon-o","fa-level-down","fa-level-up","fa-life-bouy","fa-life-buoy","fa-life-ring","fa-life-saver","fa-lightbulb-o","fa-line-chart","fa-link","fa-linkedin","fa-linkedin-square","fa-linux","fa-list","fa-list-alt","fa-list-ol","fa-list-ul","fa-location-arrow","fa-lock","fa-long-arrow-down","fa-long-arrow-left","fa-long-arrow-right","fa-long-arrow-up","fa-magic","fa-magnet","fa-mail-forward","fa-mail-reply","fa-mail-reply-all","fa-male","fa-map","fa-map-marker","fa-map-o","fa-map-pin","fa-map-signs","fa-mars","fa-mars-double","fa-mars-stroke","fa-mars-stroke-h","fa-mars-stroke-v","fa-maxcdn","fa-meanpath","fa-medium","fa-medkit","fa-meh-o","fa-mercury","fa-microphone","fa-microphone-slash","fa-minus","fa-minus-circle","fa-minus-square","fa-minus-square-o","fa-mixcloud","fa-mobile","fa-mobile-phone","fa-modx","fa-money","fa-moon-o","fa-mortar-board","fa-motorcycle","fa-mouse-pointer","fa-music","fa-navicon","fa-neuter","fa-newspaper-o","fa-object-group","fa-object-ungroup","fa-odnoklassniki","fa-odnoklassniki-square","fa-opencart","fa-openid","fa-opera","fa-optin-monster","fa-outdent","fa-pagelines","fa-paint-brush","fa-paper-plane","fa-paper-plane-o","fa-paperclip","fa-paragraph","fa-paste","fa-pause","fa-pause-circle","fa-pause-circle-o","fa-paw","fa-paypal","fa-pencil","fa-pencil-square","fa-pencil-square-o","fa-percent","fa-phone","fa-phone-square","fa-photo","fa-picture-o","fa-pie-chart","fa-pied-piper","fa-pied-piper-alt","fa-pinterest","fa-pinterest-p","fa-pinterest-square","fa-plane","fa-play","fa-play-circle","fa-play-circle-o","fa-plug","fa-plus","fa-plus-circle","fa-plus-square","fa-plus-square-o","fa-power-off","fa-print","fa-product-hunt","fa-puzzle-piece","fa-qq","fa-qrcode","fa-question","fa-question-circle","fa-quote-left","fa-quote-right","fa-ra","fa-random","fa-rebel","fa-recycle","fa-reddit","fa-reddit-alien","fa-reddit-square","fa-refresh","fa-registered","fa-remove","fa-renren","fa-reorder","fa-repeat","fa-reply","fa-reply-all","fa-retweet","fa-rmb","fa-road","fa-rocket","fa-rotate-left","fa-rotate-right","fa-rouble","fa-rss","fa-rss-square","fa-rub","fa-ruble","fa-rupee","fa-safari","fa-save","fa-scissors","fa-scribd","fa-search","fa-search-minus","fa-search-plus","fa-sellsy","fa-send","fa-send-o","fa-server","fa-share","fa-share-alt","fa-share-alt-square","fa-share-square","fa-share-square-o","fa-shekel","fa-sheqel","fa-shield","fa-ship","fa-shirtsinbulk","fa-shopping-bag","fa-shopping-basket","fa-shopping-cart","fa-sign-in","fa-sign-out","fa-signal","fa-simplybuilt","fa-sitemap","fa-skyatlas","fa-skype","fa-slack","fa-sliders","fa-slideshare","fa-smile-o","fa-soccer-ball-o","fa-sort","fa-sort-alpha-asc","fa-sort-alpha-desc","fa-sort-amount-asc","fa-sort-amount-desc","fa-sort-asc","fa-sort-desc","fa-sort-down","fa-sort-numeric-asc","fa-sort-numeric-desc","fa-sort-up","fa-soundcloud","fa-space-shuttle","fa-spinner","fa-spoon","fa-spotify","fa-square","fa-square-o","fa-stack-exchange","fa-stack-overflow","fa-star","fa-star-half","fa-star-half-empty","fa-star-half-full","fa-star-half-o","fa-star-o","fa-steam","fa-steam-square","fa-step-backward","fa-step-forward","fa-stethoscope","fa-sticky-note","fa-sticky-note-o","fa-stop","fa-stop-circle","fa-stop-circle-o","fa-street-view","fa-strikethrough","fa-stumbleupon","fa-stumbleupon-circle","fa-subscript","fa-subway","fa-suitcase","fa-sun-o","fa-superscript","fa-support","fa-table","fa-tablet","fa-tachometer","fa-tag","fa-tags","fa-tasks","fa-taxi","fa-television","fa-tencent-weibo","fa-terminal","fa-text-height","fa-text-width","fa-th","fa-th-large","fa-th-list","fa-thumb-tack","fa-thumbs-down","fa-thumbs-o-down","fa-thumbs-o-up","fa-thumbs-up","fa-ticket","fa-times","fa-times-circle","fa-times-circle-o","fa-tint","fa-toggle-down","fa-toggle-left","fa-toggle-off","fa-toggle-on","fa-toggle-right","fa-toggle-up","fa-trademark","fa-train","fa-transgender","fa-transgender-alt","fa-trash","fa-trash-o","fa-tree","fa-trello","fa-tripadvisor","fa-trophy","fa-truck","fa-try","fa-tty","fa-tumblr","fa-tumblr-square","fa-turkish-lira","fa-tv","fa-twitch","fa-twitter","fa-twitter-square","fa-umbrella","fa-underline","fa-undo","fa-university","fa-unlink","fa-unlock","fa-unlock-alt","fa-unsorted","fa-upload","fa-usb","fa-usd","fa-user","fa-user-md","fa-user-plus","fa-user-secret","fa-user-times","fa-users","fa-venus","fa-venus-double","fa-venus-mars","fa-viacoin","fa-video-camera","fa-vimeo","fa-vimeo-square","fa-vine","fa-vk","fa-volume-down","fa-volume-off","fa-volume-up","fa-warning","fa-wechat","fa-weibo","fa-weixin","fa-whatsapp","fa-wheelchair","fa-wifi","fa-wikipedia-w","fa-windows","fa-won","fa-wordpress","fa-wrench","fa-xing","fa-xing-square","fa-y-combinator","fa-y-combinator-square","fa-yahoo","fa-yc","fa-yc-square","fa-yelp","fa-yen","fa-youtube","fa-youtube-play","fa-youtube-square"]
|
languages/readme.md
CHANGED
@@ -7,7 +7,7 @@ Any translation files placed here will be deleted when you update the plugin.
|
|
7 |
1. Make a copy of the original `xx_XX.pot` file.
|
8 |
2. You need to rename the coppied file now. The naming convention is based on the language code (e.g. "pt" for Portuguese) followed with underscore and the country code (e.g. "BR" for Brazil). So, the Brazilian Portuguese file would be named as `pt_BR.po`.
|
9 |
3. Use [Poedit](http://www.poedit.net/) to translate the file and export (save) it as `MO` translation file format.
|
10 |
-
4. Upload translated `pt_BR.mo` file into your WordPress language directory, such as `/wp-content/languages/plugins/
|
11 |
|
12 |
## Contributing your translations back to the plugin
|
13 |
|
7 |
1. Make a copy of the original `xx_XX.pot` file.
|
8 |
2. You need to rename the coppied file now. The naming convention is based on the language code (e.g. "pt" for Portuguese) followed with underscore and the country code (e.g. "BR" for Brazil). So, the Brazilian Portuguese file would be named as `pt_BR.po`.
|
9 |
3. Use [Poedit](http://www.poedit.net/) to translate the file and export (save) it as `MO` translation file format.
|
10 |
+
4. Upload translated `pt_BR.mo` file into your WordPress language directory, such as `/wp-content/languages/plugins/bb-plugin/pt_BR.mo`.
|
11 |
|
12 |
## Contributing your translations back to the plugin
|
13 |
|
modules/photo/includes/frontend.php
CHANGED
@@ -5,6 +5,7 @@ $src = $module->get_src();
|
|
5 |
$link = $module->get_link();
|
6 |
$alt = $module->get_alt();
|
7 |
$attrs = $module->get_attributes();
|
|
|
8 |
|
9 |
?>
|
10 |
<div class="fl-photo<?php if ( ! empty( $settings->crop ) ) echo ' fl-photo-crop-' . $settings->crop ; ?> fl-photo-align-<?php echo $settings->align; ?>" itemscope itemtype="http://schema.org/ImageObject">
|
@@ -12,7 +13,7 @@ $attrs = $module->get_attributes();
|
|
12 |
<?php if(!empty($link)) : ?>
|
13 |
<a href="<?php echo $link; ?>" target="<?php echo $settings->link_target; ?>" itemprop="url">
|
14 |
<?php endif; ?>
|
15 |
-
<img class="fl-photo-img" src="<?php echo $src; ?>" alt="<?php echo $alt; ?>" itemprop="image" <?php echo $attrs; ?> />
|
16 |
<?php if(!empty($link)) : ?>
|
17 |
</a>
|
18 |
<?php endif; ?>
|
5 |
$link = $module->get_link();
|
6 |
$alt = $module->get_alt();
|
7 |
$attrs = $module->get_attributes();
|
8 |
+
$srcset = $module->get_srcset();
|
9 |
|
10 |
?>
|
11 |
<div class="fl-photo<?php if ( ! empty( $settings->crop ) ) echo ' fl-photo-crop-' . $settings->crop ; ?> fl-photo-align-<?php echo $settings->align; ?>" itemscope itemtype="http://schema.org/ImageObject">
|
13 |
<?php if(!empty($link)) : ?>
|
14 |
<a href="<?php echo $link; ?>" target="<?php echo $settings->link_target; ?>" itemprop="url">
|
15 |
<?php endif; ?>
|
16 |
+
<img class="fl-photo-img" src="<?php echo $src; ?>" alt="<?php echo $alt; ?>" itemprop="image" <?php echo $attrs; ?> <?php echo $srcset; ?> />
|
17 |
<?php if(!empty($link)) : ?>
|
18 |
</a>
|
19 |
<?php endif; ?>
|
modules/photo/photo.php
CHANGED
@@ -215,6 +215,46 @@ class FLPhotoModule extends FLBuilderModule {
|
|
215 |
return $src;
|
216 |
}
|
217 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
218 |
/**
|
219 |
* @method get_link
|
220 |
*/
|
215 |
return $src;
|
216 |
}
|
217 |
|
218 |
+
/**
|
219 |
+
* @method get_srcset
|
220 |
+
*/
|
221 |
+
public function get_srcset()
|
222 |
+
{
|
223 |
+
$attrs = '';
|
224 |
+
$srcset = array();
|
225 |
+
|
226 |
+
// Cropped photos only have one URL, so we can't use srcset.
|
227 |
+
// Photo source URL only has one URL, so we can't use srcset.
|
228 |
+
// If don't have photo data, we can't use srcset.
|
229 |
+
if ( empty( $this->settings->crop ) && $this->settings->photo_source == 'library' && ! empty( $this->settings->photo ) ) {
|
230 |
+
|
231 |
+
// Get the photo data.
|
232 |
+
$data = self::get_data();
|
233 |
+
|
234 |
+
// Proceed if we have photo data and sizes.
|
235 |
+
if ( is_object( $data ) && isset( $data->sizes ) ) {
|
236 |
+
|
237 |
+
// Loop through the sizes and build the $srcset array.
|
238 |
+
foreach ( $data->sizes as $key => $size ) {
|
239 |
+
|
240 |
+
if ( 'thumbnail' == $key ) {
|
241 |
+
continue;
|
242 |
+
}
|
243 |
+
|
244 |
+
$srcset[] = $size->url . ' ' . $size->width . 'w';
|
245 |
+
}
|
246 |
+
|
247 |
+
// Build the srcset string if we don't have an empty $srcset array.
|
248 |
+
if ( count( $srcset ) > 0 ) {
|
249 |
+
$attrs = 'srcset="' . implode( ',', $srcset ) . '"';
|
250 |
+
$attrs .= ' sizes="(max-width: ' . $data->width . 'px) 100vw, ' . $data->width . 'px"';
|
251 |
+
}
|
252 |
+
}
|
253 |
+
}
|
254 |
+
|
255 |
+
return $attrs;
|
256 |
+
}
|
257 |
+
|
258 |
/**
|
259 |
* @method get_link
|
260 |
*/
|
modules/video/includes/frontend.php
CHANGED
@@ -9,11 +9,11 @@ $preload = FLBuilderModel::is_builder_active() ? ' preload="none"' : '';
|
|
9 |
<?php
|
10 |
|
11 |
global $wp_embed;
|
12 |
-
|
13 |
if($vid_data && $settings->video_type == 'media_library') {
|
14 |
echo '<meta itemprop="url" content="' . $vid_data->url . '" />';
|
15 |
echo '<meta itemprop="thumbnail" content="' . $vid_data->poster . '" />';
|
16 |
-
echo
|
17 |
}
|
18 |
else if($settings->video_type == 'embed') {
|
19 |
echo $wp_embed->autoembed($settings->embed_code);
|
9 |
<?php
|
10 |
|
11 |
global $wp_embed;
|
12 |
+
|
13 |
if($vid_data && $settings->video_type == 'media_library') {
|
14 |
echo '<meta itemprop="url" content="' . $vid_data->url . '" />';
|
15 |
echo '<meta itemprop="thumbnail" content="' . $vid_data->poster . '" />';
|
16 |
+
echo '[video width="100%" height="100%" ' . $vid_data->extension . '="' . $vid_data->url . '"'. $vid_data->video_webm .' poster="' . $vid_data->poster . '"' . $vid_data->autoplay . $vid_data->loop . $preload . '][/video]';
|
17 |
}
|
18 |
else if($settings->video_type == 'embed') {
|
19 |
echo $wp_embed->autoembed($settings->embed_code);
|
modules/video/video.php
CHANGED
@@ -42,6 +42,11 @@ class FLVideoModule extends FLBuilderModule {
|
|
42 |
$this->data->poster = isset($this->settings->poster_src) ? $this->settings->poster_src : '';
|
43 |
$this->data->loop = isset($this->settings->loop) && $this->settings->loop ? ' loop="yes"' : '';
|
44 |
$this->data->autoplay = isset($this->settings->autoplay) && $this->settings->autoplay ? ' autoplay="yes"' : '';
|
|
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
}
|
47 |
|
@@ -88,7 +93,7 @@ FLBuilder::register_module('FLVideoModule', array(
|
|
88 |
),
|
89 |
'toggle' => array(
|
90 |
'media_library' => array(
|
91 |
-
'fields' => array('video', 'poster', 'autoplay', 'loop')
|
92 |
),
|
93 |
'embed' => array(
|
94 |
'fields' => array('embed_code')
|
@@ -97,7 +102,16 @@ FLBuilder::register_module('FLVideoModule', array(
|
|
97 |
),
|
98 |
'video' => array(
|
99 |
'type' => 'video',
|
100 |
-
'label' => __( 'Video', 'fl-builder' )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
),
|
102 |
'poster' => array(
|
103 |
'type' => 'photo',
|
42 |
$this->data->poster = isset($this->settings->poster_src) ? $this->settings->poster_src : '';
|
43 |
$this->data->loop = isset($this->settings->loop) && $this->settings->loop ? ' loop="yes"' : '';
|
44 |
$this->data->autoplay = isset($this->settings->autoplay) && $this->settings->autoplay ? ' autoplay="yes"' : '';
|
45 |
+
|
46 |
+
// WebM format
|
47 |
+
$webm_data = FLBuilderPhoto::get_attachment_data($this->settings->video_webm);
|
48 |
+
$this->data->video_webm = isset($this->settings->video_webm) && $webm_data ? ' webm="'. $webm_data->url .'"' : '';
|
49 |
+
|
50 |
}
|
51 |
}
|
52 |
|
93 |
),
|
94 |
'toggle' => array(
|
95 |
'media_library' => array(
|
96 |
+
'fields' => array('video', 'video_webm', 'poster', 'autoplay', 'loop')
|
97 |
),
|
98 |
'embed' => array(
|
99 |
'fields' => array('embed_code')
|
102 |
),
|
103 |
'video' => array(
|
104 |
'type' => 'video',
|
105 |
+
'label' => __( 'Video (MP4)', 'fl-builder' ),
|
106 |
+
'help' => __('A video in the MP4 format. Most modern browsers support this format.', 'fl-builder'),
|
107 |
+
),
|
108 |
+
'video_webm' => array(
|
109 |
+
'type' => 'video',
|
110 |
+
'label' => __('Video (WebM)', 'fl-builder'),
|
111 |
+
'help' => __('A video in the WebM format to use as fallback. This format is required to support browsers such as FireFox and Opera.', 'fl-builder'),
|
112 |
+
'preview' => array(
|
113 |
+
'type' => 'none'
|
114 |
+
)
|
115 |
),
|
116 |
'poster' => array(
|
117 |
'type' => 'photo',
|
modules/widget/includes/frontend.php
CHANGED
@@ -26,7 +26,6 @@ if(isset($widget_slug) && isset($wp_widget_factory->widgets[$widget_slug])) {
|
|
26 |
$widget_settings = isset($settings->$settings_key) ? (array)$settings->$settings_key : array();
|
27 |
|
28 |
// Render the widget
|
29 |
-
wp_cache_flush($widget_slug, 'widget');
|
30 |
the_widget($widget_slug, $widget_settings, array('widget_id' => 'fl_builder_widget_' . $module->node));
|
31 |
}
|
32 |
else if(isset($widget_slug) && FLBuilderModel::is_builder_active()) {
|
26 |
$widget_settings = isset($settings->$settings_key) ? (array)$settings->$settings_key : array();
|
27 |
|
28 |
// Render the widget
|
|
|
29 |
the_widget($widget_slug, $widget_settings, array('widget_id' => 'fl_builder_widget_' . $module->node));
|
30 |
}
|
31 |
else if(isset($widget_slug) && FLBuilderModel::is_builder_active()) {
|
modules/widget/widget.php
CHANGED
@@ -51,6 +51,9 @@ class FLWidgetModule extends FLBuilderModule {
|
|
51 |
$settings->$settings_key = ( object )$widget_settings;
|
52 |
}
|
53 |
|
|
|
|
|
|
|
54 |
// Return the settings.
|
55 |
return $settings;
|
56 |
}
|
51 |
$settings->$settings_key = ( object )$widget_settings;
|
52 |
}
|
53 |
|
54 |
+
// Delete the WordPress cache for this widget.
|
55 |
+
wp_cache_delete( $settings->widget, 'widget' );
|
56 |
+
|
57 |
// Return the settings.
|
58 |
return $settings;
|
59 |
}
|
readme.txt
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
=== Beaver Builder - WordPress Page Builder ===
|
2 |
-
Contributors: justinbusa, RobbyMcCullough, billyyoung, hinampaksh, diegoliv, webmandesign
|
3 |
Tags: builder, layout builder, page builder, landing page builder, landing pages, website builder, site builder, front-end builder, drag and drop builder, editor, front-end editor, visual composer, page layout
|
4 |
Requires at least: 3.6
|
5 |
-
Tested up to: 4.
|
6 |
Stable tag: trunk
|
7 |
License: GPL2+
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
1 |
=== Beaver Builder - WordPress Page Builder ===
|
2 |
+
Contributors: justinbusa, RobbyMcCullough, billyyoung, hinampaksh, diegoliv, webmandesign, eugenealegiojo
|
3 |
Tags: builder, layout builder, page builder, landing page builder, landing pages, website builder, site builder, front-end builder, drag and drop builder, editor, front-end editor, visual composer, page layout
|
4 |
Requires at least: 3.6
|
5 |
+
Tested up to: 4.4
|
6 |
Stable tag: trunk
|
7 |
License: GPL2+
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|