Schema & Structured Data for WP & AMP - Version 1.0.2

Version Description

(28 August 2018) = * First Time Installation Setup Wizard * Added a Support form to provide faster support * Full Local Business Schema Markup Support * Schema Press Migrator - You can easy switch from Schema Press plugin with just one-click. * Moved the options panel to the bottom for better UX * Asks for review after a week. * Shows Schema type next to the name of the post * Knowledge Graph typo * Debug errors * Date format has been fixed via PR. Thanks to @thetoine * minor Bugs Fixed

Download this release

Release Info

Developer mohammed_kaludi
Plugin Icon 128x128 Schema & Structured Data for WP & AMP
Version 1.0.2
Comparing to
See all releases

Code changes from version 1.0.1 to 1.0.2

admin_section/add-schema/add_new.php ADDED
@@ -0,0 +1,601 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ add_action( 'admin_menu', 'saswp_add_new_data_menu' );
3
+ add_action( 'admin_init', 'saswp_add_new_init');
4
+ add_action( 'admin_footer', 'saswp_add_new_svg_sprite');
5
+ add_action( 'wp_ajax_saswp_add_new_save_steps_data', 'saswp_add_new_save_steps_data', 10, 0 );
6
+ $saswp_add_data_type_config = array(
7
+ 'installer_dir' => 'admin_section',
8
+ 'plugin_title' => esc_html__( ucfirst( 'Schema & Structured Data for WP' ), 'schema-and-structured-data-for-wp'),
9
+ 'start_steps' => 1,
10
+ 'total_steps' => 3,
11
+ 'installerpage' => 'saswp_add_new_data_type',
12
+ 'dev_mode' => false,
13
+ 'steps' => array(
14
+ 1=>array(
15
+ 'title'=>esc_html__('Select Schema', 'schema-and-structured-data-for-wp'),
16
+ 'description'=>esc_html__('Where would you like to enable the schema?','schema-and-structured-data-for-wp'),
17
+ 'fields'=>saswp_add_new_schema_type_selection(),
18
+ ),
19
+ 2=>array(
20
+ 'title'=>esc_html__('Placement', 'schema-and-structured-data-for-wp'),
21
+ 'description'=>esc_html__('Where would you like this to be displayed?','schema-and-structured-data-for-wp'),
22
+ 'fields'=>saswp_add_new_placement_selection(),
23
+ ),
24
+ 3=>array(
25
+ 'title'=>esc_html__('Enjoy', 'schema-and-structured-data-for-wp'),
26
+ 'description'=>esc_html__('Navigate to ', 'schema-and-structured-data-for-wp'),
27
+ 'fields'=>'',
28
+ ),
29
+
30
+ ),
31
+ 'current_step'=>array(
32
+ 'title'=>'',
33
+ 'step_id'=>1
34
+ )
35
+ );
36
+
37
+ function saswp_add_new_data_menu(){
38
+ saswp_add_new_init();
39
+
40
+ }
41
+
42
+ function saswp_add_new_init(){
43
+ // Exit if the user does not have proper permissions
44
+ if(! current_user_can( 'manage_options' ) ) {
45
+ return ;
46
+ }
47
+ saswp_add_new_steps_call();
48
+ }
49
+
50
+ function saswp_add_new_steps_call(){
51
+ global $saswp_add_data_type_config;
52
+ if ( empty( $_GET['page'] ) || $saswp_add_data_type_config['installerpage'] !== $_GET['page'] ) {
53
+ return;
54
+ }
55
+ if ( ob_get_length() ) {
56
+ ob_end_clean();
57
+ }
58
+ $step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : $saswp_add_data_type_config['start_steps'];
59
+ $title = $saswp_add_data_type_config['steps'][$step]['title'];
60
+ $saswp_add_data_type_config['current_step']['step_id'] = $step;
61
+
62
+ // Use minified libraries if dev mode is turned on.
63
+ $suffix = '';
64
+ wp_enqueue_media ();
65
+
66
+
67
+ // Enqueue styles.
68
+ wp_enqueue_style( 'saswp-timepicker-js', SASWP_PLUGIN_URL. $saswp_add_data_type_config['installer_dir']. '/css/jquery.timepicker' . $suffix . '.css' , array( 'wp-admin' ), '0.1');
69
+ // Enqueue javascript.
70
+ wp_enqueue_script( 'saswp-timepicker-css', SASWP_PLUGIN_URL. $saswp_add_data_type_config['installer_dir']. '/js/jquery.timepicker' . $suffix . '.js' , array( 'jquery-core' ), '0.1' );
71
+
72
+
73
+ // Enqueue styles.
74
+ wp_enqueue_style( 'saswp_add_new', SASWP_PLUGIN_URL. $saswp_add_data_type_config['installer_dir']. '/css/saswp-add-new' . $suffix . '.css' , array( 'wp-admin' ), '0.1');
75
+ // Enqueue javascript.
76
+ wp_enqueue_script( 'saswp_add_new', SASWP_PLUGIN_URL. $saswp_add_data_type_config['installer_dir']. '/js/saswp-add-new' . $suffix . '.js' , array( 'jquery-core' ), '0.1' );
77
+ //wp_enqueue_script( 'saswp_install_script', SASWP_PLUGIN_URL. '/admin_section/js/main-script.js' , array( 'jquery-core' ), '0.1' );
78
+
79
+ wp_enqueue_script( 'structure_admin', SASWP_PLUGIN_URL. $saswp_add_data_type_config['installer_dir']. '/js/structure_admin' . $suffix . '.js' , array( 'jquery' ), '0.1' );
80
+
81
+ wp_localize_script( 'structure_admin', 'saswp_app_object', array(
82
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
83
+ ) );
84
+
85
+
86
+ wp_localize_script( 'saswp_add_new', 'saswp_add_new_params', array(
87
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
88
+ 'wpnonce' => wp_create_nonce( 'saswp_add_new_nonce' ),
89
+ 'pluginurl' => SASWP_DIR_URI,
90
+ ) );
91
+
92
+
93
+ ob_start();
94
+ saswp_add_new_header(); ?>
95
+ <div class="merlin__wrapper">
96
+ <div class="saswp_install_wizard"><?php esc_html_e('ADD NEW SCHEMA','schema-and-structured-data-for-wp'); ?></div>
97
+ <div class="merlin__content merlin__content--<?php echo esc_attr( strtolower( $title ) ); ?>">
98
+ <?php
99
+ // Content Handlers.
100
+ $show_content = true;
101
+
102
+ if ( ! empty( $_REQUEST['save_step'] ) && isset( $saswp_add_data_type_config['current_step']['steps'] ) ) {
103
+ //saswp_save_steps_data();
104
+ }
105
+
106
+ if ( $show_content ) {
107
+ saswp_add_new_show_steps_body();
108
+ } ?>
109
+
110
+ <?php saswp_add_new_step_output_bottom_dots(); ?>
111
+
112
+ </div>
113
+
114
+ <?php echo sprintf( '<a class="return-to-dashboard" href="%s">%s</a>', esc_url( admin_url( 'edit.php?post_type=saswp' ) ), esc_html( 'Return to dashboard' ) ); ?>
115
+
116
+ </div>
117
+
118
+ <?php saswp_add_new_install_footer();
119
+ exit;
120
+ }
121
+
122
+ function saswp_add_new_show_steps_body(){
123
+ global $saswp_add_data_type_config;
124
+ if($saswp_add_data_type_config['total_steps']==$saswp_add_data_type_config['current_step']['step_id']){
125
+ call_user_func('saswp_add_new_finish_page');
126
+ }else{
127
+ if(function_exists('saswp_add_new_step'.$saswp_add_data_type_config['current_step']['step_id'])){
128
+ call_user_func('saswp_add_new_step'.$saswp_add_data_type_config['current_step']['step_id']);
129
+ }else{
130
+ call_user_func('saswp_add_new_finish_page');
131
+ }
132
+ }
133
+ }
134
+ function saswp_add_new_header() {
135
+ global $saswp_installer_config;
136
+
137
+ // Get the current step.
138
+ $current_step = strtolower( $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']]['title'] ); ?>
139
+
140
+ <!DOCTYPE html>
141
+ <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
142
+ <head>
143
+ <meta name="viewport" content="width=device-width"/>
144
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
145
+ <title><?php echo ucwords($current_step); ?></title>
146
+ <?php do_action( 'admin_print_styles' ); ?>
147
+ <?php do_action( 'admin_print_scripts' ); ?>
148
+ <?php do_action( 'admin_head' ); ?>
149
+ </head>
150
+ <body class="merlin__body merlin__body--<?php echo esc_attr( $current_step ); ?>">
151
+ <?php
152
+ }
153
+
154
+
155
+
156
+ function saswp_add_new_step1(){
157
+ global $saswp_add_data_type_config;
158
+ $stepDetails = $saswp_add_data_type_config['steps'][$saswp_add_data_type_config['current_step']['step_id']];
159
+ ?>
160
+
161
+ <div class="merlin__content--transition">
162
+
163
+ <div class="saswp_branding"></div>
164
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
165
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
166
+ </svg>
167
+
168
+ <h1><?php echo $stepDetails['title']; ?></h1>
169
+
170
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
171
+
172
+
173
+
174
+ </div>
175
+ <form action="" method="post">
176
+
177
+ <ul class="merlin__drawer--import-content">
178
+
179
+ <li>
180
+ <?php
181
+ $post =array();
182
+ echo saswp_schema_type_meta_box_callback($post);
183
+
184
+ ?>
185
+ </li>
186
+
187
+ </ul>
188
+
189
+
190
+ <footer class="merlin__content__footer">
191
+ <?php saswp_add_new_skip_button(); ?>
192
+
193
+ <a id="skip" href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
194
+
195
+ <a href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
196
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_add_new_loading_spinner(); ?>
197
+ </a>
198
+
199
+ <?php wp_nonce_field( 'saswp_add_new_nonce' ); ?>
200
+ </footer>
201
+ </form>
202
+ <?php
203
+ }
204
+
205
+ function saswp_add_new_step2(){
206
+ global $saswp_add_data_type_config;
207
+ $stepDetails = $saswp_add_data_type_config['steps'][$saswp_add_data_type_config['current_step']['step_id']];
208
+ ?>
209
+
210
+ <div class="merlin__content--transition">
211
+
212
+ <div class="saswp_branding"></div>
213
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
214
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
215
+ </svg>
216
+
217
+ <h1><?php echo $stepDetails['title']; ?></h1>
218
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
219
+ </div>
220
+ <form action="" method="post">
221
+
222
+ <div id="saswp_amp_select" class="postbox">
223
+ <ul class="merlin__drawer--import-content">
224
+
225
+ <li>
226
+
227
+ <?php
228
+ $last_post_id ='';
229
+ if(isset($_GET['step'])){
230
+ $step = $_GET['step'];
231
+
232
+ if($step == 2){
233
+ $last_post_id = json_decode(get_transient('saswp_last_post_id'), true);
234
+ $last_post_id = $last_post_id['post_id'];
235
+ }
236
+ $post = get_post($last_post_id);
237
+ if($post){
238
+ echo saswp_select_callback($post);
239
+ }
240
+ }
241
+ ?>
242
+
243
+ </li>
244
+ <li>
245
+ <input type="hidden" name="saswp_post_id" id="saswp_post_id" value="<?php echo $last_post_id; ?>">
246
+ </li>
247
+ </ul>
248
+ </div>
249
+
250
+
251
+ <footer class="merlin__content__footer">
252
+ <?php saswp_add_new_skip_button(); ?>
253
+
254
+ <a id="skip" href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
255
+
256
+ <a href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
257
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_add_new_loading_spinner(); ?>
258
+ </a>
259
+
260
+ <?php wp_nonce_field( 'saswp_add_new_nonce' ); ?>
261
+ </footer>
262
+ </form>
263
+ <?php
264
+ }
265
+
266
+
267
+ function saswp_add_new_step3(){
268
+ global $saswp_add_data_type_config;
269
+ $stepDetails = $saswp_add_data_type_config['steps'][$saswp_add_data_type_config['current_step']['step_id']];
270
+ ?>
271
+
272
+ <div class="merlin__content--transition">
273
+
274
+ <div class="saswp_branding"></div>
275
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
276
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
277
+ </svg>
278
+
279
+ <h1><?php echo $stepDetails['title']; ?></h1>
280
+
281
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
282
+
283
+
284
+
285
+ </div>
286
+ <form action="" method="post">
287
+
288
+ <ul class="merlin__drawer--import-content">
289
+ <?php
290
+ echo $stepDetails['fields'];
291
+ ?>
292
+ </ul>
293
+
294
+
295
+ <footer class="merlin__content__footer">
296
+ <?php saswp_add_new_skip_button(); ?>
297
+
298
+ <a id="skip" href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
299
+
300
+ <a href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
301
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_add_new_loading_spinner(); ?>
302
+ </a>
303
+
304
+ <?php wp_nonce_field( 'saswp_add_new_nonce' ); ?>
305
+ </footer>
306
+ </form>
307
+ <?php
308
+ }
309
+
310
+
311
+
312
+
313
+ function saswp_add_new_save_steps_data(){
314
+
315
+ if(isset($_POST['schema_type'])){
316
+ $schema_type = $_POST['schema_type'];
317
+ $user_id = get_current_user_id();
318
+ $schema_post = array(
319
+ 'post_author' => $user_id,
320
+ 'post_date' => date("Y-m-d"),
321
+ 'post_title' => ucfirst($schema_type),
322
+ 'post_status' => 'publish',
323
+ 'post_name' => ucfirst($schema_type),
324
+ 'post_type' => 'saswp',
325
+ );
326
+ $post_id = wp_insert_post($schema_post);
327
+ update_post_meta( $post_id, 'schema_type', esc_attr( $schema_type ) );
328
+
329
+ if ( isset( $_POST['saswp_business_type'] ) ){
330
+ update_post_meta( $post_id, 'saswp_business_type', esc_attr( $_POST['saswp_business_type'] ) );
331
+ }
332
+ if ( isset( $_POST['saswp_business_name'] ) ){
333
+ update_post_meta( $post_id, 'saswp_business_name', esc_attr( $_POST['saswp_business_name'] ) );
334
+ }
335
+ set_transient('saswp_last_post_id', json_encode(array('post_id'=>$post_id)));
336
+ }
337
+
338
+ if(isset($_POST['data_group_array']) && isset($_POST['saswp_post_id'])){
339
+ $post_id = sanitize_text_field($_POST['saswp_post_id']);
340
+ $post_data_group_array = array();
341
+ $temp_condition_array = array();
342
+ $show_globally =false;
343
+ $post_data_group_array = $_POST['data_group_array'];
344
+ foreach($post_data_group_array as $groups){
345
+ foreach($groups['data_array'] as $group ){
346
+ if(array_search('show_globally', $group))
347
+ {
348
+ $temp_condition_array[0] = $group;
349
+ $show_globally = true;
350
+ }
351
+ }
352
+ }
353
+ if($show_globally){
354
+ unset($post_data_group_array);
355
+ $post_data_group_array['group-0']['data_array'] = $temp_condition_array;
356
+ }
357
+ update_post_meta(
358
+ $post_id,
359
+ 'data_group_array',
360
+ $post_data_group_array
361
+ );
362
+ }
363
+ wp_send_json(
364
+ array(
365
+ 'done' => 1,
366
+ 'message' => "Stored Successfully",
367
+ 'post_id' => $post_id
368
+ )
369
+ );
370
+
371
+ }
372
+
373
+
374
+ function saswp_add_new_skip_button(){
375
+ ?>
376
+ <a href="<?php echo esc_url( saswp_add_new_step_next_link() ); ?>" class="merlin__button merlin__button--skip"><?php echo esc_html( 'Skip' ); ?></a>
377
+ <?php
378
+ }
379
+ function saswp_add_new_finish_page() {
380
+ global $saswp_add_data_type_config;
381
+ // Theme Name.
382
+ $plugin_title = $saswp_add_data_type_config['plugin_title'];
383
+ // Strings passed in from the config file.
384
+ $strings = null;
385
+
386
+
387
+ $allowed_html_array = array(
388
+ 'a' => array(
389
+ 'href' => array(),
390
+ 'title' => array(),
391
+ 'target' => array(),
392
+ ),
393
+ );
394
+
395
+ update_option( 'saswp_installer_completed', time() ); ?>
396
+
397
+ <div class="merlin__content--transition">
398
+
399
+ <div class="saswp_branding"></div>
400
+
401
+ <h1><?php echo esc_html( 'Schema Added Successfully. Have fun!' ); ?></h1>
402
+
403
+ </div>
404
+
405
+ <footer class="merlin__content__footer merlin__content__footer--fullwidth">
406
+
407
+ <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=saswp' ) ); ?>" class="merlin__button merlin__button--blue merlin__button--fullwidth merlin__button--popin"><?php echo esc_html( 'Let\'s Go' ); ?></a>
408
+
409
+
410
+ <ul class="merlin__drawer merlin__drawer--extras">
411
+
412
+ <li><?php //echo wp_kses( $link_1, $allowed_html_array ); ?></li>
413
+ <li><?php //echo wp_kses( $link_2, $allowed_html_array ); ?></li>
414
+ <li><?php //echo wp_kses( $link_3, $allowed_html_array ); ?></li>
415
+
416
+ </ul>
417
+
418
+ </footer>
419
+
420
+ <?php
421
+ }
422
+
423
+ function saswp_add_new_loading_spinner(){
424
+ global $saswp_add_data_type_config;
425
+ $spinner = SASWP_DIR_NAME. $saswp_add_data_type_config['installer_dir']. '/images/spinner.php';
426
+
427
+ // Retrieve the spinner.
428
+ get_template_part( $spinner );
429
+ }
430
+
431
+ function saswp_add_new_svg_sprite() {
432
+ global $saswp_add_data_type_config;
433
+ // Define SVG sprite file.
434
+ $svg = SASWP_DIR_NAME. $saswp_add_data_type_config['installer_dir'] . '/images/sprite.svg' ;
435
+
436
+ // If it exists, include it.
437
+ if ( file_exists( $svg ) ) {
438
+ require_once apply_filters( 'merlin_svg_sprite', $svg );
439
+ }
440
+ }
441
+ function saswp_add_new_step_next_link() {
442
+
443
+ global $saswp_add_data_type_config;
444
+
445
+ $step = $saswp_add_data_type_config['current_step']['step_id'] + 1;
446
+
447
+ $query_string = add_query_arg( 'step', $step );
448
+
449
+ return $query_string;
450
+ }
451
+
452
+ function saswp_add_new_install_header() {
453
+ global $saswp_add_data_type_config;
454
+
455
+ // Get the current step.
456
+ $current_step = strtolower( $saswp_add_data_type_config['steps'][$saswp_add_data_type_config['current_step']['step_id']]['title'] ); ?>
457
+
458
+ <!DOCTYPE html>
459
+ <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
460
+ <head>
461
+ <meta name="viewport" content="width=device-width"/>
462
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
463
+ <title><?php echo ucwords($current_step); ?></title>
464
+ <?php do_action( 'admin_print_styles' ); ?>
465
+ <?php do_action( 'admin_print_scripts' ); ?>
466
+ <?php do_action( 'admin_head' ); ?>
467
+ </head>
468
+ <body class="merlin__body merlin__body--<?php echo esc_attr( $current_step ); ?>">
469
+ <?php
470
+ }
471
+
472
+
473
+ function saswp_add_new_install_footer() {
474
+ ?>
475
+ </body>
476
+ <?php do_action( 'admin_footer' ); ?>
477
+ <?php do_action( 'admin_print_footer_scripts' ); ?>
478
+ </html>
479
+ <?php
480
+ }
481
+
482
+ function saswp_add_new_makesvg( $args = array() ){
483
+ // Make sure $args are an array.
484
+ if ( empty( $args ) ) {
485
+ return __( 'Please define default parameters in the form of an array.', 'accelerated-mobile-pages' );
486
+ }
487
+
488
+ // Define an icon.
489
+ if ( false === array_key_exists( 'icon', $args ) ) {
490
+ return __( 'Please define an SVG icon filename.', 'accelerated-mobile-pages' );
491
+ }
492
+
493
+ // Set defaults.
494
+ $defaults = array(
495
+ 'icon' => '',
496
+ 'title' => '',
497
+ 'desc' => '',
498
+ 'aria_hidden' => true, // Hide from screen readers.
499
+ 'fallback' => false,
500
+ );
501
+
502
+ // Parse args.
503
+ $args = wp_parse_args( $args, $defaults );
504
+
505
+ // Set aria hidden.
506
+ $aria_hidden = '';
507
+
508
+ if ( true === $args['aria_hidden'] ) {
509
+ $aria_hidden = ' aria-hidden="true"';
510
+ }
511
+
512
+ // Set ARIA.
513
+ $aria_labelledby = '';
514
+
515
+ if ( $args['title'] && $args['desc'] ) {
516
+ $aria_labelledby = ' aria-labelledby="title desc"';
517
+ }
518
+
519
+ // Begin SVG markup.
520
+ $svg = '<svg class="icon icon--' . esc_attr( $args['icon'] ) . '"' . $aria_hidden . $aria_labelledby . ' role="img">';
521
+
522
+ // If there is a title, display it.
523
+ if ( $args['title'] ) {
524
+ $svg .= '<title>' . esc_html( $args['title'] ) . '</title>';
525
+ }
526
+
527
+ // If there is a description, display it.
528
+ if ( $args['desc'] ) {
529
+ $svg .= '<desc>' . esc_html( $args['desc'] ) . '</desc>';
530
+ }
531
+
532
+ $svg .= '<use xlink:href="#icon-' . esc_html( $args['icon'] ) . '"></use>';
533
+
534
+ // Add some markup to use as a fallback for browsers that do not support SVGs.
535
+ if ( $args['fallback'] ) {
536
+ $svg .= '<span class="svg-fallback icon--' . esc_attr( $args['icon'] ) . '"></span>';
537
+ }
538
+
539
+ $svg .= '</svg>';
540
+
541
+ return $svg;
542
+
543
+ }
544
+
545
+ /**
546
+ * Adds data attributes to the body, based on Customizer entries.
547
+ */
548
+ function saswp_add_new_svg_allowed_html() {
549
+
550
+ $array = array(
551
+ 'svg' => array(
552
+ 'class' => array(),
553
+ 'aria-hidden' => array(),
554
+ 'role' => array(),
555
+ ),
556
+ 'use' => array(
557
+ 'xlink:href' => array(),
558
+ ),
559
+ );
560
+
561
+ return $array;
562
+
563
+ }
564
+
565
+ function saswp_add_new_step_output_bottom_dots(){
566
+ global $saswp_add_data_type_config;
567
+ ?>
568
+ <ol class="dots">
569
+
570
+ <?php for( $i = 1; $i<$saswp_add_data_type_config['total_steps']; $i++ ) :
571
+
572
+ $class_attr = '';
573
+ $show_link = false;
574
+
575
+ if ( $i === $saswp_add_data_type_config['current_step']['step_id'] ) {
576
+ $class_attr = 'active';
577
+ } elseif ( $saswp_add_data_type_config['current_step']['step_id'] > $i) {
578
+ $class_attr = 'done';
579
+ $show_link = true;
580
+ } ?>
581
+
582
+ <li class="<?php echo esc_attr( $class_attr ); ?>">
583
+ <a href="<?php echo esc_url( add_query_arg( 'step', $i ) ); ?>" title="<?php echo esc_attr( $saswp_add_data_type_config['current_step']['title'] ); ?>"></a>
584
+ </li>
585
+
586
+ <?php endfor; ?>
587
+
588
+ </ol>
589
+ <?php
590
+ }
591
+
592
+
593
+ function saswp_add_new_schema_type_selection(){
594
+
595
+ }
596
+ function saswp_add_new_placement_selection(){
597
+
598
+ }
599
+
600
+
601
+ ?>
admin_section/ajax-selectbox.php CHANGED
@@ -1,297 +1,304 @@
1
- <?php
2
- add_action('wp_ajax_create_ajax_select_sdwp','saswp_ajax_select_creator');
3
- function saswp_ajax_select_creator($data = '', $saved_data= '', $current_number = '') {
4
-
5
- $response = $data;
6
- $is_ajax = false;
7
- if( $_SERVER['REQUEST_METHOD']=='POST'){
8
- $is_ajax = true;
9
- if(wp_verify_nonce($_POST["saswp_call_nonce"],'saswp_select_action_nonce')){
10
-
11
- if ( isset( $_POST["id"] ) ) {
12
- $response = sanitize_text_field(wp_unslash($_POST["id"]));
13
- }
14
- if ( isset( $_POST["number"] ) ) {
15
- $current_number = intval($_POST["number"]);
16
- }
17
- }else{
18
- exit;
19
- }
20
-
21
- }
22
- // send the response back to the front end
23
- // vars
24
- $choices = array();
25
-
26
- $options['param'] = $response;
27
- // some case's have the same outcome
28
- if($options['param'] == "page_parent")
29
- {
30
- $options['param'] = "page";
31
- }
32
-
33
- switch($options['param'])
34
- {
35
- case "post_type":
36
-
37
- $choices = saswp_post_type_generator();
38
-
39
- $choices = apply_filters('saswp_modify_select_post_type', $choices );
40
- break;
41
-
42
- case "page":
43
-
44
- $post_type = 'page';
45
- $posts = get_posts(array(
46
- 'posts_per_page' => -1,
47
- 'post_type' => $post_type,
48
- 'orderby' => 'menu_order title',
49
- 'order' => 'ASC',
50
- 'post_status' => 'any',
51
- 'suppress_filters' => false,
52
- 'update_post_meta_cache' => false,
53
- ));
54
-
55
- if( $posts )
56
- {
57
- // sort into hierachial order!
58
- if( is_post_type_hierarchical( $post_type ) )
59
- {
60
- $posts = get_page_children( 0, $posts );
61
- }
62
-
63
- foreach( $posts as $page )
64
- {
65
- $title = '';
66
- $ancestors = get_ancestors($page->ID, 'page');
67
- if($ancestors)
68
- {
69
- foreach($ancestors as $a)
70
- {
71
- $title .= '- ';
72
- }
73
- }
74
-
75
- $title .= apply_filters( 'the_title', $page->post_title, $page->ID );
76
- // status
77
- if($page->post_status != "publish")
78
- {
79
- $title .= " ($page->post_status)";
80
- }
81
-
82
- $choices[ $page->ID ] = $title;
83
-
84
- }
85
- // foreach($pages as $page)
86
-
87
- }
88
-
89
- break;
90
-
91
- case "page_template" :
92
-
93
- $choices = array(
94
- 'default' => esc_html__('Default Template','schema-and-structured-data-for-wp'),
95
- );
96
-
97
- $templates = get_page_templates();
98
- foreach($templates as $k => $v)
99
- {
100
- $choices[$v] = $k;
101
- }
102
-
103
- break;
104
-
105
- case "post" :
106
-
107
- $post_types = get_post_types();
108
-
109
- unset( $post_types['page'], $post_types['attachment'], $post_types['revision'] , $post_types['nav_menu_item'], $post_types['acf'] , $post_types['amp_acf'] );
110
-
111
- if( $post_types )
112
- {
113
- foreach( $post_types as $post_type )
114
- {
115
-
116
- $posts = get_posts(array(
117
- 'numberposts' => '-1',
118
- 'post_type' => $post_type,
119
- 'post_status' => array('publish', 'private', 'draft', 'inherit', 'future'),
120
- 'suppress_filters' => false,
121
- ));
122
-
123
- if( $posts)
124
- {
125
- $choices[$post_type] = array();
126
-
127
- foreach($posts as $post)
128
- {
129
- $title = apply_filters( 'the_title', $post->post_title, $post->ID );
130
-
131
- // status
132
- if($post->post_status != "publish")
133
- {
134
- $title .= " ($post->post_status)";
135
- }
136
-
137
- $choices[$post_type][$post->ID] = $title;
138
-
139
- }
140
- // foreach($posts as $post)
141
- }
142
- // if( $posts )
143
- }
144
- // foreach( $post_types as $post_type )
145
- }
146
- // if( $post_types )
147
-
148
-
149
- break;
150
-
151
- case "post_category" :
152
-
153
- $terms = get_terms( 'category', array( 'hide_empty' => false ) );
154
-
155
- if( !empty($terms) ) {
156
-
157
- foreach( $terms as $term ) {
158
-
159
- $choices[ $term->term_id ] = $term->name;
160
-
161
- }
162
-
163
- }
164
-
165
- break;
166
-
167
- case "post_format" :
168
-
169
- $choices = get_post_format_strings();
170
-
171
- break;
172
-
173
- case "user_type" :
174
- global $wp_roles;
175
- $choices = $wp_roles->get_names();
176
-
177
- if( is_multisite() )
178
- {
179
- $choices['super_admin'] = esc_html__('Super Admin','schema-and-structured-data-for-wp');
180
- }
181
-
182
- break;
183
-
184
- case "ef_taxonomy" :
185
-
186
- $choices = array('all' => esc_html__('All','schema-and-structured-data-for-wp'));
187
- $taxonomies = saswp_post_taxonomy_generator();
188
- $choices = array_merge($choices, $taxonomies);
189
- break;
190
-
191
- }
192
- // allow custom location rules
193
- $choices = $choices;
194
-
195
- // Add None if no elements found in the current selected items
196
- if ( empty( $choices) ) {
197
- $choices = array('none' => esc_html__('No Items', 'schema-and-structured-data-for-wp') );
198
- }
199
- // echo $current_number;
200
- // echo $saved_data;
201
-
202
- $output = '<select class="widefat ajax-output" name="data_array['. esc_attr($current_number) .'][key_3]">';
203
-
204
- // Generate Options for Posts
205
- if ( $options['param'] == 'post' ) {
206
- foreach ($choices as $choice_post_type) {
207
- foreach ($choice_post_type as $key => $value) {
208
- if ( $saved_data == $key ) {
209
- $selected = 'selected="selected"';
210
- } else {
211
- $selected = '';
212
- }
213
-
214
- $output .= '<option '. esc_attr($selected) .' value="' . esc_attr($key) .'"> ' . esc_html__($value, 'schema-and-structured-data-for-wp') .' </option>';
215
- }
216
- }
217
- // Options for Other then posts
218
- } else {
219
- foreach ($choices as $key => $value) {
220
- if ( $saved_data == $key ) {
221
- $selected = 'selected="selected"';
222
- } else {
223
- $selected = '';
224
- }
225
-
226
- $output .= '<option '. esc_attr($selected) .' value="' . esc_attr($key) .'"> ' . esc_html__($value, 'schema-and-structured-data-for-wp') .' </option>';
227
- }
228
- }
229
- $output .= ' </select> ';
230
- $allowed_html = saswp_expanded_allowed_tags();
231
- echo wp_kses($output, $allowed_html);
232
-
233
- if ( $is_ajax ) {
234
- die();
235
- }
236
- // endif;
237
-
238
- }
239
- // Generate Proper Post Taxonomy for select and to add data.
240
- function saswp_post_taxonomy_generator(){
241
- $taxonomies = '';
242
- $choices = array();
243
- $taxonomies = get_taxonomies( array('public' => true), 'objects' );
244
-
245
-
246
- foreach($taxonomies as $taxonomy) {
247
- $choices[ $taxonomy->name ] = $taxonomy->labels->name;
248
- }
249
-
250
- // unset post_format (why is this a public taxonomy?)
251
- if( isset($choices['post_format']) ) {
252
- unset( $choices['post_format']) ;
253
- }
254
-
255
- return $choices;
256
- }
257
- add_action('wp_ajax_create_ajax_select_sdwp_taxonomy','saswp_create_ajax_select_taxonomy');
258
-
259
- function saswp_create_ajax_select_taxonomy($selectedParentValue = '',$selectedValue='', $current_number =''){
260
- $is_ajax = false;
261
- if( $_SERVER['REQUEST_METHOD']=='POST'){
262
- $is_ajax = true;
263
- if(wp_verify_nonce($_POST["saswp_call_nonce"],'saswp_select_action_nonce')){
264
- if(isset($_POST['id'])){
265
- $selectedParentValue = sanitize_text_field(wp_unslash($_POST['id']));
266
- }
267
- if(isset($_POST['number'])){
268
- $current_number = intval($_POST['number']);
269
- }
270
- }else{
271
- exit;
272
- }
273
- }
274
- $taxonomies = array();
275
- if($selectedParentValue == 'all'){
276
- $taxonomies = get_terms( array(
277
- 'hide_empty' => true,
278
- ) );
279
- }else{
280
- $taxonomies = get_terms($selectedParentValue, array(
281
- 'hide_empty' => true,
282
- ) );
283
- }
284
- $choices = '<option value="all">'.esc_html__('All','schema-and-structured-data-for-wp').'</option>';
285
- foreach($taxonomies as $taxonomy) {
286
- $sel="";
287
- if($selectedValue == $taxonomy->slug){
288
- $sel = "selected";
289
- }
290
- $choices .= '<option value="'.esc_attr($taxonomy->slug).'" '.esc_attr($sel).'>'.esc_html__($taxonomy->name,'schema-and-structured-data-for-wp').'</option>';
291
- }
292
- $allowed_html = saswp_expanded_allowed_tags();
293
- echo '<select class="widefat ajax-output-child" name="data_array['. esc_attr($current_number) .'][key_4]">'. wp_kses($choices, $allowed_html).'</select>';
294
- if($is_ajax){
295
- die;
296
- }
 
 
 
 
 
 
 
297
  }
1
+ <?php
2
+ add_action('wp_ajax_create_ajax_select_sdwp','saswp_ajax_select_creator');
3
+ function saswp_ajax_select_creator($data = '', $saved_data= '', $current_number = '', $current_group_number ='') {
4
+
5
+ $response = $data;
6
+ $is_ajax = false;
7
+ if( $_SERVER['REQUEST_METHOD']=='POST'){
8
+ $is_ajax = true;
9
+ if(wp_verify_nonce($_POST["saswp_call_nonce"],'saswp_select_action_nonce')){
10
+
11
+ if ( isset( $_POST["id"] ) ) {
12
+ $response = sanitize_text_field(wp_unslash($_POST["id"]));
13
+ }
14
+ if ( isset( $_POST["number"] ) ) {
15
+ $current_number = intval($_POST["number"]);
16
+ }
17
+ if ( isset( $_POST["group_number"] ) ) {
18
+ $current_group_number = intval($_POST["group_number"]);
19
+ }
20
+ }else{
21
+ exit;
22
+ }
23
+
24
+ }
25
+ // send the response back to the front end
26
+ // vars
27
+ $choices = array();
28
+
29
+ $options['param'] = $response;
30
+ // some case's have the same outcome
31
+ if($options['param'] == "page_parent")
32
+ {
33
+ $options['param'] = "page";
34
+ }
35
+
36
+ switch($options['param'])
37
+ {
38
+ case "post_type":
39
+
40
+ $choices = saswp_post_type_generator();
41
+
42
+ $choices = apply_filters('saswp_modify_select_post_type', $choices );
43
+ unset($choices['saswp']);
44
+ break;
45
+
46
+ case "page":
47
+
48
+ $post_type = 'page';
49
+ $posts = get_posts(array(
50
+ 'posts_per_page' => -1,
51
+ 'post_type' => $post_type,
52
+ 'orderby' => 'menu_order title',
53
+ 'order' => 'ASC',
54
+ 'post_status' => 'any',
55
+ 'suppress_filters' => false,
56
+ 'update_post_meta_cache' => false,
57
+ ));
58
+
59
+ if( $posts )
60
+ {
61
+ // sort into hierachial order!
62
+ if( is_post_type_hierarchical( $post_type ) )
63
+ {
64
+ $posts = get_page_children( 0, $posts );
65
+ }
66
+
67
+ foreach( $posts as $page )
68
+ {
69
+ $title = '';
70
+ $ancestors = get_ancestors($page->ID, 'page');
71
+ if($ancestors)
72
+ {
73
+ foreach($ancestors as $a)
74
+ {
75
+ $title .= '- ';
76
+ }
77
+ }
78
+
79
+ $title .= apply_filters( 'the_title', $page->post_title, $page->ID );
80
+ // status
81
+ if($page->post_status != "publish")
82
+ {
83
+ $title .= " ($page->post_status)";
84
+ }
85
+
86
+ $choices[ $page->ID ] = $title;
87
+
88
+ }
89
+ // foreach($pages as $page)
90
+
91
+ }
92
+
93
+ break;
94
+
95
+ case "page_template" :
96
+
97
+ $choices = array(
98
+ 'default' => esc_html__('Default Template','schema-and-structured-data-for-wp'),
99
+ );
100
+
101
+ $templates = get_page_templates();
102
+ foreach($templates as $k => $v)
103
+ {
104
+ $choices[$v] = $k;
105
+ }
106
+
107
+ break;
108
+
109
+ case "post" :
110
+
111
+ $post_types = get_post_types();
112
+
113
+ unset( $post_types['page'], $post_types['attachment'], $post_types['revision'] , $post_types['nav_menu_item'], $post_types['acf'] , $post_types['amp_acf'],$post_types['saswp'] );
114
+
115
+ if( $post_types )
116
+ {
117
+ foreach( $post_types as $post_type )
118
+ {
119
+
120
+ $posts = get_posts(array(
121
+ 'numberposts' => '-1',
122
+ 'post_type' => $post_type,
123
+ 'post_status' => array('publish', 'private', 'draft', 'inherit', 'future'),
124
+ 'suppress_filters' => false,
125
+ ));
126
+
127
+ if( $posts)
128
+ {
129
+ $choices[$post_type] = array();
130
+
131
+ foreach($posts as $post)
132
+ {
133
+ $title = apply_filters( 'the_title', $post->post_title, $post->ID );
134
+
135
+ // status
136
+ if($post->post_status != "publish")
137
+ {
138
+ $title .= " ($post->post_status)";
139
+ }
140
+
141
+ $choices[$post_type][$post->ID] = $title;
142
+
143
+ }
144
+ // foreach($posts as $post)
145
+ }
146
+ // if( $posts )
147
+ }
148
+ // foreach( $post_types as $post_type )
149
+ }
150
+ // if( $post_types )
151
+
152
+
153
+ break;
154
+
155
+ case "post_category" :
156
+
157
+ $terms = get_terms( 'category', array( 'hide_empty' => false ) );
158
+
159
+ if( !empty($terms) ) {
160
+
161
+ foreach( $terms as $term ) {
162
+
163
+ $choices[ $term->term_id ] = $term->name;
164
+
165
+ }
166
+
167
+ }
168
+
169
+ break;
170
+
171
+ case "post_format" :
172
+
173
+ $choices = get_post_format_strings();
174
+
175
+ break;
176
+
177
+ case "user_type" :
178
+ global $wp_roles;
179
+ $choices = $wp_roles->get_names();
180
+
181
+ if( is_multisite() )
182
+ {
183
+ $choices['super_admin'] = esc_html__('Super Admin','schema-and-structured-data-for-wp');
184
+ }
185
+
186
+ break;
187
+
188
+ case "ef_taxonomy" :
189
+
190
+ $choices = array('all' => esc_html__('All','schema-and-structured-data-for-wp'));
191
+ $taxonomies = saswp_post_taxonomy_generator();
192
+ $choices = array_merge($choices, $taxonomies);
193
+ break;
194
+
195
+ }
196
+ // allow custom location rules
197
+ $choices = $choices;
198
+
199
+ // Add None if no elements found in the current selected items
200
+ if ( empty( $choices) ) {
201
+ $choices = array('none' => esc_html__('No Items', 'schema-and-structured-data-for-wp') );
202
+ }
203
+ // echo $current_number;
204
+ // echo $saved_data;
205
+
206
+ $output = '<select class="widefat ajax-output" name="data_group_array[group-'.esc_attr($current_group_number).'][data_array]['. esc_attr($current_number) .'][key_3]">';
207
+
208
+ // Generate Options for Posts
209
+ if ( $options['param'] == 'post' ) {
210
+ foreach ($choices as $choice_post_type) {
211
+ foreach ($choice_post_type as $key => $value) {
212
+ if ( $saved_data == $key ) {
213
+ $selected = 'selected="selected"';
214
+ } else {
215
+ $selected = '';
216
+ }
217
+
218
+ $output .= '<option '. esc_attr($selected) .' value="' . esc_attr($key) .'"> ' . esc_html__($value, 'schema-and-structured-data-for-wp') .' </option>';
219
+ }
220
+ }
221
+ // Options for Other then posts
222
+ } else {
223
+ foreach ($choices as $key => $value) {
224
+ if ( $saved_data == $key ) {
225
+ $selected = 'selected="selected"';
226
+ } else {
227
+ $selected = '';
228
+ }
229
+
230
+ $output .= '<option '. esc_attr($selected) .' value="' . esc_attr($key) .'"> ' . esc_html__($value, 'schema-and-structured-data-for-wp') .' </option>';
231
+ }
232
+ }
233
+ $output .= ' </select> ';
234
+ $allowed_html = saswp_expanded_allowed_tags();
235
+ echo wp_kses($output, $allowed_html);
236
+
237
+ if ( $is_ajax ) {
238
+ die();
239
+ }
240
+ // endif;
241
+
242
+ }
243
+ // Generate Proper Post Taxonomy for select and to add data.
244
+ function saswp_post_taxonomy_generator(){
245
+ $taxonomies = '';
246
+ $choices = array();
247
+ $taxonomies = get_taxonomies( array('public' => true), 'objects' );
248
+
249
+
250
+ foreach($taxonomies as $taxonomy) {
251
+ $choices[ $taxonomy->name ] = $taxonomy->labels->name;
252
+ }
253
+
254
+ // unset post_format (why is this a public taxonomy?)
255
+ if( isset($choices['post_format']) ) {
256
+ unset( $choices['post_format']) ;
257
+ }
258
+
259
+ return $choices;
260
+ }
261
+ add_action('wp_ajax_create_ajax_select_sdwp_taxonomy','saswp_create_ajax_select_taxonomy');
262
+
263
+ function saswp_create_ajax_select_taxonomy($selectedParentValue = '',$selectedValue='', $current_number ='', $current_group_number = ''){
264
+ $is_ajax = false;
265
+ if( $_SERVER['REQUEST_METHOD']=='POST'){
266
+ $is_ajax = true;
267
+ if(wp_verify_nonce($_POST["saswp_call_nonce"],'saswp_select_action_nonce')){
268
+ if(isset($_POST['id'])){
269
+ $selectedParentValue = sanitize_text_field(wp_unslash($_POST['id']));
270
+ }
271
+ if(isset($_POST['number'])){
272
+ $current_number = intval($_POST['number']);
273
+ }
274
+ if ( isset( $_POST["group_number"] ) ) {
275
+ $current_group_number = intval($_POST["group_number"]);
276
+ }
277
+ }else{
278
+ exit;
279
+ }
280
+ }
281
+ $taxonomies = array();
282
+ if($selectedParentValue == 'all'){
283
+ $taxonomies = get_terms( array(
284
+ 'hide_empty' => true,
285
+ ) );
286
+ }else{
287
+ $taxonomies = get_terms($selectedParentValue, array(
288
+ 'hide_empty' => true,
289
+ ) );
290
+ }
291
+ $choices = '<option value="all">'.esc_html__('All','schema-and-structured-data-for-wp').'</option>';
292
+ foreach($taxonomies as $taxonomy) {
293
+ $sel="";
294
+ if($selectedValue == $taxonomy->slug){
295
+ $sel = "selected";
296
+ }
297
+ $choices .= '<option value="'.esc_attr($taxonomy->slug).'" '.esc_attr($sel).'>'.esc_html__($taxonomy->name,'schema-and-structured-data-for-wp').'</option>';
298
+ }
299
+ $allowed_html = saswp_expanded_allowed_tags();
300
+ echo '<select class="widefat ajax-output-child" name="data_group_array[group-'. esc_attr($current_group_number) .'][data_array]['.esc_attr($current_number).'][key_4]">'. wp_kses($choices, $allowed_html).'</select>';
301
+ if($is_ajax){
302
+ die;
303
+ }
304
  }
admin_section/common-function.php CHANGED
@@ -1,154 +1,404 @@
1
- <?php
2
- //Function to expand html tags form allowed html tags in wordpress
3
- function saswp_expanded_allowed_tags() {
4
- $my_allowed = wp_kses_allowed_html( 'post' );
5
- // form fields - input
6
- $my_allowed['input'] = array(
7
- 'class' => array(),
8
- 'id' => array(),
9
- 'name' => array(),
10
- 'value' => array(),
11
- 'type' => array(),
12
- 'style' => array(),
13
- 'placeholder' => array(),
14
- 'maxlength' => array(),
15
- 'checked' => array(),
16
- 'readonly' => array(),
17
- 'disabled' => array(),
18
- 'width' => array(),
19
- 'data-id' => array()
20
- );
21
- $my_allowed['hidden'] = array(
22
- 'id' => array(),
23
- 'name' => array(),
24
- 'value' => array(),
25
- 'type' => array(),
26
- 'data-id' => array(),
27
- );
28
- //number
29
- $my_allowed['number'] = array(
30
- 'class' => array(),
31
- 'id' => array(),
32
- 'name' => array(),
33
- 'value' => array(),
34
- 'type' => array(),
35
- 'style' => array(),
36
- 'width' => array(),
37
- );
38
- //textarea
39
- $my_allowed['textarea'] = array(
40
- 'class' => array(),
41
- 'id' => array(),
42
- 'name' => array(),
43
- 'value' => array(),
44
- 'type' => array(),
45
- 'style' => array(),
46
- 'rows' => array(),
47
- );
48
- // select
49
- $my_allowed['select'] = array(
50
- 'class' => array(),
51
- 'id' => array(),
52
- 'name' => array(),
53
- 'value' => array(),
54
- 'type' => array(),
55
- );
56
- // checkbox
57
- $my_allowed['checkbox'] = array(
58
- 'class' => array(),
59
- 'id' => array(),
60
- 'name' => array(),
61
- 'value' => array(),
62
- 'type' => array(),
63
- );
64
- // options
65
- $my_allowed['option'] = array(
66
- 'selected' => array(),
67
- 'value' => array(),
68
- );
69
- // style
70
- $my_allowed['style'] = array(
71
- 'types' => array(),
72
- );
73
- return $my_allowed;
74
- }
75
- function saswp_admin_link($tab = '', $args = array()){
76
-
77
- $page = 'structured_data_options';
78
- if ( ! is_multisite() ) {
79
- $link = admin_url( 'admin.php?page=' . $page );
80
- }
81
- else {
82
- $link = network_admin_url( 'admin.php?page=' . $page );
83
- }
84
-
85
- if ( $tab ) {
86
- $link .= '&tab=' . $tab;
87
- }
88
-
89
- if ( $args ) {
90
- foreach ( $args as $arg => $value ) {
91
- $link .= '&' . $arg . '=' . urlencode( $value );
92
- }
93
- }
94
-
95
- return esc_url($link);
96
- }
97
- function saswp_get_tab( $default = '', $available = array() ) {
98
-
99
- $tab = isset( $_GET['tab'] ) ? sanitize_text_field(wp_unslash($_GET['tab'])) : $default;
100
- if ( ! in_array( $tab, $available ) ) {
101
- $tab = $default;
102
- }
103
-
104
- return $tab;
105
- }
106
-
107
- add_action('plugins_loaded', 'saswp_defaultSettings' );
108
-
109
- $sd_data=array();
110
- function saswp_defaultSettings(){
111
- global $sd_data;
112
- $current_user = wp_get_current_user();
113
- $current_url = get_home_url();
114
- $custom_logo_id = get_theme_mod( 'custom_logo' );
115
- $logo = wp_get_attachment_image_src( $custom_logo_id , 'full' );
116
- $defaults = array(
117
- 'saswp-for-amp' => 1,
118
- 'saswp-for-wordpress'=>1,
119
- 'saswp_kb_type' => 'Organization',
120
- 'saswp_kb_contact_1' => 0,
121
- 'sd_name' => $current_user->user_login,
122
- 'sd_alt_name' => $current_user->user_login,
123
- 'sd-person-name' => $current_user->user_nicename,
124
- 'sd-person-url' => $current_url,
125
- 'saswp-logo-width' => '600',
126
- 'saswp-logo-height' => '60',
127
- 'sd_logo' => array(
128
- 'url'=>$logo[0],
129
- 'id'=>$custom_logo_id,
130
- 'height'=>$logo[2],
131
- 'width'=>$logo[1],
132
- 'thumbnail'=>$logo[0]
133
- ),
134
- 'sd-data-logo-ampforwp' => array(
135
- 'url'=>$logo[0],
136
- 'id'=>$custom_logo_id,
137
- 'height'=>$logo[2],
138
- 'width'=>$logo[1],
139
- 'thumbnail'=>$logo[0]
140
- ),
141
- 'sd_default_image' => array(
142
- 'url'=>$logo[0],
143
- 'id'=>$custom_logo_id,
144
- 'height'=>$logo[2],
145
- 'width'=>$logo[1],
146
- 'thumbnail'=>$logo[0]
147
- ),
148
- 'sd_default_image_width' =>$logo[1],
149
- 'sd_default_image_height' =>$logo[2]
150
-
151
- );
152
- $sd_data = $settings = get_option( 'sd_data', $defaults);
153
- return $settings;
154
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * We are here fetching all schema and its settings from schema plugin
5
+ * note: Transaction is applied on this function, if any error occure all the data will be rollbacked
6
+ * @global type $wpdb
7
+ * @return boolean
8
+ */
9
+ function saswp_import_schema_plugin_data(){
10
+
11
+ $schema_post = array();
12
+ global $wpdb;
13
+ $user_id = get_current_user_id();
14
+ $all_schema_post = get_posts(
15
+ array(
16
+ 'post_type' => 'schema',
17
+ 'posts_per_page' => -1,
18
+ 'post_status' => 'any',
19
+ )
20
+ );
21
+ if($all_schema_post){
22
+ // begin transaction
23
+ $wpdb->query('START TRANSACTION');
24
+ foreach($all_schema_post as $schema){
25
+
26
+ $schema_post = array(
27
+ 'post_author' => $user_id,
28
+ 'post_date' => $schema->post_date,
29
+ 'post_date_gmt' => $schema->post_date_gmt,
30
+ 'post_content' => $schema->post_content,
31
+ 'post_title' => $schema->post_title. ' (Migrated from Schema plugin)',
32
+ 'post_excerpt' => $schema->post_excerpt,
33
+ 'post_status' => $schema->post_status,
34
+ 'comment_status' => $schema->comment_status,
35
+ 'ping_status' => $schema->ping_status,
36
+ 'post_password' => $schema->post_password,
37
+ 'post_name' => $schema->post_name,
38
+ 'to_ping' => $schema->to_ping,
39
+ 'pinged' => $schema->pinged,
40
+ 'post_modified' => $schema->post_modified,
41
+ 'post_modified_gmt' => $schema->post_modified_gmt,
42
+ 'post_content_filtered' => $schema->post_content_filtered,
43
+ 'post_parent' => $schema->post_parent,
44
+ 'menu_order' => $schema->menu_order,
45
+ 'post_type' => 'saswp',
46
+ 'post_mime_type' => $schema->post_mime_type,
47
+ 'comment_count' => $schema->comment_count,
48
+ 'filter' => $schema->filter,
49
+ );
50
+ $post_id = wp_insert_post($schema_post);
51
+ $result = $post_id;
52
+ $guid = get_option('siteurl') .'/?post_type=saswp&p='.$post_id;
53
+ $wpdb->get_results("UPDATE wp_posts SET guid ='".$guid."' WHERE ID ='".$post_id."'");
54
+
55
+ $schema_post_meta = get_post_meta($schema->ID, $key='', true );
56
+ $schema_post_types = get_post_meta($schema->ID, $key='_schema_post_types', true );
57
+ $schema_post_meta_box = get_post_meta($schema->ID, $key='_schema_post_meta_box', true );
58
+
59
+ $data_group_array = array();
60
+ if($schema_post_types){
61
+
62
+ $i=0;
63
+ foreach ($schema_post_types as $post_type){
64
+
65
+ $data_group_array['group-'.$i] =array(
66
+ 'data_array' => array(
67
+ array(
68
+ 'key_1' => 'post_type',
69
+ 'key_2' => 'equal',
70
+ 'key_3' => $post_type,
71
+ )
72
+ )
73
+ );
74
+ $i++;
75
+
76
+ }
77
+ }
78
+ $schema_type ='';
79
+ $schema_article_type ='';
80
+
81
+ if(isset($schema_post_meta['_schema_type'])){
82
+ $schema_type = $schema_post_meta['_schema_type'];
83
+ }
84
+ if(isset($schema_post_meta['_schema_article_type'])){
85
+ $schema_article_type = $schema_post_meta['_schema_article_type'][0];
86
+ }
87
+ $saswp_meta_key = array(
88
+ 'schema_type' => $schema_article_type,
89
+ 'data_group_array'=>$data_group_array,
90
+ 'imported_from' => 'schema'
91
+ );
92
+
93
+ foreach ($saswp_meta_key as $key => $val){
94
+ update_post_meta($post_id, $key, $val);
95
+ }
96
+ }
97
+
98
+ //Importing settings starts here
99
+
100
+
101
+ $schema_plugin_options = get_option('schema_wp_settings');
102
+ $custom_logo_id = get_theme_mod( 'custom_logo' );
103
+ $logo = wp_get_attachment_image_src( $custom_logo_id , 'full' );
104
+
105
+ $saswp_plugin_options = array(
106
+ 'sd_logo' => array(
107
+ 'url' =>$schema_plugin_options['logo'],
108
+ 'id' =>$custom_logo_id,
109
+ 'height' =>'600',
110
+ 'width' =>'60',
111
+ 'thumbnail' =>$schema_plugin_options['logo']
112
+ ),
113
+ 'saswp_kb_contact_1'=> 0,
114
+ //AMP Block
115
+ 'saswp-for-amp' => 1,
116
+ 'saswp-for-wordpress'=>1,
117
+ 'saswp-logo-width' => '60',
118
+ 'saswp-logo-height' => '60',
119
+ 'sd_initial_wizard_status' =>1,
120
+
121
+ );
122
+
123
+ if(isset($schema_plugin_options['facebook'])){
124
+ $saswp_plugin_options['sd_facebook'] = $schema_plugin_options['facebook'];
125
+ $saswp_plugin_options['saswp-facebook-enable'] = 1;
126
+ }
127
+ if(isset($schema_plugin_options['twitter'])){
128
+ $saswp_plugin_options['sd_twitter'] = $schema_plugin_options['twitter'];
129
+ $saswp_plugin_options['saswp-twitter-enable'] = 1;
130
+ }
131
+ if(isset($schema_plugin_options['google'])){
132
+ $saswp_plugin_options['sd_google_plus'] = $schema_plugin_options['google'];
133
+ $saswp_plugin_options['saswp-google-plus-enable'] = 1;
134
+ }
135
+ if(isset($schema_plugin_options['instagram'])){
136
+ $saswp_plugin_options['sd_instagram'] = $schema_plugin_options['instagram'];
137
+ $saswp_plugin_options['saswp-instagram-enable'] = 1;
138
+ }
139
+ if(isset($schema_plugin_options['youtube'])){
140
+ $saswp_plugin_options['sd_youtube'] = $schema_plugin_options['youtube'];
141
+ $saswp_plugin_options['saswp-youtube-enable'] = 1;
142
+ }
143
+ if(isset($schema_plugin_options['linkedin'])){
144
+ $saswp_plugin_options['sd_linkedin'] = $schema_plugin_options['linkedin'];
145
+ $saswp_plugin_options['saswp-linkedin-enable'] = 1;
146
+ }
147
+ if(isset($schema_plugin_options['pinterest'])){
148
+ $saswp_plugin_options['sd_pinterest'] = $schema_plugin_options['pinterest'];
149
+ $saswp_plugin_options['saswp-pinterest-enable'] = 1;
150
+ }
151
+ if(isset($schema_plugin_options['soundcloud'])){
152
+ $saswp_plugin_options['sd_soundcloud'] = $schema_plugin_options['soundcloud'];
153
+ $saswp_plugin_options['saswp-soundcloud-enable'] = 1;
154
+ }
155
+ if(isset($schema_plugin_options['tumblr'])){
156
+ $saswp_plugin_options['sd_tumblr'] = $schema_plugin_options['tumblr'];
157
+ $saswp_plugin_options['saswp-tumblr-enable'] = 1;
158
+ }
159
+ if(isset($schema_plugin_options['organization_or_person'])){
160
+
161
+ $saswp_plugin_options['saswp_kb_type'] = ucfirst($schema_plugin_options['organization_or_person']);
162
+ $saswp_plugin_options['sd_name'] = $schema_plugin_options['name'];
163
+ $saswp_plugin_options['sd-person-name'] = $schema_plugin_options['name'];
164
+ }
165
+ if(isset($schema_plugin_options['about_page'])){
166
+ $saswp_plugin_options['sd_about_page'] = $schema_plugin_options['about_page'];
167
+ }
168
+ if(isset($schema_plugin_options['contact_page'])){
169
+ $saswp_plugin_options['sd_contact_page'] = $schema_plugin_options['contact_page'];
170
+ }
171
+ if(isset($schema_plugin_options['site_name'])){
172
+
173
+ }
174
+ if(isset($schema_plugin_options['site_alternate_name'])){
175
+ $saswp_plugin_options['sd_alt_name'] = $schema_plugin_options['site_alternate_name'];
176
+ }
177
+ if(isset($schema_plugin_options['url'])){
178
+ $saswp_plugin_options['sd_url'] = $schema_plugin_options['url'];
179
+ $saswp_plugin_options['sd-person-url'] = $schema_plugin_options['url'];
180
+ }
181
+ if(isset($schema_plugin_options['name'])){
182
+ $saswp_plugin_options['sd-person-name'] = $schema_plugin_options['name'];
183
+ }
184
+ if(isset($schema_plugin_options['corporate_contacts_telephone'])){
185
+ $saswp_plugin_options['saswp_kb_telephone'] = $schema_plugin_options['corporate_contacts_telephone'];
186
+ }
187
+ if(isset($schema_plugin_options['corporate_contacts_contact_type'])){
188
+ $saswp_plugin_options['saswp_contact_type'] = $schema_plugin_options['corporate_contacts_contact_type'];
189
+ }
190
+ if(isset($schema_plugin_options['breadcrumbs_enable'])){
191
+ $saswp_plugin_options['saswp_breadcrumb_schema'] = $schema_plugin_options['breadcrumbs_enable'];
192
+ }
193
+ update_option('sd_data', $saswp_plugin_options);
194
+ //Importing settings ends here
195
+
196
+ if (is_wp_error($result) ){
197
+ echo $result->get_error_message();
198
+ $wpdb->query('ROLLBACK');
199
+ }else{
200
+ $wpdb->query('COMMIT');
201
+ return true;
202
+ }
203
+ }
204
+
205
+ }
206
+
207
+
208
+ //Function to expand html tags form allowed html tags in wordpress
209
+ function saswp_expanded_allowed_tags() {
210
+ $my_allowed = wp_kses_allowed_html( 'post' );
211
+ // form fields - input
212
+ $my_allowed['input'] = array(
213
+ 'class' => array(),
214
+ 'id' => array(),
215
+ 'name' => array(),
216
+ 'value' => array(),
217
+ 'type' => array(),
218
+ 'style' => array(),
219
+ 'placeholder' => array(),
220
+ 'maxlength' => array(),
221
+ 'checked' => array(),
222
+ 'readonly' => array(),
223
+ 'disabled' => array(),
224
+ 'width' => array(),
225
+ 'data-id' => array()
226
+ );
227
+ $my_allowed['hidden'] = array(
228
+ 'id' => array(),
229
+ 'name' => array(),
230
+ 'value' => array(),
231
+ 'type' => array(),
232
+ 'data-id' => array(),
233
+ );
234
+ //number
235
+ $my_allowed['number'] = array(
236
+ 'class' => array(),
237
+ 'id' => array(),
238
+ 'name' => array(),
239
+ 'value' => array(),
240
+ 'type' => array(),
241
+ 'style' => array(),
242
+ 'width' => array(),
243
+ );
244
+ //textarea
245
+ $my_allowed['textarea'] = array(
246
+ 'class' => array(),
247
+ 'id' => array(),
248
+ 'name' => array(),
249
+ 'value' => array(),
250
+ 'type' => array(),
251
+ 'style' => array(),
252
+ 'rows' => array(),
253
+ );
254
+ // select
255
+ $my_allowed['select'] = array(
256
+ 'class' => array(),
257
+ 'id' => array(),
258
+ 'name' => array(),
259
+ 'value' => array(),
260
+ 'type' => array(),
261
+ );
262
+ // checkbox
263
+ $my_allowed['checkbox'] = array(
264
+ 'class' => array(),
265
+ 'id' => array(),
266
+ 'name' => array(),
267
+ 'value' => array(),
268
+ 'type' => array(),
269
+ );
270
+ // options
271
+ $my_allowed['option'] = array(
272
+ 'selected' => array(),
273
+ 'value' => array(),
274
+ );
275
+ // style
276
+ $my_allowed['style'] = array(
277
+ 'types' => array(),
278
+ );
279
+ return $my_allowed;
280
+ }
281
+ function saswp_admin_link($tab = '', $args = array()){
282
+
283
+ $page = 'structured_data_options';
284
+ if ( ! is_multisite() ) {
285
+ $link = admin_url( 'admin.php?page=' . $page );
286
+ }
287
+ else {
288
+ $link = network_admin_url( 'admin.php?page=' . $page );
289
+ }
290
+
291
+ if ( $tab ) {
292
+ $link .= '&tab=' . $tab;
293
+ }
294
+
295
+ if ( $args ) {
296
+ foreach ( $args as $arg => $value ) {
297
+ $link .= '&' . $arg . '=' . urlencode( $value );
298
+ }
299
+ }
300
+
301
+ return esc_url($link);
302
+ }
303
+ function saswp_get_tab( $default = '', $available = array() ) {
304
+
305
+ $tab = isset( $_GET['tab'] ) ? sanitize_text_field(wp_unslash($_GET['tab'])) : $default;
306
+ if ( ! in_array( $tab, $available ) ) {
307
+ $tab = $default;
308
+ }
309
+
310
+ return $tab;
311
+ }
312
+
313
+ add_action('plugins_loaded', 'saswp_defaultSettings' );
314
+
315
+ $sd_data=array();
316
+ function saswp_defaultSettings(){
317
+ global $sd_data;
318
+ $sd_name = 'default';
319
+ $bloginfo = get_bloginfo('name', 'display');
320
+ if($bloginfo){
321
+ $sd_name =$bloginfo;
322
+ }
323
+ $current_url = get_home_url();
324
+ $custom_logo_id = get_theme_mod( 'custom_logo' );
325
+ $logo = wp_get_attachment_image_src( $custom_logo_id , 'full' );
326
+
327
+ $user_id = get_current_user_id();
328
+ $username = '';
329
+ if($user_id>0){
330
+ $user_info = get_userdata($user_id);
331
+ $username = $user_info->data->display_name;
332
+ }
333
+ $defaults = array(
334
+ //General Block
335
+ 'sd_about_page' => '',
336
+ 'sd_contact_page' => '',
337
+ //knowledge Block
338
+ 'saswp_kb_type' => 'Organization',
339
+ 'sd_name' => $sd_name,
340
+ 'sd_alt_name' => $sd_name,
341
+ 'sd_url' => $current_url,
342
+ 'sd_logo' => array(
343
+ 'url' =>$logo[0],
344
+ 'id' =>$custom_logo_id,
345
+ 'height' =>$logo[2],
346
+ 'width' =>$logo[1],
347
+ 'thumbnail' =>$logo[0]
348
+ ),
349
+ 'sd-person-name' => $username,
350
+ 'sd-person-job-title'=> '',
351
+ 'sd-person-url' => $current_url,
352
+ 'sd-person-image' => array(
353
+ 'url' =>'',
354
+ 'id' =>'',
355
+ 'height' =>'',
356
+ 'width' =>'',
357
+ 'thumbnail' =>'' ),
358
+ 'sd-person-phone-number'=> '',
359
+ 'saswp_kb_telephone'=> '',
360
+ 'saswp_contact_type'=> '',
361
+ 'saswp_kb_contact_1'=> 0,
362
+ //Social
363
+ 'sd_facebook'=> '',
364
+ 'sd_twitter'=> '',
365
+ 'sd_google_plus'=> '',
366
+ 'sd_instagram'=> '',
367
+ 'sd_youtube'=> '',
368
+ 'sd_linkedin'=> '',
369
+ 'sd_pinterest'=> '',
370
+ 'sd_soundcloud'=> '',
371
+ 'sd_tumblr'=> '',
372
+
373
+
374
+ 'sd-data-logo-ampforwp' => array(
375
+ 'url'=>$logo[0],
376
+ 'id'=>$custom_logo_id,
377
+ 'height'=>$logo[2],
378
+ 'width'=>$logo[1],
379
+ 'thumbnail'=>$logo[0]
380
+ ),
381
+
382
+ //AMP Block
383
+ 'saswp-for-amp' => 1,
384
+ 'saswp-for-wordpress'=>1,
385
+ 'saswp-logo-width' => '60',
386
+ 'saswp-logo-height' => '60',
387
+
388
+ 'sd_default_image' => array(
389
+ 'url'=>$logo[0],
390
+ 'id'=>$custom_logo_id,
391
+ 'height'=>$logo[2],
392
+ 'width'=>$logo[1],
393
+ 'thumbnail'=>$logo[0]
394
+ ),
395
+ 'sd_default_image_width' =>$logo[1],
396
+ 'sd_default_image_height' =>$logo[2],
397
+ 'sd_initial_wizard_status' =>1,
398
+
399
+
400
+
401
+ );
402
+ $sd_data = $settings = get_option( 'sd_data', $defaults);
403
+ return $settings;
404
+ }
admin_section/css/jquery.timepicker.css ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .ui-timepicker-wrapper {
2
+ overflow-y: auto;
3
+ max-height: 150px;
4
+ width: 6.5em;
5
+ background: #fff;
6
+ border: 1px solid #ddd;
7
+ -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);
8
+ -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);
9
+ box-shadow:0 5px 10px rgba(0,0,0,0.2);
10
+ outline: none;
11
+ z-index: 10052;
12
+ margin: 0;
13
+ }
14
+
15
+ .ui-timepicker-wrapper.ui-timepicker-with-duration {
16
+ width: 13em;
17
+ }
18
+
19
+ .ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-30,
20
+ .ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-60 {
21
+ width: 11em;
22
+ }
23
+
24
+ .ui-timepicker-list {
25
+ margin: 0;
26
+ padding: 0;
27
+ list-style: none;
28
+ }
29
+
30
+ .ui-timepicker-duration {
31
+ margin-left: 5px; color: #888;
32
+ }
33
+
34
+ .ui-timepicker-list:hover .ui-timepicker-duration {
35
+ color: #888;
36
+ }
37
+
38
+ .ui-timepicker-list li {
39
+ padding: 3px 0 3px 5px;
40
+ cursor: pointer;
41
+ white-space: nowrap;
42
+ color: #000;
43
+ list-style: none;
44
+ margin: 0;
45
+ }
46
+
47
+ .ui-timepicker-list:hover .ui-timepicker-selected {
48
+ background: #fff; color: #000;
49
+ }
50
+
51
+ li.ui-timepicker-selected,
52
+ .ui-timepicker-list li:hover,
53
+ .ui-timepicker-list .ui-timepicker-selected:hover {
54
+ background: #1980EC; color: #fff;
55
+ }
56
+
57
+ li.ui-timepicker-selected .ui-timepicker-duration,
58
+ .ui-timepicker-list li:hover .ui-timepicker-duration {
59
+ color: #ccc;
60
+ }
61
+
62
+ .ui-timepicker-list li.ui-timepicker-disabled,
63
+ .ui-timepicker-list li.ui-timepicker-disabled:hover,
64
+ .ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled {
65
+ color: #888;
66
+ cursor: default;
67
+ }
68
+
69
+ .ui-timepicker-list li.ui-timepicker-disabled:hover,
70
+ .ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled {
71
+ background: #f2f2f2;
72
+ }
admin_section/css/main-style.css CHANGED
@@ -1,98 +1,309 @@
1
- /*
2
- To change this license header, choose License Headers in Project Properties.
3
- To change this template file, choose Tools | Templates
4
- and open the template in the editor.
5
- */
6
- /*
7
- Created on : Jul 27, 2018, 5:36:26 PM
8
- Author : Magazine3
9
- */
10
- .saswp-general table th{
11
- width: auto;
12
- font-weight: 600;
13
- padding: 0px;
14
- }
15
- .saswp-general table{
16
- margin-top: 0px;
17
- }
18
- .saswp-general table td{
19
- padding: 5px;
20
- }
21
- .saswp-knowledge table th{
22
- width: auto;
23
- padding: 0px;
24
- }
25
- .saswp-knowledge table{
26
- margin-top: 0px;
27
- }
28
- .saswp-knowledge table td{
29
- padding: 5px;
30
- }
31
- .saswp-schema table th{
32
- width: auto;
33
- padding: 0px;
34
- }
35
- .saswp-schema table{
36
- margin-top: 0px;
37
- }
38
- .saswp-schema table td{
39
- padding: 5px;
40
- }
41
- .saswp-amp table th{
42
- width: auto;
43
- padding: 0px;
44
- }
45
- .saswp-amp table{
46
- margin-top: 0px;
47
- }
48
- .saswp-amp table td{
49
- padding: 5px;
50
- }
51
- .saswp-help table th{
52
- width: auto;
53
- padding: 0px;
54
- }
55
- .saswp-help table{
56
- margin-top: 0px;
57
- }
58
- .saswp-help table td{
59
- padding: 5px;
60
- }
61
- .saswp-settings-list{
62
- display:inline-block;
63
- width:100%
64
- }
65
- .saswp-settings-list li{
66
- padding:15px;
67
- padding-left:0px;
68
- }
69
- .saswp-settings-list li div label{
70
- font-weight: 600;
71
- }
72
- .saswp-general h2{
73
- margin-bottom: 0px;
74
- }
75
- .saswp-knowledge h2{
76
- margin-bottom: 0px;
77
- }
78
- .saswp-schema h2{
79
- margin-bottom: 0px;
80
- }
81
- .saswp-help h2{
82
- margin-bottom: 0px;
83
- }
84
- .saswp-settings-form p.submit{
85
- margin-top:0px;
86
- }
87
- .saswp_qanda_p{
88
- font-weight: 500;
89
- }
90
- .saswp-display-none{
91
- display: none !important;
92
- }
93
-
94
-
95
-
96
-
97
-
98
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ To change this license header, choose License Headers in Project Properties.
3
+ To change this template file, choose Tools | Templates
4
+ and open the template in the editor.
5
+ */
6
+ /*
7
+ Created on : Jul 27, 2018, 5:36:26 PM
8
+ Author : Magazine3
9
+ */
10
+ .saswp_hide{
11
+ display: none;
12
+ }
13
+ .saswp-general table th{
14
+ width: auto;
15
+ font-weight: 600;
16
+ padding: 0px;
17
+ }
18
+ .saswp-general table{
19
+ margin-top: 0px;
20
+ }
21
+ .saswp-general table td{
22
+ padding: 5px;
23
+ }
24
+ .saswp-knowledge table th{
25
+ width: auto;
26
+ padding: 0px;
27
+ }
28
+ .saswp-knowledge table{
29
+ margin-top: 0px;
30
+ }
31
+ .saswp-knowledge table td{
32
+ padding: 5px;
33
+ }
34
+ .saswp-schema table th{
35
+ width: auto;
36
+ padding: 0px;
37
+ }
38
+ .saswp-schema table{
39
+ margin-top: 0px;
40
+ }
41
+ .saswp-schema table td{
42
+ padding: 5px;
43
+ }
44
+ .saswp-amp table th{
45
+ width: auto;
46
+ padding: 0px;
47
+ }
48
+ .saswp-amp table{
49
+ margin-top: 0px;
50
+ }
51
+ .saswp-amp table td{
52
+ padding: 5px;
53
+ }
54
+ .saswp-help table th{
55
+ width: auto;
56
+ padding: 0px;
57
+ }
58
+ .saswp-support table th{
59
+ width: auto;
60
+ padding: 0px;
61
+ }
62
+ .saswp-help table{
63
+ margin-top: 0px;
64
+ }
65
+ .saswp-help table td{
66
+ padding: 5px;
67
+ }
68
+ .saswp-settings-list{
69
+ display:inline-block;
70
+ width:100%
71
+ }
72
+ .saswp-settings-list li{
73
+
74
+ padding-left:0px;
75
+ display: contents;
76
+ }
77
+ .saswp-settings-list li div label{
78
+ font-weight: 600;
79
+ }
80
+ .saswp-general h2{
81
+ margin-bottom: 0px;
82
+ }
83
+ .saswp-knowledge h2{
84
+ margin-bottom: 0px;
85
+ }
86
+ .saswp-schema h2{
87
+ margin-bottom: 0px;
88
+ }
89
+ .saswp-help h2{
90
+ margin-bottom: 0px;
91
+ }
92
+ .saswp-settings-form p.submit{
93
+ margin-top:0px;
94
+ }
95
+ .saswp_qanda_p{
96
+ font-weight: 500;
97
+ }
98
+ .saswp-display-none{
99
+ display: none !important;
100
+ }
101
+ .saswp-placement-groups{
102
+ border: 1px solid #e5e5e5;
103
+ }
104
+ .saswp-query-success{
105
+ color: #006600;
106
+ }
107
+ .saswp-query-error{
108
+ color: #bf3322;
109
+ }
110
+
111
+ .saswp-tools table th{
112
+ width: auto;
113
+ padding: 0px;
114
+ }
115
+ .saswp-tools table{
116
+ margin-top: 0px;
117
+ }
118
+ .saswp-tools table td{
119
+ padding: 5px;
120
+ }
121
+ .saswp-tools-field-title strong{
122
+ padding-right: 130px;
123
+ }
124
+ .saswp-error{
125
+ color: #ff0000 !important;
126
+ }
127
+ /*
128
+ Tooltip css starts here
129
+
130
+ */
131
+ .saswp-tooltip {
132
+ position: relative;
133
+ display: inline-block;
134
+ }
135
+ .saswp-tooltip .saswp-tooltiptext {
136
+ visibility: hidden;
137
+ width: 200px;
138
+ background-color: black;
139
+ color: #fff;
140
+ text-align: center;
141
+ border-radius: 6px;
142
+ padding: 5px 0;
143
+
144
+ /* Position the tooltip */
145
+ position: absolute;
146
+ z-index: 1;
147
+ bottom: 100%;
148
+ left: 50%;
149
+ margin-left: -25px;
150
+ }
151
+ .saswp-tooltip:hover .saswp-tooltiptext {
152
+ visibility: visible;
153
+ }
154
+
155
+ .saswp-tooltiptext::after {
156
+ content: "";
157
+ position: absolute;
158
+ top: 100%;
159
+ left: 10%;
160
+ margin-left: -5px;
161
+ border-width: 5px;
162
+ border-style: solid;
163
+ border-color: black transparent transparent transparent;
164
+ }
165
+
166
+ /*
167
+ Tooltip css ends here
168
+
169
+ */
170
+ .saswp-knowledge-base .saswp-knowledge-label{
171
+ width:200px;
172
+ float:left;
173
+ clear: both;
174
+
175
+ }
176
+ .saswp-knowledge-base .saswp-knowledge-field{
177
+ width:75%;
178
+ float:right;
179
+ }
180
+
181
+ .saswp-social-fileds ul{
182
+ display: grid;
183
+ grid-template-columns: 26.5% 1fr;
184
+ }
185
+ .saswp-social-fileds li{
186
+ display: flex;
187
+ }
188
+ .saswp-social-fileds .saswp-knowledge-field{
189
+ width: 100%;
190
+ margin-left: 10px;
191
+ }
192
+ .saswp-social-fileds .saswp-knowledge-field input{
193
+ float: right;
194
+ margin: inherit;
195
+ }
196
+ .saswp-schema-type-fields .saswp-knowledge-label{
197
+ width:200px;
198
+ float:left;
199
+ clear: both;
200
+ }
201
+ .saswp-schema-type-fields .saswp-knowledge-field{
202
+ width:75%;
203
+ float:right;
204
+ }
205
+ .saswp-settings-first-div{
206
+ width: 70%;
207
+ }
208
+ .saswp-settings-container{
209
+ display: inline-flex;
210
+ width: 100%;
211
+ }
212
+ .saswp-settings-second-div{
213
+ float: right;
214
+ position: relative;
215
+ top: 20px;
216
+ margin-right: 30px;
217
+ margin-top: 37px;
218
+ }
219
+ .saswp-feedback-panel{
220
+ height: 200px;
221
+ width: 280px;
222
+ background: #ffffff;
223
+ position: relative;
224
+
225
+ }
226
+ .saswp-start-quck-setup{
227
+ position: relative;
228
+ float: inherit;
229
+ top: 7px;
230
+ left:15px;
231
+ }
232
+ .saswp-feedback-panel ul{
233
+ list-style-type: circle;
234
+ list-style:decimal;
235
+ padding-left: 30px;
236
+ font-size: 15px;
237
+
238
+ }
239
+ .saswp-feedback-panel a{
240
+ text-decoration: none;
241
+
242
+ }
243
+ .saswp-feedback-panel h2{
244
+ text-align: center;
245
+ padding-top: 18px;
246
+
247
+ }
248
+ .saswp-social-sharing-buttons {
249
+ text-align: center;
250
+ padding-top: 20px;
251
+
252
+
253
+ }
254
+ .saswp-facebook-share{
255
+ background: #3B5998;
256
+ box-shadow: 0 0px 0 #1b95e0 !important;
257
+ color: #fff !important;
258
+ line-height: 20px !important;
259
+ height: 21px !important;
260
+ border-radius: 3px;
261
+ margin-right: 5px;
262
+ }
263
+ .saswp-social-sharing-buttons a{
264
+ text-align: center;
265
+ padding: 8px;
266
+
267
+
268
+ }
269
+ .twitter-share-button{
270
+ background: #1b95e0 !important;
271
+ box-shadow: 0 0px 0 #1b95e0 !important;
272
+ color:#fff !important;
273
+ line-height: 20px !important;
274
+ height: 21px !important;
275
+ border-radius: 3px;
276
+ margin-left: 5px;
277
+
278
+ }
279
+ .saswp-placement-button{
280
+ padding: 3px 10px;
281
+ color: #0d0d0d;
282
+ font-size: 14px;
283
+ border: 1px solid #aaa;
284
+ border-radius: 2px;
285
+ background: linear-gradient(#ededed, #ffffff);
286
+ }
287
+ .saswp-placement-table td {
288
+ padding: 5px 10px !important;
289
+ }
290
+ .saswp-archive-div .saswp-knowledge-field{
291
+ float: right;
292
+ width: 75%;
293
+ padding-bottom: 10px;
294
+ }
295
+ .saswp-archive-div .saswp-knowledge-label{
296
+ float:left;
297
+ clear: both;
298
+ }
299
+
300
+ .saswp-amp .saswp-knowledge-field{
301
+ float: right;
302
+ width: 75%;
303
+ padding-bottom: 10px;
304
+ }
305
+ .saswp-amp .saswp-knowledge-label{
306
+ float:left;
307
+ clear: both;
308
+ }
309
+
admin_section/css/saswp-add-new.css ADDED
@@ -0,0 +1,2433 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .merlin__body {
2
+ display: -webkit-box;
3
+ display: -webkit-flex;
4
+ display: -ms-flexbox;
5
+ display: flex;
6
+ box-sizing: border-box;
7
+ margin: 0 auto;
8
+ padding: 0 !important;
9
+ background: #f1f1f1;
10
+ box-shadow: none;
11
+ font-size: 14px;
12
+ line-height: 1.7em;
13
+
14
+ -webkit-align-items: center;
15
+ align-items: center;
16
+ -webkit-box-align: center;
17
+ -webkit-box-pack: center;
18
+ -ms-flex-align: center;
19
+ -ms-flex-pack: center;
20
+ -webkit-justify-content: center;
21
+ justify-content: center;
22
+ }
23
+
24
+ h1 {
25
+ margin: 0 0 20px;
26
+ padding: 0;
27
+ border: 0;
28
+ color: #444;
29
+ font-size: 20px;
30
+ font-weight: 500;
31
+ -webkit-font-smoothing: antialiased;
32
+ -moz-osx-font-smoothing: grayscale;
33
+ }
34
+
35
+ p {
36
+ margin: 0;
37
+ font-size: 14px;
38
+ line-height: 1.7em;
39
+ }
40
+
41
+ .merlin__input {
42
+ display: block;
43
+ width: 70%;
44
+ margin: 14px auto 0;
45
+ padding: 4px 8px;
46
+ border-radius: 3px;
47
+ font-size: 12px;
48
+ }
49
+
50
+ .lead + .merlin__button--knockout {
51
+ z-index: -1;
52
+ }
53
+
54
+ p.lead {
55
+ z-index: 9999;
56
+ -webkit-animation: vanishOut 800ms linear alternate;
57
+ animation: vanishOut 800ms linear alternate;
58
+ }
59
+
60
+ p.success {
61
+ -webkit-animation: vanishIn 700ms linear alternate;
62
+ animation: vanishIn 700ms linear alternate;
63
+ }
64
+
65
+ @-webkit-keyframes vanishIn {
66
+ 0% {
67
+ opacity: 0;
68
+ -webkit-transform: scale(2, 2);
69
+ transform: scale(2, 2);
70
+ -webkit-transform-origin: 50% 50%;
71
+ transform-origin: 50% 50%;
72
+
73
+ -webkit-filter: blur(70px);
74
+ filter: blur(70px);
75
+ }
76
+ 100% {
77
+ opacity: 1;
78
+ -webkit-transform: scale(1, 1);
79
+ transform: scale(1, 1);
80
+ -webkit-transform-origin: 50% 50%;
81
+ transform-origin: 50% 50%;
82
+
83
+ -webkit-filter: blur(0px);
84
+ filter: blur(0px);
85
+ }
86
+ }
87
+
88
+ @keyframes vanishIn {
89
+ 0% {
90
+ opacity: 0;
91
+ -webkit-transform: scale(2, 2);
92
+ transform: scale(2, 2);
93
+ -webkit-transform-origin: 50% 50%;
94
+ transform-origin: 50% 50%;
95
+
96
+ -webkit-filter: blur(70px);
97
+ filter: blur(70px);
98
+ }
99
+ 100% {
100
+ opacity: 1;
101
+ -webkit-transform: scale(1, 1);
102
+ transform: scale(1, 1);
103
+ -webkit-transform-origin: 50% 50%;
104
+ transform-origin: 50% 50%;
105
+
106
+ -webkit-filter: blur(0px);
107
+ filter: blur(0px);
108
+ }
109
+ }
110
+
111
+ /* Applies styles when Reduced Motion is enabled */
112
+ @media screen and (prefers-reduced-motion: reduce) {
113
+ @-webkit-keyframes vanishIn {
114
+ 0% {
115
+ opacity: 0;
116
+ }
117
+ 100% {
118
+ opacity: 1;
119
+ }
120
+ }
121
+ @keyframes vanishIn {
122
+ 0% {
123
+ opacity: 0;
124
+ }
125
+ 100% {
126
+ opacity: 1;
127
+ }
128
+ }
129
+ }
130
+
131
+ @-webkit-keyframes vanishOut {
132
+ 0% {
133
+ opacity: 1;
134
+ -webkit-transform: scale(1, 1);
135
+ transform: scale(1, 1);
136
+ -webkit-transform-origin: 50% 50%;
137
+ transform-origin: 50% 50%;
138
+
139
+ -webkit-filter: blur(0px);
140
+ filter: blur(0px);
141
+ }
142
+ 100% {
143
+ opacity: 0;
144
+ -webkit-transform: scale(2, 2);
145
+ transform: scale(2, 2);
146
+ -webkit-transform-origin: 50% 50%;
147
+ transform-origin: 50% 50%;
148
+
149
+ -webkit-filter: blur(50px);
150
+ filter: blur(50px);
151
+ }
152
+ }
153
+
154
+ @keyframes vanishOut {
155
+ 0% {
156
+ opacity: 1;
157
+ -webkit-transform: scale(1, 1);
158
+ transform: scale(1, 1);
159
+ -webkit-transform-origin: 50% 50%;
160
+ transform-origin: 50% 50%;
161
+
162
+ -webkit-filter: blur(0px);
163
+ filter: blur(0px);
164
+ }
165
+ 100% {
166
+ opacity: 0;
167
+ -webkit-transform: scale(2, 2);
168
+ transform: scale(2, 2);
169
+ -webkit-transform-origin: 50% 50%;
170
+ transform-origin: 50% 50%;
171
+
172
+ -webkit-filter: blur(50px);
173
+ filter: blur(50px);
174
+ }
175
+ }
176
+
177
+ /* Applies styles when Reduced Motion is enabled */
178
+ @media screen and (prefers-reduced-motion: reduce) {
179
+ @-webkit-keyframes vanishOut {
180
+ 0% {
181
+ opacity: 1;
182
+ }
183
+ 100% {
184
+ opacity: 0;
185
+ }
186
+ }
187
+ @keyframes vanishOut {
188
+ 0% {
189
+ opacity: 1;
190
+ }
191
+ 100% {
192
+ opacity: 0;
193
+ }
194
+ }
195
+ }
196
+
197
+ .hidden {
198
+ display: none;
199
+ overflow: hidden;
200
+ clip: rect(1px, 1px, 1px, 1px);
201
+ position: absolute;
202
+ width: 1px;
203
+ height: 1px;
204
+ padding: 0;
205
+ border: 0;
206
+
207
+ -webkit-clip-path: circle(1% at 1% 1%);
208
+ clip-path: circle(1% at 1% 1%);
209
+ }
210
+
211
+ .huh-launcher,
212
+ .huh-container {
213
+ display: none !important;
214
+ }
215
+
216
+ .icon.icon--merlin {
217
+ position: absolute;
218
+ right: 15px;
219
+ bottom: 15px;
220
+ width: 50px;
221
+ height: 75px;
222
+ margin: 0;
223
+ }
224
+
225
+ .merlin__helper {
226
+ position: absolute;
227
+ right: 80px;
228
+ bottom: 40px;
229
+ }
230
+
231
+ @-webkit-keyframes moveup {
232
+ 0% {
233
+ opacity: 1;
234
+ -webkit-transform: translateY(0);
235
+ transform: translateY(0);
236
+ }
237
+ 30% {
238
+ opacity: 1;
239
+ -webkit-transform: translateY(-42px);
240
+ transform: translateY(-42px);
241
+ }
242
+ 90% {
243
+ opacity: 1;
244
+ -webkit-transform: translateY(-42px);
245
+ transform: translateY(-42px);
246
+ }
247
+ 100% {
248
+ opacity: 0;
249
+ -webkit-transform: translateY(-48px) scale(0.99);
250
+ transform: translateY(-48px) scale(0.99);
251
+ -webkit-transform-origin: top right;
252
+ transform-origin: top right;
253
+ }
254
+ }
255
+
256
+ @keyframes moveup {
257
+ 0% {
258
+ opacity: 1;
259
+ -webkit-transform: translateY(0);
260
+ transform: translateY(0);
261
+ }
262
+ 30% {
263
+ opacity: 1;
264
+ -webkit-transform: translateY(-42px);
265
+ transform: translateY(-42px);
266
+ }
267
+ 90% {
268
+ opacity: 1;
269
+ -webkit-transform: translateY(-42px);
270
+ transform: translateY(-42px);
271
+ }
272
+ 100% {
273
+ opacity: 0;
274
+ -webkit-transform: translateY(-48px) scale(0.99);
275
+ transform: translateY(-48px) scale(0.99);
276
+ -webkit-transform-origin: top right;
277
+ transform-origin: top right;
278
+ }
279
+ }
280
+
281
+ @-webkit-keyframes fadeout {
282
+ 0% {
283
+ opacity: 1;
284
+ }
285
+ 100% {
286
+ opacity: 0;
287
+ -webkit-transform: translateY(-30px) scale(0.94);
288
+ transform: translateY(-30px) scale(0.94);
289
+ -webkit-transform-origin: top right;
290
+ transform-origin: top right;
291
+ }
292
+ }
293
+
294
+ @keyframes fadeout {
295
+ 0% {
296
+ opacity: 1;
297
+ }
298
+ 100% {
299
+ opacity: 0;
300
+ -webkit-transform: translateY(-30px) scale(0.94);
301
+ transform: translateY(-30px) scale(0.94);
302
+ -webkit-transform-origin: top right;
303
+ transform-origin: top right;
304
+ }
305
+ }
306
+
307
+ @-webkit-keyframes thirdmessgae {
308
+ 0% {
309
+ overflow: hidden;
310
+ }
311
+ 100% {
312
+ overflow: visibile;
313
+ }
314
+ }
315
+
316
+ @keyframes thirdmessgae {
317
+ 0% {
318
+ overflow: hidden;
319
+ }
320
+ 100% {
321
+ overflow: visibile;
322
+ }
323
+ }
324
+
325
+ .from-me {
326
+ position: relative;
327
+ position: absolute;
328
+ right: 0;
329
+ bottom: 10px;
330
+ width: 300px;
331
+ margin-bottom: 0;
332
+ padding: 6px 15px 7px;
333
+ border-radius: 12px;
334
+ opacity: 0;
335
+ color: white;
336
+ background: #0b93f6;
337
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1);
338
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1);
339
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1), opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
340
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1), opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1);
341
+ -webkit-transform: translateY(50px) translateX(10px) scale(0.1);
342
+ -ms-transform: translateY(50px) translateX(10px) scale(0.1);
343
+ transform: translateY(50px) translateX(10px) scale(0.1);
344
+ }
345
+
346
+ .loaded .from-me:not(.is-third-message) {
347
+ opacity: 1;
348
+ -webkit-transform: translateY(0) translateX(0) scale(1);
349
+ -ms-transform: translateY(0) translateX(0) scale(1);
350
+ transform: translateY(0) translateX(0) scale(1);
351
+ -webkit-transform-origin: right;
352
+ -ms-transform-origin: right;
353
+ transform-origin: right;
354
+ }
355
+
356
+ .loaded .from-me.with-second-message {
357
+ -webkit-animation: moveup 1700ms ease-out 4200ms forwards;
358
+ animation: moveup 1700ms ease-out 4200ms forwards;
359
+ }
360
+
361
+ .loaded .from-me.is-third-message {
362
+ opacity: 1;
363
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms;
364
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms;
365
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms;
366
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms;
367
+ -webkit-transform: scale(1) translateY(0);
368
+ -ms-transform: scale(1) translateY(0);
369
+ transform: scale(1) translateY(0);
370
+ -webkit-transform-origin: right;
371
+ -ms-transform-origin: right;
372
+ transform-origin: right;
373
+ }
374
+
375
+ .from-me a {
376
+ color: #fff;
377
+ }
378
+
379
+ .from-me p {
380
+ font-size: 13px;
381
+ }
382
+
383
+ .from-me::before {
384
+ position: absolute;
385
+ z-index: 0;
386
+ right: -7px;
387
+ bottom: -2px;
388
+ height: 20px;
389
+ border-right: 20px solid #0b93f6;
390
+ border-bottom-left-radius: 16px 14px;
391
+ content: "";
392
+ -webkit-transform: translate(0, -2px);
393
+ }
394
+
395
+ .from-me::after {
396
+ position: absolute;
397
+ z-index: 0;
398
+ right: -56px;
399
+ bottom: -2px;
400
+ width: 26px;
401
+ height: 20px;
402
+ border-bottom-left-radius: 10px;
403
+ background: #f1f1f1;
404
+ content: "";
405
+ -webkit-transform: translate(-30px, -2px);
406
+ }
407
+
408
+ .chat-bubble {
409
+ position: absolute;
410
+ right: 12px;
411
+ bottom: 8px;
412
+ width: 24px;
413
+ height: 34px;
414
+ margin-left: auto;
415
+ opacity: 0;
416
+ background: #ddd;
417
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms;
418
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms;
419
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms;
420
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms;
421
+ -webkit-transform: translateY(50px) translateX(10px) scale(0.1);
422
+ -ms-transform: translateY(50px) translateX(10px) scale(0.1);
423
+ transform: translateY(50px) translateX(10px) scale(0.1);
424
+ }
425
+
426
+ .loaded .chat-bubble {
427
+ opacity: 1;
428
+ -webkit-transform: translateY(0) translateX(0) scale(1);
429
+ -ms-transform: translateY(0) translateX(0) scale(1);
430
+ transform: translateY(0) translateX(0) scale(1);
431
+ -webkit-transform-origin: right;
432
+ -ms-transform-origin: right;
433
+ transform-origin: right;
434
+ -webkit-animation: fadeout 300ms ease-out 6500ms forwards;
435
+ animation: fadeout 300ms ease-out 6500ms forwards;
436
+ }
437
+
438
+ .chat-bubble:before {
439
+ display: block;
440
+ position: absolute;
441
+ z-index: 1;
442
+ left: -17px;
443
+ width: 34px;
444
+ height: 34px;
445
+ border-radius: 50%;
446
+ background: #ddd;
447
+ content: "";
448
+ }
449
+
450
+ .chat-bubble:after {
451
+ display: block;
452
+ position: absolute;
453
+ z-index: 1;
454
+ right: -17px;
455
+ width: 34px;
456
+ height: 34px;
457
+ border-radius: 50%;
458
+ background: #ddd;
459
+ content: "";
460
+ }
461
+
462
+ .chat-bubble .tail {
463
+ position: absolute;
464
+ right: -17px;
465
+ bottom: -1px;
466
+ width: 15px;
467
+ height: 15px;
468
+ border-radius: 50%;
469
+ background: #ddd;
470
+ }
471
+
472
+ .chat-bubble .tail::before {
473
+ display: block;
474
+ position: absolute;
475
+ right: -3px;
476
+ bottom: -4px;
477
+ width: 5px;
478
+ height: 5px;
479
+ border-radius: 50%;
480
+ background: #ddd;
481
+ content: "";
482
+ }
483
+
484
+ .chat-bubble .loading {
485
+ position: absolute;
486
+ z-index: 10;
487
+ top: 14px;
488
+ left: 0;
489
+ width: 30px;
490
+ }
491
+
492
+ .chat-bubble .loading .dot {
493
+ display: block;
494
+ float: left;
495
+ width: 6px;
496
+ height: 6px;
497
+ margin: 0 0 0 3px;
498
+ border-radius: 50%;
499
+ background: #c1c1c1;
500
+ }
501
+
502
+ .chat-bubble .loading .dot:first-child {
503
+ margin: 0;
504
+ }
505
+
506
+ .chat-bubble .loading .dot.one {
507
+ -webkit-animation: cycleOne 1s ease-in-out infinite;
508
+ animation: cycleOne 1s ease-in-out infinite;
509
+ }
510
+
511
+ .chat-bubble .loading .dot.two {
512
+ -webkit-animation: cycleTwo 1s ease-in-out infinite;
513
+ }
514
+
515
+ .chat-bubble .loading .dot.three {
516
+ -webkit-animation: cycleThree 1s ease-in-out infinite;
517
+ animation: cycleThree 1s ease-in-out infinite;
518
+ }
519
+
520
+ @-webkit-keyframes cycleOne {
521
+ 0% {
522
+ background: rgba(150, 150, 150, 0.4);
523
+ }
524
+ 33.333% {
525
+ background: #969696;
526
+ }
527
+ 66.6667% {
528
+ background: rgba(150, 150, 150, 0.4);
529
+ }
530
+ 100% {
531
+ background: rgba(150, 150, 150, 0.4);
532
+ }
533
+ }
534
+
535
+ @keyframes cycleOne {
536
+ 0% {
537
+ background: rgba(150, 150, 150, 0.4);
538
+ }
539
+ 33.333% {
540
+ background: #969696;
541
+ }
542
+ 66.6667% {
543
+ background: rgba(150, 150, 150, 0.4);
544
+ }
545
+ 100% {
546
+ background: rgba(150, 150, 150, 0.4);
547
+ }
548
+ }
549
+
550
+ @-webkit-keyframes cycleTwo {
551
+ 0% {
552
+ background: rgba(150, 150, 150, 0.4);
553
+ }
554
+ 33.333% {
555
+ background: rgba(150, 150, 150, 0.4);
556
+ }
557
+ 66.6667% {
558
+ background: #969696;
559
+ }
560
+ 100% {
561
+ background: rgba(150, 150, 150, 0.4);
562
+ }
563
+ }
564
+
565
+ @keyframes cycleTwo {
566
+ 0% {
567
+ background: rgba(150, 150, 150, 0.4);
568
+ }
569
+ 33.333% {
570
+ background: rgba(150, 150, 150, 0.4);
571
+ }
572
+ 66.6667% {
573
+ background: #969696;
574
+ }
575
+ 100% {
576
+ background: rgba(150, 150, 150, 0.4);
577
+ }
578
+ }
579
+
580
+ @-webkit-keyframes cycleThree {
581
+ 0% {
582
+ background: rgba(150, 150, 150, 0.4);
583
+ }
584
+ 33.333% {
585
+ background: rgba(150, 150, 150, 0.4);
586
+ }
587
+ 66.6667% {
588
+ background: rgba(150, 150, 150, 0.4);
589
+ }
590
+ 100% {
591
+ background: #969696;
592
+ }
593
+ }
594
+
595
+ @keyframes cycleThree {
596
+ 0% {
597
+ background: rgba(150, 150, 150, 0.4);
598
+ }
599
+ 33.333% {
600
+ background: rgba(150, 150, 150, 0.4);
601
+ }
602
+ 66.6667% {
603
+ background: rgba(150, 150, 150, 0.4);
604
+ }
605
+ 100% {
606
+ background: #969696;
607
+ }
608
+ }
609
+
610
+ .dots {
611
+ display: block;
612
+ position: relative;
613
+ z-index: 0;
614
+ top: 10px;
615
+ max-width: 140px;
616
+ margin: 0 auto;
617
+ padding: 0;
618
+ line-height: 1;
619
+ list-style: none;
620
+ cursor: default;
621
+ }
622
+
623
+ .merlin__content--ready .dots {
624
+ display: none;
625
+ }
626
+
627
+ .merlin__content--content .dots {
628
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
629
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
630
+ }
631
+
632
+ body.exiting .merlin__content--content .dots {
633
+ opacity: 0;
634
+ }
635
+
636
+ .dots li {
637
+ display: inline-block;
638
+ position: relative;
639
+ z-index: 9999;
640
+ top: -0.15em;
641
+ width: 6px;
642
+ height: 6px;
643
+ margin: 0 1px;
644
+ padding: 0;
645
+ border-radius: 999px;
646
+ background: #e3e3e3;
647
+ -webkit-transition: background 300ms cubic-bezier(0.694, 0, 0.335, 1);
648
+ transition: background 300ms cubic-bezier(0.694, 0, 0.335, 1);
649
+ }
650
+
651
+ .dots li.done {
652
+ background: #ed1c25;
653
+ }
654
+
655
+ .dots li.active {
656
+ -webkit-animation: popIn 900ms forwards;
657
+ animation: popIn 900ms forwards;
658
+
659
+ -webkit-animation-fill-mode: both;
660
+ animation-fill-mode: both;
661
+ /* Applies styles when Reduced Motion is enabled */
662
+ }
663
+
664
+ @media screen and (prefers-reduced-motion: reduce) {
665
+ .dots li.active {
666
+ background: #ed1c25;
667
+ -webkit-animation: none;
668
+ animation: none;
669
+ }
670
+ }
671
+
672
+ .dots li.active::after {
673
+ display: inline-block;
674
+ position: absolute;
675
+ z-index: -1;
676
+ left: 0;
677
+ width: 7px;
678
+ height: 7px;
679
+ border-radius: 999px;
680
+ content: "";
681
+ -webkit-transition: box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1);
682
+ transition: box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1);
683
+ -webkit-animation: sonarEffect 400ms ease-out 300ms;
684
+ animation: sonarEffect 400ms ease-out 300ms;
685
+ /* Applies styles when Reduced Motion is enabled */
686
+ }
687
+
688
+ @media screen and (prefers-reduced-motion: reduce) {
689
+ .dots li.active::after {
690
+ -webkit-animation: none;
691
+ animation: none;
692
+ }
693
+ }
694
+
695
+ @-webkit-keyframes sonarEffect {
696
+ 0% {
697
+ opacity: 1;
698
+ }
699
+ 40% {
700
+ opacity: 0.5;
701
+ box-shadow: 0 0 0 1px #aae4ff;
702
+ }
703
+ 100% {
704
+ opacity: 0;
705
+ box-shadow: 0 0 0 1px #aae4ff;
706
+ -webkit-transform: scale(1.6);
707
+ transform: scale(1.6);
708
+ }
709
+ }
710
+
711
+ @keyframes sonarEffect {
712
+ 0% {
713
+ opacity: 1;
714
+ }
715
+ 40% {
716
+ opacity: 0.5;
717
+ box-shadow: 0 0 0 1px #aae4ff;
718
+ }
719
+ 100% {
720
+ opacity: 0;
721
+ box-shadow: 0 0 0 1px #aae4ff;
722
+ -webkit-transform: scale(1.6);
723
+ transform: scale(1.6);
724
+ }
725
+ }
726
+
727
+ @-webkit-keyframes popIn {
728
+ 0% {
729
+ background: #e3e3e3;
730
+ }
731
+ 40% {
732
+ }
733
+ 55% {
734
+ background: #e3e3e3;
735
+ -webkit-transform: scale(1);
736
+ transform: scale(1);
737
+ }
738
+ 65% {
739
+ background: #ed1c25;
740
+ -webkit-transform: scale(1.6);
741
+ transform: scale(1.6);
742
+ }
743
+ 85% {
744
+ background: #ed1c25;
745
+ -webkit-transform: scale(0.8);
746
+ transform: scale(0.8);
747
+ }
748
+ 95% {
749
+ background: #ed1c25;
750
+ -webkit-transform: scale(1.2);
751
+ transform: scale(1.2);
752
+ }
753
+ 100% {
754
+ background: #ed1c25;
755
+ -webkit-transform: scale(1);
756
+ transform: scale(1);
757
+ }
758
+ }
759
+
760
+ @keyframes popIn {
761
+ 0% {
762
+ background: #e3e3e3;
763
+ }
764
+ 40% {
765
+ }
766
+ 55% {
767
+ background: #e3e3e3;
768
+ -webkit-transform: scale(1);
769
+ transform: scale(1);
770
+ }
771
+ 65% {
772
+ background: #ed1c25;
773
+ -webkit-transform: scale(1.6);
774
+ transform: scale(1.6);
775
+ }
776
+ 85% {
777
+ background: #ed1c25;
778
+ -webkit-transform: scale(0.8);
779
+ transform: scale(0.8);
780
+ }
781
+ 95% {
782
+ background: #ed1c25;
783
+ -webkit-transform: scale(1.2);
784
+ transform: scale(1.2);
785
+ }
786
+ 100% {
787
+ background: #ed1c25;
788
+ -webkit-transform: scale(1);
789
+ transform: scale(1);
790
+ }
791
+ }
792
+
793
+ svg:not(:root) {
794
+ overflow: hidden;
795
+ }
796
+
797
+ .icon {
798
+ max-width: 100%;
799
+ margin-bottom: 2.8em;
800
+ -webkit-transform: translate3d(0, 0, 0);
801
+ transform: translate3d(0, 0, 0);
802
+ }
803
+
804
+ .js--finished .icon:not(.icon--checkmark) {
805
+ opacity: 0;
806
+ -webkit-transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
807
+ transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
808
+ transition: transform 400ms cubic-bezier(0.694, 0, 0.335, 1), opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
809
+ transition: transform 400ms cubic-bezier(0.694, 0, 0.335, 1), opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
810
+ -webkit-transform: scale(0.8);
811
+ -ms-transform: scale(0.8);
812
+ transform: scale(0.8);
813
+
814
+ -webkit-filter: blur(10px);
815
+ filter: blur(10px);
816
+ }
817
+
818
+ .merlin__content {
819
+ display: block;
820
+ overflow: hidden;
821
+ zoom: 1;
822
+ position: relative;
823
+ box-sizing: border-box;
824
+ width: 650px;
825
+ margin: 0.5em auto 0;
826
+ padding: 140px 33px 35px;
827
+ border-radiuwidth: 600s: 7px;
828
+ color: #444;
829
+ background: #fff;
830
+ box-shadow: 0 5px 20px rgba(0, 0, 0, 0.07);
831
+ -webkit-font-smoothing: antialiased;
832
+ -moz-osx-font-smoothing: grayscale;
833
+ text-align: center;
834
+ }
835
+
836
+ .merlin__content--transition {
837
+ opacity: 0;
838
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
839
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
840
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
841
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0, -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
842
+ -webkit-transform: translateX(50%) scale(0.95);
843
+ -ms-transform: translateX(50%) scale(0.95);
844
+ transform: translateX(50%) scale(0.95);
845
+ -webkit-transform-origin: 50%;
846
+ -ms-transform-origin: 50%;
847
+ transform-origin: 50%;
848
+
849
+ -webkit-filter: blur(10px);
850
+ filter: blur(10px);
851
+ /* Applies styles when Reduced Motion is enabled */
852
+ }
853
+
854
+ @media screen and (prefers-reduced-motion: reduce) {
855
+ .merlin__content--transition {
856
+ -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
857
+ transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
858
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out;
859
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
860
+ -webkit-transform: translateX(0) scale(1);
861
+ -ms-transform: translateX(0) scale(1);
862
+ transform: translateX(0) scale(1);
863
+
864
+ -webkit-filter: blur(2px);
865
+ filter: blur(2px);
866
+ }
867
+ }
868
+
869
+ .merlin__content--welcome .merlin__content--transition {
870
+ opacity: 1;
871
+ -webkit-transform: translateX(0) scale(1);
872
+ -ms-transform: translateX(0) scale(1);
873
+ transform: translateX(0) scale(1);
874
+
875
+ -webkit-filter: blur(0);
876
+ filter: blur(0);
877
+ }
878
+
879
+ .merlin__content--plugins .merlin__content__footer.no-plugins,
880
+ .merlin__content--welcome .merlin__content__footer {
881
+ padding-top: 22px;
882
+ }
883
+
884
+ .merlin__content--plugins .merlin__content__footer {
885
+ padding-top: 3px;
886
+ }
887
+
888
+ .merlin__content--license .merlin__content__footer {
889
+ padding-top: 5px;
890
+ }
891
+
892
+ .merlin__content--ready {
893
+ padding-bottom: 12px;
894
+ }
895
+
896
+ body.loaded .merlin__content--transition {
897
+ opacity: 1;
898
+ -webkit-transform: translateX(0) scale(1);
899
+ -ms-transform: translateX(0) scale(1);
900
+ transform: translateX(0) scale(1);
901
+
902
+ -webkit-filter: blur(0);
903
+ filter: blur(0);
904
+ }
905
+
906
+ body.exiting .merlin__content--transition {
907
+ opacity: 0;
908
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
909
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
910
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
911
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0, -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
912
+ -webkit-transform: translateX(-40%) scale(0.96);
913
+ -ms-transform: translateX(-40%) scale(0.96);
914
+ transform: translateX(-40%) scale(0.96);
915
+
916
+ -webkit-filter: blur(10px);
917
+ filter: blur(10px);
918
+ /* Applies styles when Reduced Motion is enabled */
919
+ }
920
+
921
+ @media screen and (prefers-reduced-motion: reduce) {
922
+ body.exiting .merlin__content--transition {
923
+ -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
924
+ transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
925
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out;
926
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
927
+ -webkit-transform: translateX(0) scale(1);
928
+ -ms-transform: translateX(0) scale(1);
929
+ transform: translateX(0) scale(1);
930
+
931
+ -webkit-filter: blur(2px);
932
+ filter: blur(2px);
933
+ }
934
+ }
935
+
936
+ .merlin__content--welcome {
937
+ opacity: 0;
938
+ -webkit-transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1);
939
+ transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1);
940
+ -webkit-animation: animation 1000ms linear both 200ms;
941
+ animation: animation 1000ms linear both 200ms;
942
+ /* Applies styles when Reduced Motion is enabled */
943
+ }
944
+
945
+ body.loaded .merlin__content--welcome {
946
+ opacity: 1;
947
+ }
948
+
949
+ @media screen and (prefers-reduced-motion: reduce) {
950
+ .merlin__content--welcome {
951
+ opacity: 1;
952
+ -webkit-animation: none;
953
+ animation: none;
954
+ }
955
+ }
956
+
957
+ /* Generated with Bounce.js. Edit at https://goo.gl/iTptLG */
958
+ @-webkit-keyframes animation {
959
+ 0% {
960
+ -webkit-transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
961
+ transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
962
+ }
963
+ 4.5% {
964
+ -webkit-transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
965
+ transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
966
+ }
967
+ 5.51% {
968
+ -webkit-transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
969
+ transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
970
+ }
971
+ 9.01% {
972
+ -webkit-transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
973
+ transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
974
+ }
975
+ 11.01% {
976
+ -webkit-transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
977
+ transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
978
+ }
979
+ 13.51% {
980
+ -webkit-transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
981
+ transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
982
+ }
983
+ 16.52% {
984
+ -webkit-transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
985
+ transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
986
+ }
987
+ 17.92% {
988
+ -webkit-transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
989
+ transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
990
+ }
991
+ 21.92% {
992
+ -webkit-transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
993
+ transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
994
+ }
995
+ 29.03% {
996
+ -webkit-transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
997
+ transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
998
+ }
999
+ 34.63% {
1000
+ -webkit-transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1001
+ transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1002
+ }
1003
+ 36.24% {
1004
+ -webkit-transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1005
+ transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1006
+ }
1007
+ 40.14% {
1008
+ -webkit-transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1009
+ transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1010
+ }
1011
+ 50.55% {
1012
+ -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1013
+ transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1014
+ }
1015
+ 62.36% {
1016
+ -webkit-transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1017
+ transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1018
+ }
1019
+ 79.08% {
1020
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1021
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1022
+ }
1023
+ 84.68% {
1024
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1025
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1026
+ }
1027
+ 100% {
1028
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1029
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1030
+ }
1031
+ }
1032
+ @keyframes animation {
1033
+ 0% {
1034
+ -webkit-transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1035
+ transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1036
+ }
1037
+ 4.5% {
1038
+ -webkit-transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1039
+ transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1040
+ }
1041
+ 5.51% {
1042
+ -webkit-transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1043
+ transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1044
+ }
1045
+ 9.01% {
1046
+ -webkit-transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1047
+ transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1048
+ }
1049
+ 11.01% {
1050
+ -webkit-transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1051
+ transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1052
+ }
1053
+ 13.51% {
1054
+ -webkit-transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1055
+ transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1056
+ }
1057
+ 16.52% {
1058
+ -webkit-transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1059
+ transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1060
+ }
1061
+ 17.92% {
1062
+ -webkit-transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1063
+ transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1064
+ }
1065
+ 21.92% {
1066
+ -webkit-transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1067
+ transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1068
+ }
1069
+ 29.03% {
1070
+ -webkit-transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1071
+ transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1072
+ }
1073
+ 34.63% {
1074
+ -webkit-transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1075
+ transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1076
+ }
1077
+ 36.24% {
1078
+ -webkit-transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1079
+ transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1080
+ }
1081
+ 40.14% {
1082
+ -webkit-transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1083
+ transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1084
+ }
1085
+ 50.55% {
1086
+ -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1087
+ transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1088
+ }
1089
+ 62.36% {
1090
+ -webkit-transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1091
+ transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1092
+ }
1093
+ 79.08% {
1094
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1095
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1096
+ }
1097
+ 84.68% {
1098
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1099
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1100
+ }
1101
+ 100% {
1102
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1103
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1104
+ }
1105
+ }
1106
+
1107
+ .merlin__button {
1108
+ display: inline-block;
1109
+ overflow: hidden;
1110
+ position: relative;
1111
+ padding: 8px 18px 9px;
1112
+ border: 0;
1113
+ border-radius: 4px;
1114
+ color: #a1a5a8;
1115
+ background: #fff;
1116
+ font-size: 15px;
1117
+ font-weight: 600;
1118
+ -webkit-font-smoothing: antialiased;
1119
+ -moz-osx-font-smoothing: grayscale;
1120
+ text-align: center;
1121
+ text-decoration: none;
1122
+ cursor: pointer;
1123
+ -webkit-transition: color 150ms cubic-bezier(0.694, 0, 0.335, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1124
+ transition: color 150ms cubic-bezier(0.694, 0, 0.335, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1125
+ /* Applies styles when Reduced Motion is enabled */
1126
+ }
1127
+
1128
+ @media screen and (prefers-reduced-motion: reduce) {
1129
+ .merlin__button {
1130
+ -webkit-transition: color 50ms ease-in-out, background 50ms ease-in-out;
1131
+ transition: color 50ms ease-in-out, background 50ms ease-in-out;
1132
+ }
1133
+ }
1134
+
1135
+ .merlin__button:hover {
1136
+ background: #f4f4f4;
1137
+ }
1138
+
1139
+ .merlin__button:hover .chevron::after,
1140
+ .merlin__button:hover .chevron::before {
1141
+ background: #a1a5a8;
1142
+ }
1143
+
1144
+ .merlin__button:active {
1145
+ background: #ebebeb;
1146
+ }
1147
+
1148
+ .merlin__button span {
1149
+ display: inline-block;
1150
+ }
1151
+
1152
+ .merlin__button--colorchange {
1153
+ -webkit-animation: colorchange 800ms infinite alternate;
1154
+ animation: colorchange 800ms infinite alternate;
1155
+ }
1156
+
1157
+ .merlin__button--fullwidth {
1158
+ display: block;
1159
+ z-index: 999;
1160
+ width: 60%;
1161
+ margin: 0 auto;
1162
+ padding-top: 9px;
1163
+ padding-bottom: 10px;
1164
+ font-size: 14px;
1165
+ }
1166
+
1167
+ .merlin__button--next,
1168
+ .merlin__button--skip {
1169
+ position: absolute;
1170
+ bottom: 12px;
1171
+ }
1172
+
1173
+ .merlin__button--next {
1174
+ right: 12px;
1175
+ color: #ed1c25;
1176
+ }
1177
+
1178
+ .merlin__button--next:hover,
1179
+ .merlin__button--next:active {
1180
+ color: #111;
1181
+ }
1182
+ .merlin__button--next:focus{
1183
+ outline: none;
1184
+ box-shadow: none
1185
+ }
1186
+ .merlin__button--skip {
1187
+ left: 12px;
1188
+ }
1189
+
1190
+ .merlin__button--skip:hover,
1191
+ .merlin__button--skip:active {
1192
+ color: #666;
1193
+ }
1194
+
1195
+ .merlin__button--blue {
1196
+ color: #fff;
1197
+ background: #ed1c25;
1198
+ }
1199
+
1200
+ .merlin__button--blue:hover,
1201
+ .merlin__button--blue:active {
1202
+ color: #fff;
1203
+ background: #333;
1204
+ }
1205
+
1206
+ .merlin__button--knockout {
1207
+ margin-left: -10px;
1208
+ padding-top: 10px;
1209
+ padding-right: 25px;
1210
+ color: #cbcbcb;
1211
+ background: #fff;
1212
+ font-size: 14px;
1213
+ font-weight: 500;
1214
+ -webkit-transition: color 900ms cubic-bezier(0.694, 0, 0.335, 1);
1215
+ transition: color 900ms cubic-bezier(0.694, 0, 0.335, 1);
1216
+ }
1217
+
1218
+ .merlin__button--knockout:hover,
1219
+ .merlin__button--knockout:active {
1220
+ color: #a1a5a8;
1221
+ background: transparent;
1222
+ }
1223
+
1224
+ .merlin__button--no-chevron {
1225
+ margin-top: 3px;
1226
+ margin-left: 0;
1227
+ padding-right: 18px;
1228
+ }
1229
+
1230
+ .merlin__button--loading:hover,
1231
+ .merlin__button--loading:active {
1232
+ background: transparent;
1233
+ }
1234
+
1235
+ .merlin__button--loading__text {
1236
+ -webkit-transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1237
+ transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1238
+ transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1239
+ transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, filter 4100ms cubic-bezier(0.18, 1, 0.21, 1), -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1240
+ }
1241
+
1242
+ .merlin__button--loading__spinner {
1243
+ position: absolute;
1244
+ top: 50%;
1245
+ left: 50%;
1246
+ opacity: 0;
1247
+ -webkit-transition: opacity 100ms ease, -webkit-transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1248
+ transition: opacity 100ms ease, -webkit-transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1249
+ transition: opacity 100ms ease, transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1250
+ transition: opacity 100ms ease, transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms, -webkit-transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1251
+ -webkit-transform: scale(0);
1252
+ -ms-transform: scale(0);
1253
+ transform: scale(0);
1254
+ }
1255
+
1256
+ .merlin__button--loading .merlin__button--loading__text {
1257
+ opacity: 0;
1258
+
1259
+ -webkit-filter: blur(100px);
1260
+ filter: blur(100px);
1261
+ }
1262
+
1263
+ .merlin__button--loading .merlin__button--loading__spinner {
1264
+ opacity: 1;
1265
+ -webkit-transform: scale(1);
1266
+ -ms-transform: scale(1);
1267
+ transform: scale(1);
1268
+ }
1269
+
1270
+ #skip {
1271
+ display: inline-block;
1272
+ visibility: visible;
1273
+ z-index: 1;
1274
+ opacity: 1;
1275
+ }
1276
+
1277
+ #close {
1278
+ display: none;
1279
+ visibility: hidden;
1280
+ z-index: -1;
1281
+ opacity: 0;
1282
+ }
1283
+
1284
+ @-webkit-keyframes colorchange {
1285
+ 0% {
1286
+ background: #fff;
1287
+ }
1288
+ 100% {
1289
+ background: #f4f4f4;
1290
+ }
1291
+ }
1292
+
1293
+ @keyframes colorchange {
1294
+ 0% {
1295
+ background: #fff;
1296
+ }
1297
+ 100% {
1298
+ background: #f4f4f4;
1299
+ }
1300
+ }
1301
+
1302
+ .chevron {
1303
+ display: block;
1304
+ position: absolute;
1305
+ z-index: 1;
1306
+ top: 58%;
1307
+ right: 10px;
1308
+ -webkit-transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1309
+ transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1310
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1311
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), -ms-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1312
+ }
1313
+
1314
+ .chevron::before,
1315
+ .chevron::after {
1316
+ display: block;
1317
+ position: absolute;
1318
+ z-index: 1;
1319
+ top: 50%;
1320
+ width: 10px;
1321
+ height: 2px;
1322
+ border-radius: 2px;
1323
+ background: #d1d1d1;
1324
+ content: " ";
1325
+ -webkit-transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1326
+ transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1327
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1328
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), -ms-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1329
+ -webkit-backface-visibility: hidden;
1330
+ backface-visibility: hidden;
1331
+ }
1332
+
1333
+ .chevron::before {
1334
+ right: 50%;
1335
+ -webkit-transform: rotate(40deg) scaleY(1);
1336
+ -ms-transform: rotate(40deg) scaleY(1);
1337
+ transform: rotate(40deg) scaleY(1);
1338
+ -webkit-transform-origin: 100% 100%;
1339
+ -ms-transform-origin: 100% 100%;
1340
+ transform-origin: 100% 100%;
1341
+ }
1342
+
1343
+ .chevron::after {
1344
+ left: 50%;
1345
+ -webkit-transform: rotate(-40deg) scaleY(1);
1346
+ -ms-transform: rotate(-40deg) scaleY(1);
1347
+ transform: rotate(-40deg) scaleY(1);
1348
+ -webkit-transform-origin: 0 100%;
1349
+ -ms-transform-origin: 0 100%;
1350
+ transform-origin: 0 100%;
1351
+ }
1352
+
1353
+ .merlin__drawer--open .chevron {
1354
+ top: 44%;
1355
+ }
1356
+
1357
+ .merlin__drawer--open .chevron::before {
1358
+ -webkit-transform: rotate(-40deg) scaleY(1);
1359
+ -ms-transform: rotate(-40deg) scaleY(1);
1360
+ transform: rotate(-40deg) scaleY(1);
1361
+ -webkit-transform-origin: 100% 0;
1362
+ -ms-transform-origin: 100% 0;
1363
+ transform-origin: 100% 0;
1364
+ }
1365
+
1366
+ .merlin__drawer--open .chevron::after {
1367
+ -webkit-transform: rotate(40deg) scaleY(1);
1368
+ -ms-transform: rotate(40deg) scaleY(1);
1369
+ transform: rotate(40deg) scaleY(1);
1370
+ -webkit-transform-origin: 0 0;
1371
+ -ms-transform-origin: 0 0;
1372
+ transform-origin: 0 0;
1373
+ }
1374
+
1375
+ .merlin-spinner {
1376
+ display: block;
1377
+ position: absolute;
1378
+ top: calc( 50% - 10px);
1379
+ left: calc( 50% - 10px);
1380
+ width: 20px;
1381
+ height: 20px;
1382
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 50ms;
1383
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 50ms;
1384
+ -webkit-animation: container-rotate 1600ms linear infinite;
1385
+ animation: container-rotate 1600ms linear infinite;
1386
+ }
1387
+
1388
+ .exiting .merlin-spinner {
1389
+ opacity: 0;
1390
+ }
1391
+
1392
+ .merlin-spinner-line {
1393
+ display: block;
1394
+ position: absolute;
1395
+ width: 100%;
1396
+ height: 100%;
1397
+ opacity: 0;
1398
+ -webkit-transition: border-color 300ms cubic-bezier(0.694, 0, 0.335, 1);
1399
+ transition: border-color 300ms cubic-bezier(0.694, 0, 0.335, 1);
1400
+ }
1401
+
1402
+ .merlin-spinner-line--1 {
1403
+ border-color: #ed1c25;
1404
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-1-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1405
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-1-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1406
+ }
1407
+
1408
+ .merlin-spinner-line--2 {
1409
+ border-color: #ed1c25;
1410
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-2-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1411
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-2-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1412
+ }
1413
+
1414
+ .merlin-spinner-line--3 {
1415
+ border-color: #ed1c25;
1416
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-3-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1417
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-3-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1418
+ }
1419
+
1420
+ .merlin-spinner-line--4 {
1421
+ border-color: #ed1c25;
1422
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-4-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1423
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-4-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1424
+ }
1425
+
1426
+ .merlin-spinner-line-ticker {
1427
+ overflow: hidden;
1428
+ position: absolute;
1429
+ top: 0;
1430
+ left: 45%;
1431
+ box-sizing: border-box;
1432
+ width: 20%;
1433
+ height: 100%;
1434
+ border-color: inherit;
1435
+ }
1436
+
1437
+ .merlin-spinner-line-cog {
1438
+ display: inline-block;
1439
+ overflow: hidden;
1440
+ position: relative;
1441
+ width: 50%;
1442
+ height: 100%;
1443
+ border-color: inherit;
1444
+ }
1445
+
1446
+ .merlin-spinner-line-cog-inner {
1447
+ position: absolute;
1448
+ top: 0;
1449
+ right: 0;
1450
+ bottom: 0;
1451
+ left: 0;
1452
+ box-sizing: border-box;
1453
+ width: 200%;
1454
+ height: 100%;
1455
+ border-width: 3px;
1456
+ border-style: solid;
1457
+ border-color: inherit;
1458
+ border-bottom-color: transparent;
1459
+ border-radius: 50%;
1460
+ -webkit-animation: none;
1461
+ animation: none;
1462
+ }
1463
+
1464
+ .merlin-spinner-line-cog-inner--left {
1465
+ border-right-color: transparent;
1466
+ -webkit-transform: rotate(129deg);
1467
+ -ms-transform: rotate(129deg);
1468
+ transform: rotate(129deg);
1469
+ -webkit-animation: left-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1470
+ animation: left-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1471
+ }
1472
+
1473
+ .merlin-spinner-line-cog-inner--right {
1474
+ left: -100%;
1475
+ border-left-color: transparent;
1476
+ -webkit-transform: rotate(-129deg);
1477
+ -ms-transform: rotate(-129deg);
1478
+ transform: rotate(-129deg);
1479
+ -webkit-animation: right-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1480
+ animation: right-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1481
+ }
1482
+
1483
+ .merlin-spinner-line-cog-inner--center {
1484
+ left: -450%;
1485
+ width: 1000%;
1486
+ }
1487
+
1488
+ @-webkit-keyframes container-rotate {
1489
+ to {
1490
+ -webkit-transform: rotate(360deg);
1491
+ transform: rotate(360deg);
1492
+ }
1493
+ }
1494
+
1495
+ @keyframes container-rotate {
1496
+ to {
1497
+ -webkit-transform: rotate(360deg);
1498
+ transform: rotate(360deg);
1499
+ }
1500
+ }
1501
+
1502
+ @-webkit-keyframes fill-unfill-rotate {
1503
+ 12.5% {
1504
+ -webkit-transform: rotate(135deg);
1505
+ transform: rotate(135deg);
1506
+ }
1507
+ 25% {
1508
+ -webkit-transform: rotate(270deg);
1509
+ transform: rotate(270deg);
1510
+ }
1511
+ 37.5% {
1512
+ -webkit-transform: rotate(405deg);
1513
+ transform: rotate(405deg);
1514
+ }
1515
+ 50% {
1516
+ -webkit-transform: rotate(540deg);
1517
+ transform: rotate(540deg);
1518
+ }
1519
+ 62.5% {
1520
+ -webkit-transform: rotate(675deg);
1521
+ transform: rotate(675deg);
1522
+ }
1523
+ 75% {
1524
+ -webkit-transform: rotate(810deg);
1525
+ transform: rotate(810deg);
1526
+ }
1527
+ 87.5% {
1528
+ -webkit-transform: rotate(945deg);
1529
+ transform: rotate(945deg);
1530
+ }
1531
+ to {
1532
+ -webkit-transform: rotate(1080deg);
1533
+ transform: rotate(1080deg);
1534
+ }
1535
+ }
1536
+
1537
+ @keyframes fill-unfill-rotate {
1538
+ 12.5% {
1539
+ -webkit-transform: rotate(135deg);
1540
+ transform: rotate(135deg);
1541
+ }
1542
+ 25% {
1543
+ -webkit-transform: rotate(270deg);
1544
+ transform: rotate(270deg);
1545
+ }
1546
+ 37.5% {
1547
+ -webkit-transform: rotate(405deg);
1548
+ transform: rotate(405deg);
1549
+ }
1550
+ 50% {
1551
+ -webkit-transform: rotate(540deg);
1552
+ transform: rotate(540deg);
1553
+ }
1554
+ 62.5% {
1555
+ -webkit-transform: rotate(675deg);
1556
+ transform: rotate(675deg);
1557
+ }
1558
+ 75% {
1559
+ -webkit-transform: rotate(810deg);
1560
+ transform: rotate(810deg);
1561
+ }
1562
+ 87.5% {
1563
+ -webkit-transform: rotate(945deg);
1564
+ transform: rotate(945deg);
1565
+ }
1566
+ to {
1567
+ -webkit-transform: rotate(1080deg);
1568
+ transform: rotate(1080deg);
1569
+ }
1570
+ }
1571
+
1572
+ @-webkit-keyframes left-spin {
1573
+ 0% {
1574
+ -webkit-transform: rotate(130deg);
1575
+ transform: rotate(130deg);
1576
+ }
1577
+ 50% {
1578
+ -webkit-transform: rotate(-5deg);
1579
+ transform: rotate(-5deg);
1580
+ }
1581
+ to {
1582
+ -webkit-transform: rotate(130deg);
1583
+ transform: rotate(130deg);
1584
+ }
1585
+ }
1586
+
1587
+ @keyframes left-spin {
1588
+ 0% {
1589
+ -webkit-transform: rotate(130deg);
1590
+ transform: rotate(130deg);
1591
+ }
1592
+ 50% {
1593
+ -webkit-transform: rotate(-5deg);
1594
+ transform: rotate(-5deg);
1595
+ }
1596
+ to {
1597
+ -webkit-transform: rotate(130deg);
1598
+ transform: rotate(130deg);
1599
+ }
1600
+ }
1601
+
1602
+ @-webkit-keyframes right-spin {
1603
+ 0% {
1604
+ -webkit-transform: rotate(-130deg);
1605
+ transform: rotate(-130deg);
1606
+ }
1607
+ 50% {
1608
+ -webkit-transform: rotate(5deg);
1609
+ transform: rotate(5deg);
1610
+ }
1611
+ to {
1612
+ -webkit-transform: rotate(-130deg);
1613
+ transform: rotate(-130deg);
1614
+ }
1615
+ }
1616
+
1617
+ @keyframes right-spin {
1618
+ 0% {
1619
+ -webkit-transform: rotate(-130deg);
1620
+ transform: rotate(-130deg);
1621
+ }
1622
+ 50% {
1623
+ -webkit-transform: rotate(5deg);
1624
+ transform: rotate(5deg);
1625
+ }
1626
+ to {
1627
+ -webkit-transform: rotate(-130deg);
1628
+ transform: rotate(-130deg);
1629
+ }
1630
+ }
1631
+
1632
+ @-webkit-keyframes line-1-fade-in-out {
1633
+ 0% {
1634
+ opacity: 1;
1635
+ }
1636
+ 25% {
1637
+ opacity: 1;
1638
+ }
1639
+ 26% {
1640
+ opacity: 0;
1641
+ }
1642
+ 89% {
1643
+ opacity: 0;
1644
+ }
1645
+ 90% {
1646
+ opacity: 1;
1647
+ }
1648
+ to {
1649
+ opacity: 1;
1650
+ }
1651
+ }
1652
+
1653
+ @keyframes line-1-fade-in-out {
1654
+ 0% {
1655
+ opacity: 1;
1656
+ }
1657
+ 25% {
1658
+ opacity: 1;
1659
+ }
1660
+ 26% {
1661
+ opacity: 0;
1662
+ }
1663
+ 89% {
1664
+ opacity: 0;
1665
+ }
1666
+ 90% {
1667
+ opacity: 1;
1668
+ }
1669
+ to {
1670
+ opacity: 1;
1671
+ }
1672
+ }
1673
+
1674
+ @-webkit-keyframes line-2-fade-in-out {
1675
+ 0% {
1676
+ opacity: 0;
1677
+ }
1678
+ 15% {
1679
+ opacity: 0;
1680
+ }
1681
+ 25% {
1682
+ opacity: 1;
1683
+ }
1684
+ 50% {
1685
+ opacity: 1;
1686
+ }
1687
+ 51% {
1688
+ opacity: 0;
1689
+ }
1690
+ }
1691
+
1692
+ @keyframes line-2-fade-in-out {
1693
+ 0% {
1694
+ opacity: 0;
1695
+ }
1696
+ 15% {
1697
+ opacity: 0;
1698
+ }
1699
+ 25% {
1700
+ opacity: 1;
1701
+ }
1702
+ 50% {
1703
+ opacity: 1;
1704
+ }
1705
+ 51% {
1706
+ opacity: 0;
1707
+ }
1708
+ }
1709
+
1710
+ @-webkit-keyframes line-3-fade-in-out {
1711
+ 0% {
1712
+ opacity: 0;
1713
+ }
1714
+ 40% {
1715
+ opacity: 0;
1716
+ }
1717
+ 50% {
1718
+ opacity: 1;
1719
+ }
1720
+ 75% {
1721
+ opacity: 1;
1722
+ }
1723
+ 76% {
1724
+ opacity: 0;
1725
+ }
1726
+ }
1727
+
1728
+ @keyframes line-3-fade-in-out {
1729
+ 0% {
1730
+ opacity: 0;
1731
+ }
1732
+ 40% {
1733
+ opacity: 0;
1734
+ }
1735
+ 50% {
1736
+ opacity: 1;
1737
+ }
1738
+ 75% {
1739
+ opacity: 1;
1740
+ }
1741
+ 76% {
1742
+ opacity: 0;
1743
+ }
1744
+ }
1745
+
1746
+ @-webkit-keyframes line-4-fade-in-out {
1747
+ 0% {
1748
+ opacity: 0;
1749
+ }
1750
+ 65% {
1751
+ opacity: 0;
1752
+ }
1753
+ 75% {
1754
+ opacity: 1;
1755
+ }
1756
+ 90% {
1757
+ opacity: 1;
1758
+ }
1759
+ to {
1760
+ opacity: 0;
1761
+ }
1762
+ }
1763
+
1764
+ @keyframes line-4-fade-in-out {
1765
+ 0% {
1766
+ opacity: 0;
1767
+ }
1768
+ 65% {
1769
+ opacity: 0;
1770
+ }
1771
+ 75% {
1772
+ opacity: 1;
1773
+ }
1774
+ 90% {
1775
+ opacity: 1;
1776
+ }
1777
+ to {
1778
+ opacity: 0;
1779
+ }
1780
+ }
1781
+
1782
+ .return-to-dashboard {
1783
+ display: block;
1784
+ margin-top: 1em;
1785
+ padding: 1em;
1786
+ color: #b5b5b5;
1787
+ font-size: 13px;
1788
+ text-align: center;
1789
+ text-decoration: none;
1790
+ -webkit-transition: color 150ms ease, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;
1791
+ transition: color 150ms ease, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;
1792
+ /* Applies styles when Reduced Motion is enabled */
1793
+ }
1794
+
1795
+ @media screen and (prefers-reduced-motion: reduce) {
1796
+ .return-to-dashboard {
1797
+ opacity: 1 !important;
1798
+ }
1799
+ }
1800
+
1801
+ .merlin__body--welcome .return-to-dashboard {
1802
+ opacity: 0;
1803
+ }
1804
+
1805
+ .merlin__body--welcome.loaded .return-to-dashboard {
1806
+ opacity: 1;
1807
+ }
1808
+
1809
+ .return-to-dashboard:hover {
1810
+ color: #ed1c25;
1811
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.06);
1812
+ }
1813
+
1814
+ .merlin__drawer {
1815
+ overflow: hidden;
1816
+ max-height: 0;
1817
+ margin: 0;
1818
+ opacity: 0;
1819
+ -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1820
+ transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1821
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms;
1822
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1823
+ pointer-events: none;
1824
+ }
1825
+
1826
+ .merlin__drawer li {
1827
+ position: relative;
1828
+ margin: 0;
1829
+ padding: 4px 0;
1830
+ opacity: 0;
1831
+ text-align: center;
1832
+ -webkit-transition: 0.25s ease;
1833
+ transition: 0.25s ease;
1834
+ -webkit-transform: translate3d(0, -15px, 0);
1835
+ transform: translate3d(0, -15px, 0);
1836
+ }
1837
+
1838
+ .merlin__drawer li:last-child {
1839
+ padding-bottom: 0;
1840
+ }
1841
+
1842
+ .merlin__drawer li:nth-of-type(10) {
1843
+ -webkit-transition-delay: 0.2s;
1844
+ transition-delay: 0.2s;
1845
+ }
1846
+
1847
+ .merlin__drawer li:nth-of-type(9) {
1848
+ -webkit-transition-delay: 0.18s;
1849
+ transition-delay: 0.18s;
1850
+ }
1851
+
1852
+ .merlin__drawer li:nth-of-type(8) {
1853
+ -webkit-transition-delay: 0.16s;
1854
+ transition-delay: 0.16s;
1855
+ }
1856
+
1857
+ .merlin__drawer li:nth-of-type(7) {
1858
+ -webkit-transition-delay: 0.14s;
1859
+ transition-delay: 0.14s;
1860
+ }
1861
+
1862
+ .merlin__drawer li:nth-of-type(6) {
1863
+ -webkit-transition-delay: 0.12s;
1864
+ transition-delay: 0.12s;
1865
+ }
1866
+
1867
+ .merlin__drawer li:nth-of-type(5) {
1868
+ -webkit-transition-delay: 0.1s;
1869
+ transition-delay: 0.1s;
1870
+ }
1871
+
1872
+ .merlin__drawer li:nth-of-type(4) {
1873
+ -webkit-transition-delay: 0.08s;
1874
+ transition-delay: 0.08s;
1875
+ }
1876
+
1877
+ .merlin__drawer li:nth-of-type(3) {
1878
+ -webkit-transition-delay: 0.06s;
1879
+ transition-delay: 0.06s;
1880
+ }
1881
+
1882
+ .merlin__drawer li:nth-of-type(2) {
1883
+ -webkit-transition-delay: 0.04s;
1884
+ transition-delay: 0.04s;
1885
+ }
1886
+
1887
+ .merlin__drawer li:nth-of-type(1) {
1888
+ -webkit-transition-delay: 0.02s;
1889
+ transition-delay: 0.02s;
1890
+ }
1891
+
1892
+ .merlin__drawer--open .merlin__drawer {
1893
+ max-height: 400px;
1894
+ opacity: 1;
1895
+ -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1896
+ transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1897
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms;
1898
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1899
+ -webkit-transform: translateY(0%);
1900
+ -ms-transform: translateY(0%);
1901
+ transform: translateY(0%);
1902
+ pointer-events: inherit;
1903
+ }
1904
+
1905
+ .merlin__drawer--open .merlin__drawer li {
1906
+ opacity: 1;
1907
+ -webkit-transition: 0.4s ease;
1908
+ transition: 0.4s ease;
1909
+ -webkit-transform: translate3d(0, 0, 0);
1910
+ transform: translate3d(0, 0, 0);
1911
+ }
1912
+
1913
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(1) {
1914
+ -webkit-transition-delay: 0.15s;
1915
+ transition-delay: 0.15s;
1916
+ }
1917
+
1918
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(2) {
1919
+ -webkit-transition-delay: 0.3s;
1920
+ transition-delay: 0.3s;
1921
+ }
1922
+
1923
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(3) {
1924
+ -webkit-transition-delay: 0.45s;
1925
+ transition-delay: 0.45s;
1926
+ }
1927
+
1928
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(4) {
1929
+ -webkit-transition-delay: 0.6s;
1930
+ transition-delay: 0.6s;
1931
+ }
1932
+
1933
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(5) {
1934
+ -webkit-transition-delay: 0.75s;
1935
+ transition-delay: 0.75s;
1936
+ }
1937
+
1938
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(6) {
1939
+ -webkit-transition-delay: 0.9s;
1940
+ transition-delay: 0.9s;
1941
+ }
1942
+
1943
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(7) {
1944
+ -webkit-transition-delay: 1.05s;
1945
+ transition-delay: 1.05s;
1946
+ }
1947
+
1948
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(8) {
1949
+ -webkit-transition-delay: 1.2s;
1950
+ transition-delay: 1.2s;
1951
+ }
1952
+
1953
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(9) {
1954
+ -webkit-transition-delay: 1.35s;
1955
+ transition-delay: 1.35s;
1956
+ }
1957
+
1958
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(10) {
1959
+ -webkit-transition-delay: 1.5s;
1960
+ transition-delay: 1.5s;
1961
+ }
1962
+
1963
+ .merlin__drawer--open .merlin__button--knockout {
1964
+ color: #a1a5a8;
1965
+ }
1966
+
1967
+ .merlin__drawer--open .chevron::after,
1968
+ .merlin__drawer--open .chevron::before {
1969
+ background: #a1a5a8;
1970
+ }
1971
+
1972
+ .merlin__drawer--open .merlin__button--next {
1973
+ -webkit-animation: colorchange 1s infinite alternate 1000ms;
1974
+ animation: colorchange 1s infinite alternate 1000ms;
1975
+ }
1976
+
1977
+ .merlin__drawer--open .merlin__button--loading {
1978
+ -webkit-animation: none;
1979
+ animation: none;
1980
+ }
1981
+
1982
+ .merlin__drawer--open #skip {
1983
+ display: none;
1984
+ visibility: hidden;
1985
+ z-index: -1;
1986
+ opacity: 0;
1987
+ }
1988
+
1989
+ .merlin__drawer--open #close {
1990
+ display: inline-block;
1991
+ visibility: visible;
1992
+ z-index: 1;
1993
+ opacity: 1;
1994
+ }
1995
+
1996
+ .merlin__drawer--import-content {
1997
+ padding-top: 3px;
1998
+ }
1999
+
2000
+ .merlin__drawer--import-content li {
2001
+ padding: 2px 0px;
2002
+ text-align: left;
2003
+ }
2004
+
2005
+ .merlin__drawer--import-content li:hover span {
2006
+ color: #ed1c25;
2007
+ }
2008
+
2009
+ .merlin__drawer--import-content label {
2010
+ display: inline-block;
2011
+ position: relative;
2012
+ width: 100%;
2013
+ cursor: pointer;
2014
+ }
2015
+
2016
+ .merlin__drawer--import-content label span {
2017
+ -webkit-transition: color 100ms;
2018
+ transition: color 100ms;
2019
+ }
2020
+
2021
+ .merlin__drawer--import-content label i {
2022
+ display: inline-block;
2023
+ float: right;
2024
+ position: relative;
2025
+ width: 13px;
2026
+ height: 13px;
2027
+ margin-top: 3px;
2028
+ border: 2px solid #b2b7ba;
2029
+ border-radius: 50%;
2030
+ background-color: transparent;
2031
+ text-align: left;
2032
+ -webkit-transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2033
+ transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2034
+ transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2035
+ transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89), -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2036
+ -webkit-transform-origin: center;
2037
+ -ms-transform-origin: center;
2038
+ transform-origin: center;
2039
+ }
2040
+
2041
+ .merlin__drawer--import-content label i:before {
2042
+ position: absolute;
2043
+ top: 0.4em;
2044
+ left: 0.2em;
2045
+ width: 0;
2046
+ height: 2px;
2047
+ border-radius: 2px;
2048
+ background: #ed1c25;
2049
+ content: "";
2050
+ -webkit-transition: width 50ms ease 50ms;
2051
+ transition: width 50ms ease 50ms;
2052
+ -webkit-transform: rotate(45deg);
2053
+ -ms-transform: rotate(45deg);
2054
+ transform: rotate(45deg);
2055
+ -webkit-transform-origin: 0 0;
2056
+ -ms-transform-origin: 0 0;
2057
+ transform-origin: 0 0;
2058
+ }
2059
+
2060
+ .merlin__drawer--import-content label i:after {
2061
+ position: absolute;
2062
+ top: 0.67em;
2063
+ left: 4px;
2064
+ width: 0;
2065
+ height: 2px;
2066
+ border-radius: 2px;
2067
+ background: #ed1c25;
2068
+ content: "";
2069
+ -webkit-transition: width 50ms ease;
2070
+ transition: width 50ms ease;
2071
+ -webkit-transform: rotate(310deg);
2072
+ -ms-transform: rotate(310deg);
2073
+ transform: rotate(310deg);
2074
+ -webkit-transform-origin: 0 0;
2075
+ -ms-transform-origin: 0 0;
2076
+ transform-origin: 0 0;
2077
+ }
2078
+
2079
+ .merlin__drawer--import-content label:hover i {
2080
+ border-color: #ed1c25;
2081
+ }
2082
+
2083
+ .merlin__drawer--import-content .checkbox {
2084
+ display: none !important;
2085
+ }
2086
+
2087
+ .merlin__drawer--import-content .checkbox:checked + label.installing i {
2088
+ border-color: #ffb900;
2089
+ background-color: #ffb900;
2090
+ -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1);
2091
+ transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1);
2092
+ }
2093
+
2094
+ .merlin__drawer--import-content .checkbox:checked + label.success i {
2095
+ border-color: #46b450;
2096
+ background-color: #46b450;
2097
+ -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2098
+ transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2099
+ }
2100
+
2101
+ .merlin__drawer--import-content .checkbox:checked + label.error i {
2102
+ border-color: #d54e21;
2103
+ background-color: #d54e21;
2104
+ -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2105
+ transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2106
+ }
2107
+
2108
+ .merlin__drawer--import-content .checkbox:checked + label i {
2109
+ border-color: #ed1c25;
2110
+ background-color: #ed1c25;
2111
+ -webkit-transform: scale(1.2);
2112
+ -ms-transform: scale(1.2);
2113
+ transform: scale(1.2);
2114
+ }
2115
+
2116
+ .merlin__drawer--import-content .checkbox:checked + label i:after {
2117
+ width: 9px;
2118
+ background: #fff;
2119
+ -webkit-transition: width 50ms ease 100ms;
2120
+ transition: width 50ms ease 100ms;
2121
+ }
2122
+
2123
+ .merlin__drawer--import-content .checkbox:checked + label i:before {
2124
+ width: 5px;
2125
+ background: #fff;
2126
+ -webkit-transition: width 50ms ease 100ms;
2127
+ transition: width 50ms ease 100ms;
2128
+ }
2129
+
2130
+ .merlin__drawer--open .merlin__drawer--install-plugins {
2131
+ padding-bottom: 1px;
2132
+ }
2133
+
2134
+ .merlin__drawer--install-plugins li span {
2135
+ display: none;
2136
+ }
2137
+
2138
+ .merlin__drawer--install-plugins li .spinner {
2139
+ display: inline-block;
2140
+ visibility: visible;
2141
+ position: absolute;
2142
+ right: 10px;
2143
+ margin-top: 2px;
2144
+ opacity: 0;
2145
+ -webkit-transition: opacity 200ms cubic-bezier(0.694, 0, 0.335, 1);
2146
+ transition: opacity 200ms cubic-bezier(0.694, 0, 0.335, 1);
2147
+ }
2148
+
2149
+ .merlin__drawer--install-plugins.installing li .spinner {
2150
+ opacity: 1;
2151
+ }
2152
+
2153
+ .merlin__drawer--install-plugins.installing li span {
2154
+ opacity: 0;
2155
+ }
2156
+
2157
+ .merlin__drawer--open .merlin__drawer--extras {
2158
+ padding-bottom: 30px;
2159
+ }
2160
+
2161
+ .icon--checkmark {
2162
+ display: none;
2163
+ position: absolute;
2164
+ top: -110px;
2165
+ left: calc( 50% - 40px);
2166
+ width: 80px;
2167
+ height: 80px;
2168
+ border-radius: 50%;
2169
+ box-shadow: inset 0 0 0 #46b450;
2170
+ -webkit-animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both;
2171
+ animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both;
2172
+
2173
+ stroke: #fff;
2174
+ stroke-miterlimit: 10;
2175
+ stroke-width: 2;
2176
+ }
2177
+
2178
+ .js--finished .icon--checkmark {
2179
+ display: inline-block;
2180
+ }
2181
+
2182
+ .icon--checkmark__check {
2183
+ -webkit-transform-origin: 50% 50%;
2184
+ -ms-transform-origin: 50% 50%;
2185
+ transform-origin: 50% 50%;
2186
+ -webkit-animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
2187
+ animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
2188
+
2189
+ stroke-dasharray: 48;
2190
+ stroke-dashoffset: 48;
2191
+ }
2192
+
2193
+ .icon--checkmark__circle {
2194
+ -webkit-animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
2195
+ animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
2196
+
2197
+ fill: none;
2198
+ stroke: #46b450;
2199
+ stroke-dasharray: 166;
2200
+ stroke-dashoffset: 166;
2201
+ stroke-miterlimit: 10;
2202
+ stroke-width: 2;
2203
+ }
2204
+
2205
+ @-webkit-keyframes stroke {
2206
+ 100% {
2207
+ stroke-dashoffset: 0;
2208
+ }
2209
+ }
2210
+
2211
+ @keyframes stroke {
2212
+ 100% {
2213
+ stroke-dashoffset: 0;
2214
+ }
2215
+ }
2216
+
2217
+ @-webkit-keyframes scale {
2218
+ 0%,
2219
+ 100% {
2220
+ -webkit-transform: none;
2221
+ transform: none;
2222
+ }
2223
+ 50% {
2224
+ -webkit-transform: scale3d(1.1, 1.1, 1);
2225
+ transform: scale3d(1.1, 1.1, 1);
2226
+ }
2227
+ }
2228
+
2229
+ @keyframes scale {
2230
+ 0%,
2231
+ 100% {
2232
+ -webkit-transform: none;
2233
+ transform: none;
2234
+ }
2235
+ 50% {
2236
+ -webkit-transform: scale3d(1.1, 1.1, 1);
2237
+ transform: scale3d(1.1, 1.1, 1);
2238
+ }
2239
+ }
2240
+
2241
+ @-webkit-keyframes fill {
2242
+ 100% {
2243
+ box-shadow: inset 0 0 0 100px #46b450;
2244
+ }
2245
+ }
2246
+
2247
+ @keyframes fill {
2248
+ 100% {
2249
+ box-shadow: inset 0 0 0 100px #46b450;
2250
+ }
2251
+ }
2252
+
2253
+ .merlin__content__footer {
2254
+ clear: both;
2255
+ margin-top: 2.75em;
2256
+ }
2257
+
2258
+ .merlin__content__footer {
2259
+ *zoom: 1;
2260
+ }
2261
+
2262
+ .merlin__content__footer:before,
2263
+ .merlin__content__footer:after {
2264
+ display: table;
2265
+ content: "";
2266
+ }
2267
+
2268
+ .merlin__content__footer:after {
2269
+ clear: both;
2270
+ }
2271
+
2272
+ .merlin__content__footer--fullwidth {
2273
+ opacity: 0;
2274
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2275
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2276
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2277
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2278
+ -webkit-transform: translateX(50%);
2279
+ -ms-transform: translateX(50%);
2280
+ transform: translateX(50%);
2281
+ -webkit-transform-origin: top;
2282
+ -ms-transform-origin: top;
2283
+ transform-origin: top;
2284
+
2285
+ -webkit-filter: blur(10px);
2286
+ filter: blur(10px);
2287
+ /* Applies styles when Reduced Motion is enabled */
2288
+ }
2289
+
2290
+ @media screen and (prefers-reduced-motion: reduce) {
2291
+ .merlin__content__footer--fullwidth {
2292
+ -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
2293
+ transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
2294
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out;
2295
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
2296
+ -webkit-transform: translateX(0);
2297
+ -ms-transform: translateX(0);
2298
+ transform: translateX(0);
2299
+
2300
+ -webkit-filter: blur(2px);
2301
+ filter: blur(2px);
2302
+ }
2303
+ }
2304
+
2305
+ body.loaded .merlin__content__footer--fullwidth {
2306
+ opacity: 1;
2307
+ -webkit-transform: translateX(0);
2308
+ -ms-transform: translateX(0);
2309
+ transform: translateX(0);
2310
+
2311
+ -webkit-filter: blur(0);
2312
+ filter: blur(0);
2313
+ }
2314
+
2315
+ .merlin__content--license .merlin__content__footer {
2316
+ margin-top: -0.24em;
2317
+ }
2318
+
2319
+ .merlin__content--ready .merlin__content__footer {
2320
+ margin-top: 1.9em;
2321
+ }
2322
+
2323
+ .merlin__content--ready .merlin__content__footer .merlin__button--knockout {
2324
+ margin-top: 10px;
2325
+ }
2326
+
2327
+ .merlin__content--content .merlin__content__footer {
2328
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
2329
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
2330
+ }
2331
+
2332
+ body.exiting .merlin__content--content .merlin__content__footer {
2333
+ opacity: 0;
2334
+ }
2335
+
2336
+ /* Custom */
2337
+ .saswp_install_wizard{
2338
+ text-align: center;
2339
+ font-size: 12px;
2340
+ text-transform: uppercase;
2341
+ letter-spacing: 1px;
2342
+ color: rgba(0, 0, 0, 0.3);
2343
+ }
2344
+ .saswp_branding{
2345
+ background-image: url(../images/sd-logo-white.png);
2346
+ padding: 40px;
2347
+ background-size: 80px;
2348
+ background-repeat: no-repeat;
2349
+ position: absolute;
2350
+ left: calc( 50% - 40px);
2351
+ top: -110px;
2352
+
2353
+ }
2354
+ .merlin__button--loading:before{
2355
+ background-image: url(data:image/gif;base64,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);
2356
+ content: " ";
2357
+ display: inline-block;
2358
+ background-size: 30px;
2359
+ background-repeat: no-repeat;
2360
+ width: 53px;
2361
+ height: 35px;
2362
+ position: absolute;
2363
+ right: -3px;
2364
+ top: 3px;
2365
+ opacity: 0.7;
2366
+ background-position: 0px 3px;
2367
+ }
2368
+ body .amp_install_center {text-align: center}
2369
+ #ampforwp-design-select{
2370
+ width: 170px;
2371
+ height: 30px;
2372
+ position: relative;
2373
+ top: -15px;
2374
+ }
2375
+ .amp_install_theme_preview{
2376
+ margin-bottom: -30px;
2377
+ }
2378
+ .amp_install_logo_preview{
2379
+ max-width: 180px;
2380
+ height: auto;
2381
+ border-radius: 8px;
2382
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.25);
2383
+ }
2384
+ .saswp_fields{
2385
+ width: 100%;
2386
+ }
2387
+ .saswp_fields label{
2388
+ width: 40%;
2389
+ display: inline-block;
2390
+ }
2391
+ .saswp_fields select{
2392
+ width: 50%;
2393
+ }
2394
+ .saswp-placement-or-group{
2395
+ text-decoration: none;
2396
+ margin-left: 8px;
2397
+ margin-bottom: 8px;
2398
+ align-items: flex-start;
2399
+ text-align: center;
2400
+ cursor: pointer;
2401
+ color: buttontext;
2402
+ background-color: buttonface;
2403
+ box-sizing: border-box;
2404
+ padding: 2px 6px 3px;
2405
+ border-width: 2px;
2406
+ border-style: outset;
2407
+ }
2408
+ .option-table-class select{
2409
+ width: 100%;
2410
+ }
2411
+ .option-table-class input[type=text]{
2412
+ width: 100%;
2413
+ }
2414
+ .option-table-class{
2415
+ width: 100%;
2416
+ }
2417
+ .saswp-placement-button{
2418
+ padding: 3px 10px;
2419
+ color: #0d0d0d;
2420
+ font-size: 14px;
2421
+ border: 1px solid #aaa;
2422
+ border-radius: 2px;
2423
+ background: linear-gradient(#ededed, #ffffff);
2424
+ }
2425
+ .saswp-placement-table td {
2426
+ padding: 5px 10px !important;
2427
+ }
2428
+ .saswp-placement-group{
2429
+ margin-bottom: 5px;
2430
+ }
2431
+ #saswp_amp_select{
2432
+ border: 0px;
2433
+ }
admin_section/css/saswp-install.css ADDED
@@ -0,0 +1,2399 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .merlin__body {
2
+ display: -webkit-box;
3
+ display: -webkit-flex;
4
+ display: -ms-flexbox;
5
+ display: flex;
6
+ box-sizing: border-box;
7
+ margin: 0 auto;
8
+ padding: 0 !important;
9
+ background: #f1f1f1;
10
+ box-shadow: none;
11
+ font-size: 14px;
12
+ line-height: 1.7em;
13
+
14
+ -webkit-align-items: center;
15
+ align-items: center;
16
+ -webkit-box-align: center;
17
+ -webkit-box-pack: center;
18
+ -ms-flex-align: center;
19
+ -ms-flex-pack: center;
20
+ -webkit-justify-content: center;
21
+ justify-content: center;
22
+ }
23
+
24
+ h1 {
25
+ margin: 0 0 20px;
26
+ padding: 0;
27
+ border: 0;
28
+ color: #444;
29
+ font-size: 20px;
30
+ font-weight: 500;
31
+ -webkit-font-smoothing: antialiased;
32
+ -moz-osx-font-smoothing: grayscale;
33
+ }
34
+
35
+ p {
36
+ margin: 0;
37
+ font-size: 14px;
38
+ line-height: 1.7em;
39
+ }
40
+
41
+ .merlin__input {
42
+ display: block;
43
+ width: 70%;
44
+ margin: 14px auto 0;
45
+ padding: 4px 8px;
46
+ border-radius: 3px;
47
+ font-size: 12px;
48
+ }
49
+
50
+ .lead + .merlin__button--knockout {
51
+ z-index: -1;
52
+ }
53
+
54
+ p.lead {
55
+ z-index: 9999;
56
+ -webkit-animation: vanishOut 800ms linear alternate;
57
+ animation: vanishOut 800ms linear alternate;
58
+ }
59
+
60
+ p.success {
61
+ -webkit-animation: vanishIn 700ms linear alternate;
62
+ animation: vanishIn 700ms linear alternate;
63
+ }
64
+
65
+ @-webkit-keyframes vanishIn {
66
+ 0% {
67
+ opacity: 0;
68
+ -webkit-transform: scale(2, 2);
69
+ transform: scale(2, 2);
70
+ -webkit-transform-origin: 50% 50%;
71
+ transform-origin: 50% 50%;
72
+
73
+ -webkit-filter: blur(70px);
74
+ filter: blur(70px);
75
+ }
76
+ 100% {
77
+ opacity: 1;
78
+ -webkit-transform: scale(1, 1);
79
+ transform: scale(1, 1);
80
+ -webkit-transform-origin: 50% 50%;
81
+ transform-origin: 50% 50%;
82
+
83
+ -webkit-filter: blur(0px);
84
+ filter: blur(0px);
85
+ }
86
+ }
87
+
88
+ @keyframes vanishIn {
89
+ 0% {
90
+ opacity: 0;
91
+ -webkit-transform: scale(2, 2);
92
+ transform: scale(2, 2);
93
+ -webkit-transform-origin: 50% 50%;
94
+ transform-origin: 50% 50%;
95
+
96
+ -webkit-filter: blur(70px);
97
+ filter: blur(70px);
98
+ }
99
+ 100% {
100
+ opacity: 1;
101
+ -webkit-transform: scale(1, 1);
102
+ transform: scale(1, 1);
103
+ -webkit-transform-origin: 50% 50%;
104
+ transform-origin: 50% 50%;
105
+
106
+ -webkit-filter: blur(0px);
107
+ filter: blur(0px);
108
+ }
109
+ }
110
+
111
+ /* Applies styles when Reduced Motion is enabled */
112
+ @media screen and (prefers-reduced-motion: reduce) {
113
+ @-webkit-keyframes vanishIn {
114
+ 0% {
115
+ opacity: 0;
116
+ }
117
+ 100% {
118
+ opacity: 1;
119
+ }
120
+ }
121
+ @keyframes vanishIn {
122
+ 0% {
123
+ opacity: 0;
124
+ }
125
+ 100% {
126
+ opacity: 1;
127
+ }
128
+ }
129
+ }
130
+
131
+ @-webkit-keyframes vanishOut {
132
+ 0% {
133
+ opacity: 1;
134
+ -webkit-transform: scale(1, 1);
135
+ transform: scale(1, 1);
136
+ -webkit-transform-origin: 50% 50%;
137
+ transform-origin: 50% 50%;
138
+
139
+ -webkit-filter: blur(0px);
140
+ filter: blur(0px);
141
+ }
142
+ 100% {
143
+ opacity: 0;
144
+ -webkit-transform: scale(2, 2);
145
+ transform: scale(2, 2);
146
+ -webkit-transform-origin: 50% 50%;
147
+ transform-origin: 50% 50%;
148
+
149
+ -webkit-filter: blur(50px);
150
+ filter: blur(50px);
151
+ }
152
+ }
153
+
154
+ @keyframes vanishOut {
155
+ 0% {
156
+ opacity: 1;
157
+ -webkit-transform: scale(1, 1);
158
+ transform: scale(1, 1);
159
+ -webkit-transform-origin: 50% 50%;
160
+ transform-origin: 50% 50%;
161
+
162
+ -webkit-filter: blur(0px);
163
+ filter: blur(0px);
164
+ }
165
+ 100% {
166
+ opacity: 0;
167
+ -webkit-transform: scale(2, 2);
168
+ transform: scale(2, 2);
169
+ -webkit-transform-origin: 50% 50%;
170
+ transform-origin: 50% 50%;
171
+
172
+ -webkit-filter: blur(50px);
173
+ filter: blur(50px);
174
+ }
175
+ }
176
+
177
+ /* Applies styles when Reduced Motion is enabled */
178
+ @media screen and (prefers-reduced-motion: reduce) {
179
+ @-webkit-keyframes vanishOut {
180
+ 0% {
181
+ opacity: 1;
182
+ }
183
+ 100% {
184
+ opacity: 0;
185
+ }
186
+ }
187
+ @keyframes vanishOut {
188
+ 0% {
189
+ opacity: 1;
190
+ }
191
+ 100% {
192
+ opacity: 0;
193
+ }
194
+ }
195
+ }
196
+
197
+ .hidden {
198
+ display: none;
199
+ overflow: hidden;
200
+ clip: rect(1px, 1px, 1px, 1px);
201
+ position: absolute;
202
+ width: 1px;
203
+ height: 1px;
204
+ padding: 0;
205
+ border: 0;
206
+
207
+ -webkit-clip-path: circle(1% at 1% 1%);
208
+ clip-path: circle(1% at 1% 1%);
209
+ }
210
+
211
+ .huh-launcher,
212
+ .huh-container {
213
+ display: none !important;
214
+ }
215
+
216
+ .icon.icon--merlin {
217
+ position: absolute;
218
+ right: 15px;
219
+ bottom: 15px;
220
+ width: 50px;
221
+ height: 75px;
222
+ margin: 0;
223
+ }
224
+
225
+ .merlin__helper {
226
+ position: absolute;
227
+ right: 80px;
228
+ bottom: 40px;
229
+ }
230
+
231
+ @-webkit-keyframes moveup {
232
+ 0% {
233
+ opacity: 1;
234
+ -webkit-transform: translateY(0);
235
+ transform: translateY(0);
236
+ }
237
+ 30% {
238
+ opacity: 1;
239
+ -webkit-transform: translateY(-42px);
240
+ transform: translateY(-42px);
241
+ }
242
+ 90% {
243
+ opacity: 1;
244
+ -webkit-transform: translateY(-42px);
245
+ transform: translateY(-42px);
246
+ }
247
+ 100% {
248
+ opacity: 0;
249
+ -webkit-transform: translateY(-48px) scale(0.99);
250
+ transform: translateY(-48px) scale(0.99);
251
+ -webkit-transform-origin: top right;
252
+ transform-origin: top right;
253
+ }
254
+ }
255
+
256
+ @keyframes moveup {
257
+ 0% {
258
+ opacity: 1;
259
+ -webkit-transform: translateY(0);
260
+ transform: translateY(0);
261
+ }
262
+ 30% {
263
+ opacity: 1;
264
+ -webkit-transform: translateY(-42px);
265
+ transform: translateY(-42px);
266
+ }
267
+ 90% {
268
+ opacity: 1;
269
+ -webkit-transform: translateY(-42px);
270
+ transform: translateY(-42px);
271
+ }
272
+ 100% {
273
+ opacity: 0;
274
+ -webkit-transform: translateY(-48px) scale(0.99);
275
+ transform: translateY(-48px) scale(0.99);
276
+ -webkit-transform-origin: top right;
277
+ transform-origin: top right;
278
+ }
279
+ }
280
+
281
+ @-webkit-keyframes fadeout {
282
+ 0% {
283
+ opacity: 1;
284
+ }
285
+ 100% {
286
+ opacity: 0;
287
+ -webkit-transform: translateY(-30px) scale(0.94);
288
+ transform: translateY(-30px) scale(0.94);
289
+ -webkit-transform-origin: top right;
290
+ transform-origin: top right;
291
+ }
292
+ }
293
+
294
+ @keyframes fadeout {
295
+ 0% {
296
+ opacity: 1;
297
+ }
298
+ 100% {
299
+ opacity: 0;
300
+ -webkit-transform: translateY(-30px) scale(0.94);
301
+ transform: translateY(-30px) scale(0.94);
302
+ -webkit-transform-origin: top right;
303
+ transform-origin: top right;
304
+ }
305
+ }
306
+
307
+ @-webkit-keyframes thirdmessgae {
308
+ 0% {
309
+ overflow: hidden;
310
+ }
311
+ 100% {
312
+ overflow: visibile;
313
+ }
314
+ }
315
+
316
+ @keyframes thirdmessgae {
317
+ 0% {
318
+ overflow: hidden;
319
+ }
320
+ 100% {
321
+ overflow: visibile;
322
+ }
323
+ }
324
+
325
+ .from-me {
326
+ position: relative;
327
+ position: absolute;
328
+ right: 0;
329
+ bottom: 10px;
330
+ width: 300px;
331
+ margin-bottom: 0;
332
+ padding: 6px 15px 7px;
333
+ border-radius: 12px;
334
+ opacity: 0;
335
+ color: white;
336
+ background: #0b93f6;
337
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1);
338
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1);
339
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1), opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
340
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1), opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1);
341
+ -webkit-transform: translateY(50px) translateX(10px) scale(0.1);
342
+ -ms-transform: translateY(50px) translateX(10px) scale(0.1);
343
+ transform: translateY(50px) translateX(10px) scale(0.1);
344
+ }
345
+
346
+ .loaded .from-me:not(.is-third-message) {
347
+ opacity: 1;
348
+ -webkit-transform: translateY(0) translateX(0) scale(1);
349
+ -ms-transform: translateY(0) translateX(0) scale(1);
350
+ transform: translateY(0) translateX(0) scale(1);
351
+ -webkit-transform-origin: right;
352
+ -ms-transform-origin: right;
353
+ transform-origin: right;
354
+ }
355
+
356
+ .loaded .from-me.with-second-message {
357
+ -webkit-animation: moveup 1700ms ease-out 4200ms forwards;
358
+ animation: moveup 1700ms ease-out 4200ms forwards;
359
+ }
360
+
361
+ .loaded .from-me.is-third-message {
362
+ opacity: 1;
363
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms;
364
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms;
365
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms;
366
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 7100ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 7000ms;
367
+ -webkit-transform: scale(1) translateY(0);
368
+ -ms-transform: scale(1) translateY(0);
369
+ transform: scale(1) translateY(0);
370
+ -webkit-transform-origin: right;
371
+ -ms-transform-origin: right;
372
+ transform-origin: right;
373
+ }
374
+
375
+ .from-me a {
376
+ color: #fff;
377
+ }
378
+
379
+ .from-me p {
380
+ font-size: 13px;
381
+ }
382
+
383
+ .from-me::before {
384
+ position: absolute;
385
+ z-index: 0;
386
+ right: -7px;
387
+ bottom: -2px;
388
+ height: 20px;
389
+ border-right: 20px solid #0b93f6;
390
+ border-bottom-left-radius: 16px 14px;
391
+ content: "";
392
+ -webkit-transform: translate(0, -2px);
393
+ }
394
+
395
+ .from-me::after {
396
+ position: absolute;
397
+ z-index: 0;
398
+ right: -56px;
399
+ bottom: -2px;
400
+ width: 26px;
401
+ height: 20px;
402
+ border-bottom-left-radius: 10px;
403
+ background: #f1f1f1;
404
+ content: "";
405
+ -webkit-transform: translate(-30px, -2px);
406
+ }
407
+
408
+ .chat-bubble {
409
+ position: absolute;
410
+ right: 12px;
411
+ bottom: 8px;
412
+ width: 24px;
413
+ height: 34px;
414
+ margin-left: auto;
415
+ opacity: 0;
416
+ background: #ddd;
417
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms;
418
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms;
419
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms;
420
+ transition: transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 4300ms, -webkit-transform 500ms cubic-bezier(0.694, 0.5, 0.1, 1) 4200ms;
421
+ -webkit-transform: translateY(50px) translateX(10px) scale(0.1);
422
+ -ms-transform: translateY(50px) translateX(10px) scale(0.1);
423
+ transform: translateY(50px) translateX(10px) scale(0.1);
424
+ }
425
+
426
+ .loaded .chat-bubble {
427
+ opacity: 1;
428
+ -webkit-transform: translateY(0) translateX(0) scale(1);
429
+ -ms-transform: translateY(0) translateX(0) scale(1);
430
+ transform: translateY(0) translateX(0) scale(1);
431
+ -webkit-transform-origin: right;
432
+ -ms-transform-origin: right;
433
+ transform-origin: right;
434
+ -webkit-animation: fadeout 300ms ease-out 6500ms forwards;
435
+ animation: fadeout 300ms ease-out 6500ms forwards;
436
+ }
437
+
438
+ .chat-bubble:before {
439
+ display: block;
440
+ position: absolute;
441
+ z-index: 1;
442
+ left: -17px;
443
+ width: 34px;
444
+ height: 34px;
445
+ border-radius: 50%;
446
+ background: #ddd;
447
+ content: "";
448
+ }
449
+
450
+ .chat-bubble:after {
451
+ display: block;
452
+ position: absolute;
453
+ z-index: 1;
454
+ right: -17px;
455
+ width: 34px;
456
+ height: 34px;
457
+ border-radius: 50%;
458
+ background: #ddd;
459
+ content: "";
460
+ }
461
+
462
+ .chat-bubble .tail {
463
+ position: absolute;
464
+ right: -17px;
465
+ bottom: -1px;
466
+ width: 15px;
467
+ height: 15px;
468
+ border-radius: 50%;
469
+ background: #ddd;
470
+ }
471
+
472
+ .chat-bubble .tail::before {
473
+ display: block;
474
+ position: absolute;
475
+ right: -3px;
476
+ bottom: -4px;
477
+ width: 5px;
478
+ height: 5px;
479
+ border-radius: 50%;
480
+ background: #ddd;
481
+ content: "";
482
+ }
483
+
484
+ .chat-bubble .loading {
485
+ position: absolute;
486
+ z-index: 10;
487
+ top: 14px;
488
+ left: 0;
489
+ width: 30px;
490
+ }
491
+
492
+ .chat-bubble .loading .dot {
493
+ display: block;
494
+ float: left;
495
+ width: 6px;
496
+ height: 6px;
497
+ margin: 0 0 0 3px;
498
+ border-radius: 50%;
499
+ background: #c1c1c1;
500
+ }
501
+
502
+ .chat-bubble .loading .dot:first-child {
503
+ margin: 0;
504
+ }
505
+
506
+ .chat-bubble .loading .dot.one {
507
+ -webkit-animation: cycleOne 1s ease-in-out infinite;
508
+ animation: cycleOne 1s ease-in-out infinite;
509
+ }
510
+
511
+ .chat-bubble .loading .dot.two {
512
+ -webkit-animation: cycleTwo 1s ease-in-out infinite;
513
+ }
514
+
515
+ .chat-bubble .loading .dot.three {
516
+ -webkit-animation: cycleThree 1s ease-in-out infinite;
517
+ animation: cycleThree 1s ease-in-out infinite;
518
+ }
519
+
520
+ @-webkit-keyframes cycleOne {
521
+ 0% {
522
+ background: rgba(150, 150, 150, 0.4);
523
+ }
524
+ 33.333% {
525
+ background: #969696;
526
+ }
527
+ 66.6667% {
528
+ background: rgba(150, 150, 150, 0.4);
529
+ }
530
+ 100% {
531
+ background: rgba(150, 150, 150, 0.4);
532
+ }
533
+ }
534
+
535
+ @keyframes cycleOne {
536
+ 0% {
537
+ background: rgba(150, 150, 150, 0.4);
538
+ }
539
+ 33.333% {
540
+ background: #969696;
541
+ }
542
+ 66.6667% {
543
+ background: rgba(150, 150, 150, 0.4);
544
+ }
545
+ 100% {
546
+ background: rgba(150, 150, 150, 0.4);
547
+ }
548
+ }
549
+
550
+ @-webkit-keyframes cycleTwo {
551
+ 0% {
552
+ background: rgba(150, 150, 150, 0.4);
553
+ }
554
+ 33.333% {
555
+ background: rgba(150, 150, 150, 0.4);
556
+ }
557
+ 66.6667% {
558
+ background: #969696;
559
+ }
560
+ 100% {
561
+ background: rgba(150, 150, 150, 0.4);
562
+ }
563
+ }
564
+
565
+ @keyframes cycleTwo {
566
+ 0% {
567
+ background: rgba(150, 150, 150, 0.4);
568
+ }
569
+ 33.333% {
570
+ background: rgba(150, 150, 150, 0.4);
571
+ }
572
+ 66.6667% {
573
+ background: #969696;
574
+ }
575
+ 100% {
576
+ background: rgba(150, 150, 150, 0.4);
577
+ }
578
+ }
579
+
580
+ @-webkit-keyframes cycleThree {
581
+ 0% {
582
+ background: rgba(150, 150, 150, 0.4);
583
+ }
584
+ 33.333% {
585
+ background: rgba(150, 150, 150, 0.4);
586
+ }
587
+ 66.6667% {
588
+ background: rgba(150, 150, 150, 0.4);
589
+ }
590
+ 100% {
591
+ background: #969696;
592
+ }
593
+ }
594
+
595
+ @keyframes cycleThree {
596
+ 0% {
597
+ background: rgba(150, 150, 150, 0.4);
598
+ }
599
+ 33.333% {
600
+ background: rgba(150, 150, 150, 0.4);
601
+ }
602
+ 66.6667% {
603
+ background: rgba(150, 150, 150, 0.4);
604
+ }
605
+ 100% {
606
+ background: #969696;
607
+ }
608
+ }
609
+
610
+ .dots {
611
+ display: block;
612
+ position: relative;
613
+ z-index: 0;
614
+ top: 10px;
615
+ max-width: 140px;
616
+ margin: 0 auto;
617
+ padding: 0;
618
+ line-height: 1;
619
+ list-style: none;
620
+ cursor: default;
621
+ }
622
+
623
+ .merlin__content--ready .dots {
624
+ display: none;
625
+ }
626
+
627
+ .merlin__content--content .dots {
628
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
629
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
630
+ }
631
+
632
+ body.exiting .merlin__content--content .dots {
633
+ opacity: 0;
634
+ }
635
+
636
+ .dots li {
637
+ display: inline-block;
638
+ position: relative;
639
+ z-index: 9999;
640
+ top: -0.15em;
641
+ width: 6px;
642
+ height: 6px;
643
+ margin: 0 1px;
644
+ padding: 0;
645
+ border-radius: 999px;
646
+ background: #e3e3e3;
647
+ -webkit-transition: background 300ms cubic-bezier(0.694, 0, 0.335, 1);
648
+ transition: background 300ms cubic-bezier(0.694, 0, 0.335, 1);
649
+ }
650
+
651
+ .dots li.done {
652
+ background: #ed1c25;
653
+ }
654
+
655
+ .dots li.active {
656
+ -webkit-animation: popIn 900ms forwards;
657
+ animation: popIn 900ms forwards;
658
+
659
+ -webkit-animation-fill-mode: both;
660
+ animation-fill-mode: both;
661
+ /* Applies styles when Reduced Motion is enabled */
662
+ }
663
+
664
+ @media screen and (prefers-reduced-motion: reduce) {
665
+ .dots li.active {
666
+ background: #ed1c25;
667
+ -webkit-animation: none;
668
+ animation: none;
669
+ }
670
+ }
671
+
672
+ .dots li.active::after {
673
+ display: inline-block;
674
+ position: absolute;
675
+ z-index: -1;
676
+ left: 0;
677
+ width: 7px;
678
+ height: 7px;
679
+ border-radius: 999px;
680
+ content: "";
681
+ -webkit-transition: box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1);
682
+ transition: box-shadow 300ms cubic-bezier(0.694, 0, 0.335, 1);
683
+ -webkit-animation: sonarEffect 400ms ease-out 300ms;
684
+ animation: sonarEffect 400ms ease-out 300ms;
685
+ /* Applies styles when Reduced Motion is enabled */
686
+ }
687
+
688
+ @media screen and (prefers-reduced-motion: reduce) {
689
+ .dots li.active::after {
690
+ -webkit-animation: none;
691
+ animation: none;
692
+ }
693
+ }
694
+
695
+ @-webkit-keyframes sonarEffect {
696
+ 0% {
697
+ opacity: 1;
698
+ }
699
+ 40% {
700
+ opacity: 0.5;
701
+ box-shadow: 0 0 0 1px #aae4ff;
702
+ }
703
+ 100% {
704
+ opacity: 0;
705
+ box-shadow: 0 0 0 1px #aae4ff;
706
+ -webkit-transform: scale(1.6);
707
+ transform: scale(1.6);
708
+ }
709
+ }
710
+
711
+ @keyframes sonarEffect {
712
+ 0% {
713
+ opacity: 1;
714
+ }
715
+ 40% {
716
+ opacity: 0.5;
717
+ box-shadow: 0 0 0 1px #aae4ff;
718
+ }
719
+ 100% {
720
+ opacity: 0;
721
+ box-shadow: 0 0 0 1px #aae4ff;
722
+ -webkit-transform: scale(1.6);
723
+ transform: scale(1.6);
724
+ }
725
+ }
726
+
727
+ @-webkit-keyframes popIn {
728
+ 0% {
729
+ background: #e3e3e3;
730
+ }
731
+ 40% {
732
+ }
733
+ 55% {
734
+ background: #e3e3e3;
735
+ -webkit-transform: scale(1);
736
+ transform: scale(1);
737
+ }
738
+ 65% {
739
+ background: #ed1c25;
740
+ -webkit-transform: scale(1.6);
741
+ transform: scale(1.6);
742
+ }
743
+ 85% {
744
+ background: #ed1c25;
745
+ -webkit-transform: scale(0.8);
746
+ transform: scale(0.8);
747
+ }
748
+ 95% {
749
+ background: #ed1c25;
750
+ -webkit-transform: scale(1.2);
751
+ transform: scale(1.2);
752
+ }
753
+ 100% {
754
+ background: #ed1c25;
755
+ -webkit-transform: scale(1);
756
+ transform: scale(1);
757
+ }
758
+ }
759
+
760
+ @keyframes popIn {
761
+ 0% {
762
+ background: #e3e3e3;
763
+ }
764
+ 40% {
765
+ }
766
+ 55% {
767
+ background: #e3e3e3;
768
+ -webkit-transform: scale(1);
769
+ transform: scale(1);
770
+ }
771
+ 65% {
772
+ background: #ed1c25;
773
+ -webkit-transform: scale(1.6);
774
+ transform: scale(1.6);
775
+ }
776
+ 85% {
777
+ background: #ed1c25;
778
+ -webkit-transform: scale(0.8);
779
+ transform: scale(0.8);
780
+ }
781
+ 95% {
782
+ background: #ed1c25;
783
+ -webkit-transform: scale(1.2);
784
+ transform: scale(1.2);
785
+ }
786
+ 100% {
787
+ background: #ed1c25;
788
+ -webkit-transform: scale(1);
789
+ transform: scale(1);
790
+ }
791
+ }
792
+
793
+ svg:not(:root) {
794
+ overflow: hidden;
795
+ }
796
+
797
+ .icon {
798
+ max-width: 100%;
799
+ margin-bottom: 2.8em;
800
+ -webkit-transform: translate3d(0, 0, 0);
801
+ transform: translate3d(0, 0, 0);
802
+ }
803
+
804
+ .js--finished .icon:not(.icon--checkmark) {
805
+ opacity: 0;
806
+ -webkit-transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
807
+ transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
808
+ transition: transform 400ms cubic-bezier(0.694, 0, 0.335, 1), opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
809
+ transition: transform 400ms cubic-bezier(0.694, 0, 0.335, 1), opacity 400ms cubic-bezier(0.694, 0, 0.335, 1) 0ms, filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms, -webkit-transform 400ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 300ms cubic-bezier(0.694, 0, 0.335, 1) 100ms;
810
+ -webkit-transform: scale(0.8);
811
+ -ms-transform: scale(0.8);
812
+ transform: scale(0.8);
813
+
814
+ -webkit-filter: blur(10px);
815
+ filter: blur(10px);
816
+ }
817
+
818
+ .merlin__content {
819
+ display: block;
820
+ overflow: hidden;
821
+ zoom: 1;
822
+ position: relative;
823
+ box-sizing: border-box;
824
+ width: 350px;
825
+ margin: 0.5em auto 0;
826
+ padding: 140px 33px 35px;
827
+ border-radius: 7px;
828
+ color: #444;
829
+ background: #fff;
830
+ box-shadow: 0 5px 20px rgba(0, 0, 0, 0.07);
831
+ -webkit-font-smoothing: antialiased;
832
+ -moz-osx-font-smoothing: grayscale;
833
+ text-align: center;
834
+ }
835
+
836
+ .merlin__content--transition {
837
+ opacity: 0;
838
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
839
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
840
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
841
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0, -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1) 0;
842
+ -webkit-transform: translateX(50%) scale(0.95);
843
+ -ms-transform: translateX(50%) scale(0.95);
844
+ transform: translateX(50%) scale(0.95);
845
+ -webkit-transform-origin: 50%;
846
+ -ms-transform-origin: 50%;
847
+ transform-origin: 50%;
848
+
849
+ -webkit-filter: blur(10px);
850
+ filter: blur(10px);
851
+ /* Applies styles when Reduced Motion is enabled */
852
+ }
853
+
854
+ @media screen and (prefers-reduced-motion: reduce) {
855
+ .merlin__content--transition {
856
+ -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
857
+ transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
858
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out;
859
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
860
+ -webkit-transform: translateX(0) scale(1);
861
+ -ms-transform: translateX(0) scale(1);
862
+ transform: translateX(0) scale(1);
863
+
864
+ -webkit-filter: blur(2px);
865
+ filter: blur(2px);
866
+ }
867
+ }
868
+
869
+ .merlin__content--welcome .merlin__content--transition {
870
+ opacity: 1;
871
+ -webkit-transform: translateX(0) scale(1);
872
+ -ms-transform: translateX(0) scale(1);
873
+ transform: translateX(0) scale(1);
874
+
875
+ -webkit-filter: blur(0);
876
+ filter: blur(0);
877
+ }
878
+
879
+ .merlin__content--plugins .merlin__content__footer.no-plugins,
880
+ .merlin__content--welcome .merlin__content__footer {
881
+ padding-top: 22px;
882
+ }
883
+
884
+ .merlin__content--plugins .merlin__content__footer {
885
+ padding-top: 3px;
886
+ }
887
+
888
+ .merlin__content--license .merlin__content__footer {
889
+ padding-top: 5px;
890
+ }
891
+
892
+ .merlin__content--ready {
893
+ padding-bottom: 12px;
894
+ }
895
+
896
+ body.loaded .merlin__content--transition {
897
+ opacity: 1;
898
+ -webkit-transform: translateX(0) scale(1);
899
+ -ms-transform: translateX(0) scale(1);
900
+ transform: translateX(0) scale(1);
901
+
902
+ -webkit-filter: blur(0);
903
+ filter: blur(0);
904
+ }
905
+
906
+ body.exiting .merlin__content--transition {
907
+ opacity: 0;
908
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
909
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
910
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
911
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0, -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 700ms cubic-bezier(0.694, 0, 0.335, 1) 0;
912
+ -webkit-transform: translateX(-40%) scale(0.96);
913
+ -ms-transform: translateX(-40%) scale(0.96);
914
+ transform: translateX(-40%) scale(0.96);
915
+
916
+ -webkit-filter: blur(10px);
917
+ filter: blur(10px);
918
+ /* Applies styles when Reduced Motion is enabled */
919
+ }
920
+
921
+ @media screen and (prefers-reduced-motion: reduce) {
922
+ body.exiting .merlin__content--transition {
923
+ -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
924
+ transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
925
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out;
926
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
927
+ -webkit-transform: translateX(0) scale(1);
928
+ -ms-transform: translateX(0) scale(1);
929
+ transform: translateX(0) scale(1);
930
+
931
+ -webkit-filter: blur(2px);
932
+ filter: blur(2px);
933
+ }
934
+ }
935
+
936
+ .merlin__content--welcome {
937
+ opacity: 0;
938
+ -webkit-transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1);
939
+ transition: opacity 400ms cubic-bezier(0.694, 0, 0.335, 1);
940
+ -webkit-animation: animation 1000ms linear both 200ms;
941
+ animation: animation 1000ms linear both 200ms;
942
+ /* Applies styles when Reduced Motion is enabled */
943
+ }
944
+
945
+ body.loaded .merlin__content--welcome {
946
+ opacity: 1;
947
+ }
948
+
949
+ @media screen and (prefers-reduced-motion: reduce) {
950
+ .merlin__content--welcome {
951
+ opacity: 1;
952
+ -webkit-animation: none;
953
+ animation: none;
954
+ }
955
+ }
956
+
957
+ /* Generated with Bounce.js. Edit at https://goo.gl/iTptLG */
958
+ @-webkit-keyframes animation {
959
+ 0% {
960
+ -webkit-transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
961
+ transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
962
+ }
963
+ 4.5% {
964
+ -webkit-transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
965
+ transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
966
+ }
967
+ 5.51% {
968
+ -webkit-transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
969
+ transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
970
+ }
971
+ 9.01% {
972
+ -webkit-transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
973
+ transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
974
+ }
975
+ 11.01% {
976
+ -webkit-transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
977
+ transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
978
+ }
979
+ 13.51% {
980
+ -webkit-transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
981
+ transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
982
+ }
983
+ 16.52% {
984
+ -webkit-transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
985
+ transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
986
+ }
987
+ 17.92% {
988
+ -webkit-transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
989
+ transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
990
+ }
991
+ 21.92% {
992
+ -webkit-transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
993
+ transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
994
+ }
995
+ 29.03% {
996
+ -webkit-transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
997
+ transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
998
+ }
999
+ 34.63% {
1000
+ -webkit-transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1001
+ transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1002
+ }
1003
+ 36.24% {
1004
+ -webkit-transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1005
+ transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1006
+ }
1007
+ 40.14% {
1008
+ -webkit-transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1009
+ transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1010
+ }
1011
+ 50.55% {
1012
+ -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1013
+ transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1014
+ }
1015
+ 62.36% {
1016
+ -webkit-transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1017
+ transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1018
+ }
1019
+ 79.08% {
1020
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1021
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1022
+ }
1023
+ 84.68% {
1024
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1025
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1026
+ }
1027
+ 100% {
1028
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1029
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1030
+ }
1031
+ }
1032
+ @keyframes animation {
1033
+ 0% {
1034
+ -webkit-transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1035
+ transform: matrix3d(0.5, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1036
+ }
1037
+ 4.5% {
1038
+ -webkit-transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1039
+ transform: matrix3d(0.718, 0, 0, 0, 0, 0.743, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1040
+ }
1041
+ 5.51% {
1042
+ -webkit-transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1043
+ transform: matrix3d(0.762, 0, 0, 0, 0, 0.794, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1044
+ }
1045
+ 9.01% {
1046
+ -webkit-transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1047
+ transform: matrix3d(0.888, 0, 0, 0, 0, 0.94, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1048
+ }
1049
+ 11.01% {
1050
+ -webkit-transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1051
+ transform: matrix3d(0.941, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1052
+ }
1053
+ 13.51% {
1054
+ -webkit-transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1055
+ transform: matrix3d(0.989, 0, 0, 0, 0, 1.044, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1056
+ }
1057
+ 16.52% {
1058
+ -webkit-transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1059
+ transform: matrix3d(1.024, 0, 0, 0, 0, 1.067, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1060
+ }
1061
+ 17.92% {
1062
+ -webkit-transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1063
+ transform: matrix3d(1.033, 0, 0, 0, 0, 1.07, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1064
+ }
1065
+ 21.92% {
1066
+ -webkit-transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1067
+ transform: matrix3d(1.042, 0, 0, 0, 0, 1.057, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1068
+ }
1069
+ 29.03% {
1070
+ -webkit-transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1071
+ transform: matrix3d(1.028, 0, 0, 0, 0, 1.016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1072
+ }
1073
+ 34.63% {
1074
+ -webkit-transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1075
+ transform: matrix3d(1.013, 0, 0, 0, 0, 0.997, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1076
+ }
1077
+ 36.24% {
1078
+ -webkit-transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1079
+ transform: matrix3d(1.009, 0, 0, 0, 0, 0.994, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1080
+ }
1081
+ 40.14% {
1082
+ -webkit-transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1083
+ transform: matrix3d(1.003, 0, 0, 0, 0, 0.992, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1084
+ }
1085
+ 50.55% {
1086
+ -webkit-transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1087
+ transform: matrix3d(0.997, 0, 0, 0, 0, 0.998, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1088
+ }
1089
+ 62.36% {
1090
+ -webkit-transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1091
+ transform: matrix3d(0.999, 0, 0, 0, 0, 1.001, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1092
+ }
1093
+ 79.08% {
1094
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1095
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1096
+ }
1097
+ 84.68% {
1098
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1099
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1100
+ }
1101
+ 100% {
1102
+ -webkit-transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1103
+ transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
1104
+ }
1105
+ }
1106
+
1107
+ .merlin__button {
1108
+ display: inline-block;
1109
+ overflow: hidden;
1110
+ position: relative;
1111
+ padding: 8px 18px 9px;
1112
+ border: 0;
1113
+ border-radius: 4px;
1114
+ color: #a1a5a8;
1115
+ background: #fff;
1116
+ font-size: 15px;
1117
+ font-weight: 600;
1118
+ -webkit-font-smoothing: antialiased;
1119
+ -moz-osx-font-smoothing: grayscale;
1120
+ text-align: center;
1121
+ text-decoration: none;
1122
+ cursor: pointer;
1123
+ -webkit-transition: color 150ms cubic-bezier(0.694, 0, 0.335, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1124
+ transition: color 150ms cubic-bezier(0.694, 0, 0.335, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1125
+ /* Applies styles when Reduced Motion is enabled */
1126
+ }
1127
+
1128
+ @media screen and (prefers-reduced-motion: reduce) {
1129
+ .merlin__button {
1130
+ -webkit-transition: color 50ms ease-in-out, background 50ms ease-in-out;
1131
+ transition: color 50ms ease-in-out, background 50ms ease-in-out;
1132
+ }
1133
+ }
1134
+
1135
+ .merlin__button:hover {
1136
+ background: #f4f4f4;
1137
+ }
1138
+
1139
+ .merlin__button:hover .chevron::after,
1140
+ .merlin__button:hover .chevron::before {
1141
+ background: #a1a5a8;
1142
+ }
1143
+
1144
+ .merlin__button:active {
1145
+ background: #ebebeb;
1146
+ }
1147
+
1148
+ .merlin__button span {
1149
+ display: inline-block;
1150
+ }
1151
+
1152
+ .merlin__button--colorchange {
1153
+ -webkit-animation: colorchange 800ms infinite alternate;
1154
+ animation: colorchange 800ms infinite alternate;
1155
+ }
1156
+
1157
+ .merlin__button--fullwidth {
1158
+ display: block;
1159
+ z-index: 999;
1160
+ width: 60%;
1161
+ margin: 0 auto;
1162
+ padding-top: 9px;
1163
+ padding-bottom: 10px;
1164
+ font-size: 14px;
1165
+ }
1166
+
1167
+ .merlin__button--next,
1168
+ .merlin__button--skip {
1169
+ position: absolute;
1170
+ bottom: 12px;
1171
+ }
1172
+
1173
+ .merlin__button--next {
1174
+ right: 12px;
1175
+ color: #ed1c25;
1176
+ }
1177
+
1178
+ .merlin__button--next:hover,
1179
+ .merlin__button--next:active {
1180
+ color: #111;
1181
+ }
1182
+ .merlin__button--next:focus{
1183
+ outline: none;
1184
+ box-shadow: none
1185
+ }
1186
+ .merlin__button--skip {
1187
+ left: 12px;
1188
+ }
1189
+
1190
+ .merlin__button--skip:hover,
1191
+ .merlin__button--skip:active {
1192
+ color: #666;
1193
+ }
1194
+
1195
+ .merlin__button--blue {
1196
+ color: #fff;
1197
+ background: #ed1c25;
1198
+ }
1199
+
1200
+ .merlin__button--blue:hover,
1201
+ .merlin__button--blue:active {
1202
+ color: #fff;
1203
+ background: #333;
1204
+ }
1205
+
1206
+ .merlin__button--knockout {
1207
+ margin-left: -10px;
1208
+ padding-top: 10px;
1209
+ padding-right: 25px;
1210
+ color: #cbcbcb;
1211
+ background: #fff;
1212
+ font-size: 14px;
1213
+ font-weight: 500;
1214
+ -webkit-transition: color 900ms cubic-bezier(0.694, 0, 0.335, 1);
1215
+ transition: color 900ms cubic-bezier(0.694, 0, 0.335, 1);
1216
+ }
1217
+
1218
+ .merlin__button--knockout:hover,
1219
+ .merlin__button--knockout:active {
1220
+ color: #a1a5a8;
1221
+ background: transparent;
1222
+ }
1223
+
1224
+ .merlin__button--no-chevron {
1225
+ margin-top: 3px;
1226
+ margin-left: 0;
1227
+ padding-right: 18px;
1228
+ }
1229
+
1230
+ .merlin__button--loading:hover,
1231
+ .merlin__button--loading:active {
1232
+ background: transparent;
1233
+ }
1234
+
1235
+ .merlin__button--loading__text {
1236
+ -webkit-transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1237
+ transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1238
+ transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1239
+ transition: opacity 400ms cubic-bezier(0.18, 1, 0.21, 1) 400ms, filter 4100ms cubic-bezier(0.18, 1, 0.21, 1), -webkit-filter 4100ms cubic-bezier(0.18, 1, 0.21, 1);
1240
+ }
1241
+
1242
+ .merlin__button--loading__spinner {
1243
+ position: absolute;
1244
+ top: 50%;
1245
+ left: 50%;
1246
+ opacity: 0;
1247
+ -webkit-transition: opacity 100ms ease, -webkit-transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1248
+ transition: opacity 100ms ease, -webkit-transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1249
+ transition: opacity 100ms ease, transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1250
+ transition: opacity 100ms ease, transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms, -webkit-transform 800ms cubic-bezier(0.18, 1, 0.21, 1) 300ms;
1251
+ -webkit-transform: scale(0);
1252
+ -ms-transform: scale(0);
1253
+ transform: scale(0);
1254
+ }
1255
+
1256
+ .merlin__button--loading .merlin__button--loading__text {
1257
+ opacity: 0;
1258
+
1259
+ -webkit-filter: blur(100px);
1260
+ filter: blur(100px);
1261
+ }
1262
+
1263
+ .merlin__button--loading .merlin__button--loading__spinner {
1264
+ opacity: 1;
1265
+ -webkit-transform: scale(1);
1266
+ -ms-transform: scale(1);
1267
+ transform: scale(1);
1268
+ }
1269
+
1270
+ #skip {
1271
+ display: inline-block;
1272
+ visibility: visible;
1273
+ z-index: 1;
1274
+ opacity: 1;
1275
+ }
1276
+
1277
+ #close {
1278
+ display: none;
1279
+ visibility: hidden;
1280
+ z-index: -1;
1281
+ opacity: 0;
1282
+ }
1283
+
1284
+ @-webkit-keyframes colorchange {
1285
+ 0% {
1286
+ background: #fff;
1287
+ }
1288
+ 100% {
1289
+ background: #f4f4f4;
1290
+ }
1291
+ }
1292
+
1293
+ @keyframes colorchange {
1294
+ 0% {
1295
+ background: #fff;
1296
+ }
1297
+ 100% {
1298
+ background: #f4f4f4;
1299
+ }
1300
+ }
1301
+
1302
+ .chevron {
1303
+ display: block;
1304
+ position: absolute;
1305
+ z-index: 1;
1306
+ top: 58%;
1307
+ right: 10px;
1308
+ -webkit-transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1309
+ transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1310
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1311
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), -ms-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1312
+ }
1313
+
1314
+ .chevron::before,
1315
+ .chevron::after {
1316
+ display: block;
1317
+ position: absolute;
1318
+ z-index: 1;
1319
+ top: 50%;
1320
+ width: 10px;
1321
+ height: 2px;
1322
+ border-radius: 2px;
1323
+ background: #d1d1d1;
1324
+ content: " ";
1325
+ -webkit-transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1326
+ transition: top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1327
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1);
1328
+ transition: transform 900ms cubic-bezier(0.86, 0, 0.07, 1), transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), top 900ms cubic-bezier(0.86, 0, 0.07, 1), background 150ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 900ms cubic-bezier(0.86, 0, 0.07, 1), -webkit-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1), -ms-transform-origin 900ms cubic-bezier(0.86, 0, 0.07, 1);
1329
+ -webkit-backface-visibility: hidden;
1330
+ backface-visibility: hidden;
1331
+ }
1332
+
1333
+ .chevron::before {
1334
+ right: 50%;
1335
+ -webkit-transform: rotate(40deg) scaleY(1);
1336
+ -ms-transform: rotate(40deg) scaleY(1);
1337
+ transform: rotate(40deg) scaleY(1);
1338
+ -webkit-transform-origin: 100% 100%;
1339
+ -ms-transform-origin: 100% 100%;
1340
+ transform-origin: 100% 100%;
1341
+ }
1342
+
1343
+ .chevron::after {
1344
+ left: 50%;
1345
+ -webkit-transform: rotate(-40deg) scaleY(1);
1346
+ -ms-transform: rotate(-40deg) scaleY(1);
1347
+ transform: rotate(-40deg) scaleY(1);
1348
+ -webkit-transform-origin: 0 100%;
1349
+ -ms-transform-origin: 0 100%;
1350
+ transform-origin: 0 100%;
1351
+ }
1352
+
1353
+ .merlin__drawer--open .chevron {
1354
+ top: 44%;
1355
+ }
1356
+
1357
+ .merlin__drawer--open .chevron::before {
1358
+ -webkit-transform: rotate(-40deg) scaleY(1);
1359
+ -ms-transform: rotate(-40deg) scaleY(1);
1360
+ transform: rotate(-40deg) scaleY(1);
1361
+ -webkit-transform-origin: 100% 0;
1362
+ -ms-transform-origin: 100% 0;
1363
+ transform-origin: 100% 0;
1364
+ }
1365
+
1366
+ .merlin__drawer--open .chevron::after {
1367
+ -webkit-transform: rotate(40deg) scaleY(1);
1368
+ -ms-transform: rotate(40deg) scaleY(1);
1369
+ transform: rotate(40deg) scaleY(1);
1370
+ -webkit-transform-origin: 0 0;
1371
+ -ms-transform-origin: 0 0;
1372
+ transform-origin: 0 0;
1373
+ }
1374
+
1375
+ .merlin-spinner {
1376
+ display: block;
1377
+ position: absolute;
1378
+ top: calc( 50% - 10px);
1379
+ left: calc( 50% - 10px);
1380
+ width: 20px;
1381
+ height: 20px;
1382
+ -webkit-transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 50ms;
1383
+ transition: opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 50ms;
1384
+ -webkit-animation: container-rotate 1600ms linear infinite;
1385
+ animation: container-rotate 1600ms linear infinite;
1386
+ }
1387
+
1388
+ .exiting .merlin-spinner {
1389
+ opacity: 0;
1390
+ }
1391
+
1392
+ .merlin-spinner-line {
1393
+ display: block;
1394
+ position: absolute;
1395
+ width: 100%;
1396
+ height: 100%;
1397
+ opacity: 0;
1398
+ -webkit-transition: border-color 300ms cubic-bezier(0.694, 0, 0.335, 1);
1399
+ transition: border-color 300ms cubic-bezier(0.694, 0, 0.335, 1);
1400
+ }
1401
+
1402
+ .merlin-spinner-line--1 {
1403
+ border-color: #ed1c25;
1404
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-1-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1405
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-1-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1406
+ }
1407
+
1408
+ .merlin-spinner-line--2 {
1409
+ border-color: #ed1c25;
1410
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-2-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1411
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-2-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1412
+ }
1413
+
1414
+ .merlin-spinner-line--3 {
1415
+ border-color: #ed1c25;
1416
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-3-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1417
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-3-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1418
+ }
1419
+
1420
+ .merlin-spinner-line--4 {
1421
+ border-color: #ed1c25;
1422
+ -webkit-animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-4-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1423
+ animation: fill-unfill-rotate 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, line-4-fade-in-out 4800ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1424
+ }
1425
+
1426
+ .merlin-spinner-line-ticker {
1427
+ overflow: hidden;
1428
+ position: absolute;
1429
+ top: 0;
1430
+ left: 45%;
1431
+ box-sizing: border-box;
1432
+ width: 20%;
1433
+ height: 100%;
1434
+ border-color: inherit;
1435
+ }
1436
+
1437
+ .merlin-spinner-line-cog {
1438
+ display: inline-block;
1439
+ overflow: hidden;
1440
+ position: relative;
1441
+ width: 50%;
1442
+ height: 100%;
1443
+ border-color: inherit;
1444
+ }
1445
+
1446
+ .merlin-spinner-line-cog-inner {
1447
+ position: absolute;
1448
+ top: 0;
1449
+ right: 0;
1450
+ bottom: 0;
1451
+ left: 0;
1452
+ box-sizing: border-box;
1453
+ width: 200%;
1454
+ height: 100%;
1455
+ border-width: 3px;
1456
+ border-style: solid;
1457
+ border-color: inherit;
1458
+ border-bottom-color: transparent;
1459
+ border-radius: 50%;
1460
+ -webkit-animation: none;
1461
+ animation: none;
1462
+ }
1463
+
1464
+ .merlin-spinner-line-cog-inner--left {
1465
+ border-right-color: transparent;
1466
+ -webkit-transform: rotate(129deg);
1467
+ -ms-transform: rotate(129deg);
1468
+ transform: rotate(129deg);
1469
+ -webkit-animation: left-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1470
+ animation: left-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1471
+ }
1472
+
1473
+ .merlin-spinner-line-cog-inner--right {
1474
+ left: -100%;
1475
+ border-left-color: transparent;
1476
+ -webkit-transform: rotate(-129deg);
1477
+ -ms-transform: rotate(-129deg);
1478
+ transform: rotate(-129deg);
1479
+ -webkit-animation: right-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1480
+ animation: right-spin 1200ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
1481
+ }
1482
+
1483
+ .merlin-spinner-line-cog-inner--center {
1484
+ left: -450%;
1485
+ width: 1000%;
1486
+ }
1487
+
1488
+ @-webkit-keyframes container-rotate {
1489
+ to {
1490
+ -webkit-transform: rotate(360deg);
1491
+ transform: rotate(360deg);
1492
+ }
1493
+ }
1494
+
1495
+ @keyframes container-rotate {
1496
+ to {
1497
+ -webkit-transform: rotate(360deg);
1498
+ transform: rotate(360deg);
1499
+ }
1500
+ }
1501
+
1502
+ @-webkit-keyframes fill-unfill-rotate {
1503
+ 12.5% {
1504
+ -webkit-transform: rotate(135deg);
1505
+ transform: rotate(135deg);
1506
+ }
1507
+ 25% {
1508
+ -webkit-transform: rotate(270deg);
1509
+ transform: rotate(270deg);
1510
+ }
1511
+ 37.5% {
1512
+ -webkit-transform: rotate(405deg);
1513
+ transform: rotate(405deg);
1514
+ }
1515
+ 50% {
1516
+ -webkit-transform: rotate(540deg);
1517
+ transform: rotate(540deg);
1518
+ }
1519
+ 62.5% {
1520
+ -webkit-transform: rotate(675deg);
1521
+ transform: rotate(675deg);
1522
+ }
1523
+ 75% {
1524
+ -webkit-transform: rotate(810deg);
1525
+ transform: rotate(810deg);
1526
+ }
1527
+ 87.5% {
1528
+ -webkit-transform: rotate(945deg);
1529
+ transform: rotate(945deg);
1530
+ }
1531
+ to {
1532
+ -webkit-transform: rotate(1080deg);
1533
+ transform: rotate(1080deg);
1534
+ }
1535
+ }
1536
+
1537
+ @keyframes fill-unfill-rotate {
1538
+ 12.5% {
1539
+ -webkit-transform: rotate(135deg);
1540
+ transform: rotate(135deg);
1541
+ }
1542
+ 25% {
1543
+ -webkit-transform: rotate(270deg);
1544
+ transform: rotate(270deg);
1545
+ }
1546
+ 37.5% {
1547
+ -webkit-transform: rotate(405deg);
1548
+ transform: rotate(405deg);
1549
+ }
1550
+ 50% {
1551
+ -webkit-transform: rotate(540deg);
1552
+ transform: rotate(540deg);
1553
+ }
1554
+ 62.5% {
1555
+ -webkit-transform: rotate(675deg);
1556
+ transform: rotate(675deg);
1557
+ }
1558
+ 75% {
1559
+ -webkit-transform: rotate(810deg);
1560
+ transform: rotate(810deg);
1561
+ }
1562
+ 87.5% {
1563
+ -webkit-transform: rotate(945deg);
1564
+ transform: rotate(945deg);
1565
+ }
1566
+ to {
1567
+ -webkit-transform: rotate(1080deg);
1568
+ transform: rotate(1080deg);
1569
+ }
1570
+ }
1571
+
1572
+ @-webkit-keyframes left-spin {
1573
+ 0% {
1574
+ -webkit-transform: rotate(130deg);
1575
+ transform: rotate(130deg);
1576
+ }
1577
+ 50% {
1578
+ -webkit-transform: rotate(-5deg);
1579
+ transform: rotate(-5deg);
1580
+ }
1581
+ to {
1582
+ -webkit-transform: rotate(130deg);
1583
+ transform: rotate(130deg);
1584
+ }
1585
+ }
1586
+
1587
+ @keyframes left-spin {
1588
+ 0% {
1589
+ -webkit-transform: rotate(130deg);
1590
+ transform: rotate(130deg);
1591
+ }
1592
+ 50% {
1593
+ -webkit-transform: rotate(-5deg);
1594
+ transform: rotate(-5deg);
1595
+ }
1596
+ to {
1597
+ -webkit-transform: rotate(130deg);
1598
+ transform: rotate(130deg);
1599
+ }
1600
+ }
1601
+
1602
+ @-webkit-keyframes right-spin {
1603
+ 0% {
1604
+ -webkit-transform: rotate(-130deg);
1605
+ transform: rotate(-130deg);
1606
+ }
1607
+ 50% {
1608
+ -webkit-transform: rotate(5deg);
1609
+ transform: rotate(5deg);
1610
+ }
1611
+ to {
1612
+ -webkit-transform: rotate(-130deg);
1613
+ transform: rotate(-130deg);
1614
+ }
1615
+ }
1616
+
1617
+ @keyframes right-spin {
1618
+ 0% {
1619
+ -webkit-transform: rotate(-130deg);
1620
+ transform: rotate(-130deg);
1621
+ }
1622
+ 50% {
1623
+ -webkit-transform: rotate(5deg);
1624
+ transform: rotate(5deg);
1625
+ }
1626
+ to {
1627
+ -webkit-transform: rotate(-130deg);
1628
+ transform: rotate(-130deg);
1629
+ }
1630
+ }
1631
+
1632
+ @-webkit-keyframes line-1-fade-in-out {
1633
+ 0% {
1634
+ opacity: 1;
1635
+ }
1636
+ 25% {
1637
+ opacity: 1;
1638
+ }
1639
+ 26% {
1640
+ opacity: 0;
1641
+ }
1642
+ 89% {
1643
+ opacity: 0;
1644
+ }
1645
+ 90% {
1646
+ opacity: 1;
1647
+ }
1648
+ to {
1649
+ opacity: 1;
1650
+ }
1651
+ }
1652
+
1653
+ @keyframes line-1-fade-in-out {
1654
+ 0% {
1655
+ opacity: 1;
1656
+ }
1657
+ 25% {
1658
+ opacity: 1;
1659
+ }
1660
+ 26% {
1661
+ opacity: 0;
1662
+ }
1663
+ 89% {
1664
+ opacity: 0;
1665
+ }
1666
+ 90% {
1667
+ opacity: 1;
1668
+ }
1669
+ to {
1670
+ opacity: 1;
1671
+ }
1672
+ }
1673
+
1674
+ @-webkit-keyframes line-2-fade-in-out {
1675
+ 0% {
1676
+ opacity: 0;
1677
+ }
1678
+ 15% {
1679
+ opacity: 0;
1680
+ }
1681
+ 25% {
1682
+ opacity: 1;
1683
+ }
1684
+ 50% {
1685
+ opacity: 1;
1686
+ }
1687
+ 51% {
1688
+ opacity: 0;
1689
+ }
1690
+ }
1691
+
1692
+ @keyframes line-2-fade-in-out {
1693
+ 0% {
1694
+ opacity: 0;
1695
+ }
1696
+ 15% {
1697
+ opacity: 0;
1698
+ }
1699
+ 25% {
1700
+ opacity: 1;
1701
+ }
1702
+ 50% {
1703
+ opacity: 1;
1704
+ }
1705
+ 51% {
1706
+ opacity: 0;
1707
+ }
1708
+ }
1709
+
1710
+ @-webkit-keyframes line-3-fade-in-out {
1711
+ 0% {
1712
+ opacity: 0;
1713
+ }
1714
+ 40% {
1715
+ opacity: 0;
1716
+ }
1717
+ 50% {
1718
+ opacity: 1;
1719
+ }
1720
+ 75% {
1721
+ opacity: 1;
1722
+ }
1723
+ 76% {
1724
+ opacity: 0;
1725
+ }
1726
+ }
1727
+
1728
+ @keyframes line-3-fade-in-out {
1729
+ 0% {
1730
+ opacity: 0;
1731
+ }
1732
+ 40% {
1733
+ opacity: 0;
1734
+ }
1735
+ 50% {
1736
+ opacity: 1;
1737
+ }
1738
+ 75% {
1739
+ opacity: 1;
1740
+ }
1741
+ 76% {
1742
+ opacity: 0;
1743
+ }
1744
+ }
1745
+
1746
+ @-webkit-keyframes line-4-fade-in-out {
1747
+ 0% {
1748
+ opacity: 0;
1749
+ }
1750
+ 65% {
1751
+ opacity: 0;
1752
+ }
1753
+ 75% {
1754
+ opacity: 1;
1755
+ }
1756
+ 90% {
1757
+ opacity: 1;
1758
+ }
1759
+ to {
1760
+ opacity: 0;
1761
+ }
1762
+ }
1763
+
1764
+ @keyframes line-4-fade-in-out {
1765
+ 0% {
1766
+ opacity: 0;
1767
+ }
1768
+ 65% {
1769
+ opacity: 0;
1770
+ }
1771
+ 75% {
1772
+ opacity: 1;
1773
+ }
1774
+ 90% {
1775
+ opacity: 1;
1776
+ }
1777
+ to {
1778
+ opacity: 0;
1779
+ }
1780
+ }
1781
+
1782
+ .return-to-dashboard {
1783
+ display: block;
1784
+ margin-top: 1em;
1785
+ padding: 1em;
1786
+ color: #b5b5b5;
1787
+ font-size: 13px;
1788
+ text-align: center;
1789
+ text-decoration: none;
1790
+ -webkit-transition: color 150ms ease, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;
1791
+ transition: color 150ms ease, opacity 300ms cubic-bezier(0.694, 0, 0.335, 1) 150ms;
1792
+ /* Applies styles when Reduced Motion is enabled */
1793
+ }
1794
+
1795
+ @media screen and (prefers-reduced-motion: reduce) {
1796
+ .return-to-dashboard {
1797
+ opacity: 1 !important;
1798
+ }
1799
+ }
1800
+
1801
+ .merlin__body--welcome .return-to-dashboard {
1802
+ opacity: 0;
1803
+ }
1804
+
1805
+ .merlin__body--welcome.loaded .return-to-dashboard {
1806
+ opacity: 1;
1807
+ }
1808
+
1809
+ .return-to-dashboard:hover {
1810
+ color: #ed1c25;
1811
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.06);
1812
+ }
1813
+
1814
+ .merlin__drawer {
1815
+ overflow: hidden;
1816
+ max-height: 0;
1817
+ margin: 0;
1818
+ opacity: 0;
1819
+ -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1820
+ transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1821
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms;
1822
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 600ms, max-height 700ms cubic-bezier(0.33, 0, 0.2, 1) 0ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1823
+ pointer-events: none;
1824
+ }
1825
+
1826
+ .merlin__drawer li {
1827
+ position: relative;
1828
+ margin: 0;
1829
+ padding: 4px 0;
1830
+ opacity: 0;
1831
+ text-align: center;
1832
+ -webkit-transition: 0.25s ease;
1833
+ transition: 0.25s ease;
1834
+ -webkit-transform: translate3d(0, -15px, 0);
1835
+ transform: translate3d(0, -15px, 0);
1836
+ }
1837
+
1838
+ .merlin__drawer li:last-child {
1839
+ padding-bottom: 0;
1840
+ }
1841
+
1842
+ .merlin__drawer li:nth-of-type(10) {
1843
+ -webkit-transition-delay: 0.2s;
1844
+ transition-delay: 0.2s;
1845
+ }
1846
+
1847
+ .merlin__drawer li:nth-of-type(9) {
1848
+ -webkit-transition-delay: 0.18s;
1849
+ transition-delay: 0.18s;
1850
+ }
1851
+
1852
+ .merlin__drawer li:nth-of-type(8) {
1853
+ -webkit-transition-delay: 0.16s;
1854
+ transition-delay: 0.16s;
1855
+ }
1856
+
1857
+ .merlin__drawer li:nth-of-type(7) {
1858
+ -webkit-transition-delay: 0.14s;
1859
+ transition-delay: 0.14s;
1860
+ }
1861
+
1862
+ .merlin__drawer li:nth-of-type(6) {
1863
+ -webkit-transition-delay: 0.12s;
1864
+ transition-delay: 0.12s;
1865
+ }
1866
+
1867
+ .merlin__drawer li:nth-of-type(5) {
1868
+ -webkit-transition-delay: 0.1s;
1869
+ transition-delay: 0.1s;
1870
+ }
1871
+
1872
+ .merlin__drawer li:nth-of-type(4) {
1873
+ -webkit-transition-delay: 0.08s;
1874
+ transition-delay: 0.08s;
1875
+ }
1876
+
1877
+ .merlin__drawer li:nth-of-type(3) {
1878
+ -webkit-transition-delay: 0.06s;
1879
+ transition-delay: 0.06s;
1880
+ }
1881
+
1882
+ .merlin__drawer li:nth-of-type(2) {
1883
+ -webkit-transition-delay: 0.04s;
1884
+ transition-delay: 0.04s;
1885
+ }
1886
+
1887
+ .merlin__drawer li:nth-of-type(1) {
1888
+ -webkit-transition-delay: 0.02s;
1889
+ transition-delay: 0.02s;
1890
+ }
1891
+
1892
+ .merlin__drawer--open .merlin__drawer {
1893
+ max-height: 400px;
1894
+ opacity: 1;
1895
+ -webkit-transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1896
+ transition: padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1897
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms;
1898
+ transition: transform 600ms cubic-bezier(0.75, 0, 0.25, 1), padding 600ms cubic-bezier(0.75, 0, 0.25, 1), opacity 300ms linear 200ms, max-height 900ms cubic-bezier(0.33, 0, 0.2, 1) 100ms, -webkit-transform 600ms cubic-bezier(0.75, 0, 0.25, 1);
1899
+ -webkit-transform: translateY(0%);
1900
+ -ms-transform: translateY(0%);
1901
+ transform: translateY(0%);
1902
+ pointer-events: inherit;
1903
+ }
1904
+
1905
+ .merlin__drawer--open .merlin__drawer li {
1906
+ opacity: 1;
1907
+ -webkit-transition: 0.4s ease;
1908
+ transition: 0.4s ease;
1909
+ -webkit-transform: translate3d(0, 0, 0);
1910
+ transform: translate3d(0, 0, 0);
1911
+ }
1912
+
1913
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(1) {
1914
+ -webkit-transition-delay: 0.15s;
1915
+ transition-delay: 0.15s;
1916
+ }
1917
+
1918
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(2) {
1919
+ -webkit-transition-delay: 0.3s;
1920
+ transition-delay: 0.3s;
1921
+ }
1922
+
1923
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(3) {
1924
+ -webkit-transition-delay: 0.45s;
1925
+ transition-delay: 0.45s;
1926
+ }
1927
+
1928
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(4) {
1929
+ -webkit-transition-delay: 0.6s;
1930
+ transition-delay: 0.6s;
1931
+ }
1932
+
1933
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(5) {
1934
+ -webkit-transition-delay: 0.75s;
1935
+ transition-delay: 0.75s;
1936
+ }
1937
+
1938
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(6) {
1939
+ -webkit-transition-delay: 0.9s;
1940
+ transition-delay: 0.9s;
1941
+ }
1942
+
1943
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(7) {
1944
+ -webkit-transition-delay: 1.05s;
1945
+ transition-delay: 1.05s;
1946
+ }
1947
+
1948
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(8) {
1949
+ -webkit-transition-delay: 1.2s;
1950
+ transition-delay: 1.2s;
1951
+ }
1952
+
1953
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(9) {
1954
+ -webkit-transition-delay: 1.35s;
1955
+ transition-delay: 1.35s;
1956
+ }
1957
+
1958
+ .merlin__drawer--open .merlin__drawer li:nth-of-type(10) {
1959
+ -webkit-transition-delay: 1.5s;
1960
+ transition-delay: 1.5s;
1961
+ }
1962
+
1963
+ .merlin__drawer--open .merlin__button--knockout {
1964
+ color: #a1a5a8;
1965
+ }
1966
+
1967
+ .merlin__drawer--open .chevron::after,
1968
+ .merlin__drawer--open .chevron::before {
1969
+ background: #a1a5a8;
1970
+ }
1971
+
1972
+ .merlin__drawer--open .merlin__button--next {
1973
+ -webkit-animation: colorchange 1s infinite alternate 1000ms;
1974
+ animation: colorchange 1s infinite alternate 1000ms;
1975
+ }
1976
+
1977
+ .merlin__drawer--open .merlin__button--loading {
1978
+ -webkit-animation: none;
1979
+ animation: none;
1980
+ }
1981
+
1982
+ .merlin__drawer--open #skip {
1983
+ display: none;
1984
+ visibility: hidden;
1985
+ z-index: -1;
1986
+ opacity: 0;
1987
+ }
1988
+
1989
+ .merlin__drawer--open #close {
1990
+ display: inline-block;
1991
+ visibility: visible;
1992
+ z-index: 1;
1993
+ opacity: 1;
1994
+ }
1995
+
1996
+ .merlin__drawer--import-content {
1997
+ padding-top: 3px;
1998
+ }
1999
+
2000
+ .merlin__drawer--import-content li {
2001
+ padding: 2px 10px;
2002
+ text-align: left;
2003
+ }
2004
+
2005
+ .merlin__drawer--import-content li:hover span {
2006
+ color: #ed1c25;
2007
+ }
2008
+
2009
+ .merlin__drawer--import-content label {
2010
+ display: inline-block;
2011
+ position: relative;
2012
+ width: 100%;
2013
+ cursor: pointer;
2014
+ }
2015
+
2016
+ .merlin__drawer--import-content label span {
2017
+ -webkit-transition: color 100ms;
2018
+ transition: color 100ms;
2019
+ }
2020
+
2021
+ .merlin__drawer--import-content label i {
2022
+ display: inline-block;
2023
+ float: right;
2024
+ position: relative;
2025
+ width: 13px;
2026
+ height: 13px;
2027
+ margin-top: 3px;
2028
+ border: 2px solid #b2b7ba;
2029
+ border-radius: 50%;
2030
+ background-color: transparent;
2031
+ text-align: left;
2032
+ -webkit-transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2033
+ transition: border-color 100ms, background-color 100ms, -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2034
+ transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2035
+ transition: border-color 100ms, background-color 100ms, transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89), -webkit-transform 350ms cubic-bezier(0.78, -1.22, 0.17, 1.89);
2036
+ -webkit-transform-origin: center;
2037
+ -ms-transform-origin: center;
2038
+ transform-origin: center;
2039
+ }
2040
+
2041
+ .merlin__drawer--import-content label i:before {
2042
+ position: absolute;
2043
+ top: 0.4em;
2044
+ left: 0.2em;
2045
+ width: 0;
2046
+ height: 2px;
2047
+ border-radius: 2px;
2048
+ background: #ed1c25;
2049
+ content: "";
2050
+ -webkit-transition: width 50ms ease 50ms;
2051
+ transition: width 50ms ease 50ms;
2052
+ -webkit-transform: rotate(45deg);
2053
+ -ms-transform: rotate(45deg);
2054
+ transform: rotate(45deg);
2055
+ -webkit-transform-origin: 0 0;
2056
+ -ms-transform-origin: 0 0;
2057
+ transform-origin: 0 0;
2058
+ }
2059
+
2060
+ .merlin__drawer--import-content label i:after {
2061
+ position: absolute;
2062
+ top: 0.67em;
2063
+ left: 4px;
2064
+ width: 0;
2065
+ height: 2px;
2066
+ border-radius: 2px;
2067
+ background: #ed1c25;
2068
+ content: "";
2069
+ -webkit-transition: width 50ms ease;
2070
+ transition: width 50ms ease;
2071
+ -webkit-transform: rotate(310deg);
2072
+ -ms-transform: rotate(310deg);
2073
+ transform: rotate(310deg);
2074
+ -webkit-transform-origin: 0 0;
2075
+ -ms-transform-origin: 0 0;
2076
+ transform-origin: 0 0;
2077
+ }
2078
+
2079
+ .merlin__drawer--import-content label:hover i {
2080
+ border-color: #ed1c25;
2081
+ }
2082
+
2083
+ .merlin__drawer--import-content .checkbox {
2084
+ display: none !important;
2085
+ }
2086
+
2087
+ .merlin__drawer--import-content .checkbox:checked + label.installing i {
2088
+ border-color: #ffb900;
2089
+ background-color: #ffb900;
2090
+ -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1);
2091
+ transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1), border-color 400ms cubic-bezier(0.18, 1, 0.21, 1);
2092
+ }
2093
+
2094
+ .merlin__drawer--import-content .checkbox:checked + label.success i {
2095
+ border-color: #46b450;
2096
+ background-color: #46b450;
2097
+ -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2098
+ transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2099
+ }
2100
+
2101
+ .merlin__drawer--import-content .checkbox:checked + label.error i {
2102
+ border-color: #d54e21;
2103
+ background-color: #d54e21;
2104
+ -webkit-transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2105
+ transition: background-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms, border-color 400ms cubic-bezier(0.18, 1, 0.21, 1) 220ms;
2106
+ }
2107
+
2108
+ .merlin__drawer--import-content .checkbox:checked + label i {
2109
+ border-color: #ed1c25;
2110
+ background-color: #ed1c25;
2111
+ -webkit-transform: scale(1.2);
2112
+ -ms-transform: scale(1.2);
2113
+ transform: scale(1.2);
2114
+ }
2115
+
2116
+ .merlin__drawer--import-content .checkbox:checked + label i:after {
2117
+ width: 9px;
2118
+ background: #fff;
2119
+ -webkit-transition: width 50ms ease 100ms;
2120
+ transition: width 50ms ease 100ms;
2121
+ }
2122
+
2123
+ .merlin__drawer--import-content .checkbox:checked + label i:before {
2124
+ width: 5px;
2125
+ background: #fff;
2126
+ -webkit-transition: width 50ms ease 100ms;
2127
+ transition: width 50ms ease 100ms;
2128
+ }
2129
+
2130
+ .merlin__drawer--open .merlin__drawer--install-plugins {
2131
+ padding-bottom: 1px;
2132
+ }
2133
+
2134
+ .merlin__drawer--install-plugins li span {
2135
+ display: none;
2136
+ }
2137
+
2138
+ .merlin__drawer--install-plugins li .spinner {
2139
+ display: inline-block;
2140
+ visibility: visible;
2141
+ position: absolute;
2142
+ right: 10px;
2143
+ margin-top: 2px;
2144
+ opacity: 0;
2145
+ -webkit-transition: opacity 200ms cubic-bezier(0.694, 0, 0.335, 1);
2146
+ transition: opacity 200ms cubic-bezier(0.694, 0, 0.335, 1);
2147
+ }
2148
+
2149
+ .merlin__drawer--install-plugins.installing li .spinner {
2150
+ opacity: 1;
2151
+ }
2152
+
2153
+ .merlin__drawer--install-plugins.installing li span {
2154
+ opacity: 0;
2155
+ }
2156
+
2157
+ .merlin__drawer--open .merlin__drawer--extras {
2158
+ padding-bottom: 30px;
2159
+ }
2160
+
2161
+ .icon--checkmark {
2162
+ display: none;
2163
+ position: absolute;
2164
+ top: -110px;
2165
+ left: calc( 50% - 40px);
2166
+ width: 80px;
2167
+ height: 80px;
2168
+ border-radius: 50%;
2169
+ box-shadow: inset 0 0 0 #46b450;
2170
+ -webkit-animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both;
2171
+ animation: fill 0.4s ease-in-out 0.4s forwards, scale 0.3s ease-in-out 0.9s both;
2172
+
2173
+ stroke: #fff;
2174
+ stroke-miterlimit: 10;
2175
+ stroke-width: 2;
2176
+ }
2177
+
2178
+ .js--finished .icon--checkmark {
2179
+ display: inline-block;
2180
+ }
2181
+
2182
+ .icon--checkmark__check {
2183
+ -webkit-transform-origin: 50% 50%;
2184
+ -ms-transform-origin: 50% 50%;
2185
+ transform-origin: 50% 50%;
2186
+ -webkit-animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
2187
+ animation: stroke 0.3s cubic-bezier(0.65, 0, 0.45, 1) 0.8s forwards;
2188
+
2189
+ stroke-dasharray: 48;
2190
+ stroke-dashoffset: 48;
2191
+ }
2192
+
2193
+ .icon--checkmark__circle {
2194
+ -webkit-animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
2195
+ animation: stroke 0.6s cubic-bezier(0.65, 0, 0.45, 1) forwards;
2196
+
2197
+ fill: none;
2198
+ stroke: #46b450;
2199
+ stroke-dasharray: 166;
2200
+ stroke-dashoffset: 166;
2201
+ stroke-miterlimit: 10;
2202
+ stroke-width: 2;
2203
+ }
2204
+
2205
+ @-webkit-keyframes stroke {
2206
+ 100% {
2207
+ stroke-dashoffset: 0;
2208
+ }
2209
+ }
2210
+
2211
+ @keyframes stroke {
2212
+ 100% {
2213
+ stroke-dashoffset: 0;
2214
+ }
2215
+ }
2216
+
2217
+ @-webkit-keyframes scale {
2218
+ 0%,
2219
+ 100% {
2220
+ -webkit-transform: none;
2221
+ transform: none;
2222
+ }
2223
+ 50% {
2224
+ -webkit-transform: scale3d(1.1, 1.1, 1);
2225
+ transform: scale3d(1.1, 1.1, 1);
2226
+ }
2227
+ }
2228
+
2229
+ @keyframes scale {
2230
+ 0%,
2231
+ 100% {
2232
+ -webkit-transform: none;
2233
+ transform: none;
2234
+ }
2235
+ 50% {
2236
+ -webkit-transform: scale3d(1.1, 1.1, 1);
2237
+ transform: scale3d(1.1, 1.1, 1);
2238
+ }
2239
+ }
2240
+
2241
+ @-webkit-keyframes fill {
2242
+ 100% {
2243
+ box-shadow: inset 0 0 0 100px #46b450;
2244
+ }
2245
+ }
2246
+
2247
+ @keyframes fill {
2248
+ 100% {
2249
+ box-shadow: inset 0 0 0 100px #46b450;
2250
+ }
2251
+ }
2252
+
2253
+ .merlin__content__footer {
2254
+ clear: both;
2255
+ margin-top: 2.75em;
2256
+ }
2257
+
2258
+ .merlin__content__footer {
2259
+ *zoom: 1;
2260
+ }
2261
+
2262
+ .merlin__content__footer:before,
2263
+ .merlin__content__footer:after {
2264
+ display: table;
2265
+ content: "";
2266
+ }
2267
+
2268
+ .merlin__content__footer:after {
2269
+ clear: both;
2270
+ }
2271
+
2272
+ .merlin__content__footer--fullwidth {
2273
+ opacity: 0;
2274
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2275
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2276
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2277
+ transition: transform 500ms cubic-bezier(0.694, 0, 0.335, 1), opacity 500ms cubic-bezier(0.694, 0, 0.335, 1), filter 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-transform 500ms cubic-bezier(0.694, 0, 0.335, 1), -webkit-filter 500ms cubic-bezier(0.694, 0, 0.335, 1);
2278
+ -webkit-transform: translateX(50%);
2279
+ -ms-transform: translateX(50%);
2280
+ transform: translateX(50%);
2281
+ -webkit-transform-origin: top;
2282
+ -ms-transform-origin: top;
2283
+ transform-origin: top;
2284
+
2285
+ -webkit-filter: blur(10px);
2286
+ filter: blur(10px);
2287
+ /* Applies styles when Reduced Motion is enabled */
2288
+ }
2289
+
2290
+ @media screen and (prefers-reduced-motion: reduce) {
2291
+ .merlin__content__footer--fullwidth {
2292
+ -webkit-transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
2293
+ transition: opacity 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
2294
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out;
2295
+ transition: opacity 300ms ease-in-out, filter 300ms ease-in-out, -webkit-filter 300ms ease-in-out;
2296
+ -webkit-transform: translateX(0);
2297
+ -ms-transform: translateX(0);
2298
+ transform: translateX(0);
2299
+
2300
+ -webkit-filter: blur(2px);
2301
+ filter: blur(2px);
2302
+ }
2303
+ }
2304
+
2305
+ body.loaded .merlin__content__footer--fullwidth {
2306
+ opacity: 1;
2307
+ -webkit-transform: translateX(0);
2308
+ -ms-transform: translateX(0);
2309
+ transform: translateX(0);
2310
+
2311
+ -webkit-filter: blur(0);
2312
+ filter: blur(0);
2313
+ }
2314
+
2315
+ .merlin__content--license .merlin__content__footer {
2316
+ margin-top: -0.24em;
2317
+ }
2318
+
2319
+ .merlin__content--ready .merlin__content__footer {
2320
+ margin-top: 1.9em;
2321
+ }
2322
+
2323
+ .merlin__content--ready .merlin__content__footer .merlin__button--knockout {
2324
+ margin-top: 10px;
2325
+ }
2326
+
2327
+ .merlin__content--content .merlin__content__footer {
2328
+ -webkit-transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
2329
+ transition: opacity 500ms cubic-bezier(0.694, 0, 0.335, 1);
2330
+ }
2331
+
2332
+ body.exiting .merlin__content--content .merlin__content__footer {
2333
+ opacity: 0;
2334
+ }
2335
+
2336
+ /* Custom */
2337
+ .saswp_install_wizard{
2338
+ text-align: center;
2339
+ font-size: 12px;
2340
+ text-transform: uppercase;
2341
+ letter-spacing: 1px;
2342
+ color: rgba(0, 0, 0, 0.3);
2343
+ }
2344
+ .saswp_branding{
2345
+ padding: 40px;
2346
+ background-size: 80px;
2347
+ background-repeat: no-repeat;
2348
+ position: absolute;
2349
+ left: calc( 50% - 40px);
2350
+ top: -110px;
2351
+ background-image: url(../images/sd-logo-white.png);
2352
+
2353
+ }
2354
+ .merlin__button--loading:before{
2355
+ content: " ";
2356
+ display: inline-block;
2357
+ background-size: 30px;
2358
+ background-repeat: no-repeat;
2359
+ width: 53px;
2360
+ height: 35px;
2361
+ position: absolute;
2362
+ right: -3px;
2363
+ top: 3px;
2364
+ opacity: 0.7;
2365
+ background-position: 0px 3px;
2366
+ background-image: url(data:image/gif;base64,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);
2367
+ }
2368
+ body .amp_install_center {text-align: center}
2369
+ #ampforwp-design-select{
2370
+ width: 170px;
2371
+ height: 30px;
2372
+ position: relative;
2373
+ top: -15px;
2374
+ }
2375
+ .amp_install_theme_preview{
2376
+ margin-bottom: -30px;
2377
+ }
2378
+ .amp_install_logo_preview{
2379
+ max-width: 180px;
2380
+ height: auto;
2381
+ border-radius: 8px;
2382
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.25);
2383
+ }
2384
+ .saswp_fields{
2385
+ width: 100%;
2386
+ }
2387
+ .saswp_fields label{
2388
+ width: 40%;
2389
+ display: inline-block;
2390
+ }
2391
+ .saswp_fields select{
2392
+ width: 50%;
2393
+ }
2394
+ .saswp-social-fields input{
2395
+ width: 100%;
2396
+ }
2397
+ .merlin__drawer--import-content__list-item #schema_type{
2398
+ width: 100%;
2399
+ }
admin_section/fields-generator.php CHANGED
@@ -1,105 +1,124 @@
1
- <?php
2
- /*
3
- Metabox to show ads type such as custom and adsense
4
- */
5
- class saswp_fields_generator {
6
-
7
- public function saswp_field_generator( $meta_fields, $settings ) {
8
- $output = '';
9
- foreach ( $meta_fields as $meta_field ) {
10
-
11
- $class = "";
12
- $note = "";
13
- $hidden = array();
14
- if(array_key_exists('class', $meta_field)){
15
- $class = $meta_field['class'];
16
- }
17
- if(array_key_exists('note', $meta_field)){
18
- $note = $meta_field['note'];
19
- }
20
- if(array_key_exists('hidden', $meta_field)){
21
- $hidden = $meta_field['hidden'];
22
- }
23
- $label = '<label for="' . esc_attr($meta_field['id']) . '">' . esc_html__( $meta_field['label'], 'schema-and-structured-data-for-wp' ) . '</label>';
24
-
25
- switch ( $meta_field['type'] ) {
26
- case 'media':
27
- $mediavalue = $settings[$meta_field['id']];
28
- $input = sprintf(
29
- '<fieldset><input class="%s" style="width: 80%%" id="%s" name="%s" type="text" value="%s"> <input data-id="media" style="width: 19%%" class="button" id="%s_button" name="%s_button" type="button" value="Upload" />'
30
- . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_id" class="upload-id " name="sd_data['.esc_attr($meta_field['id']).'][id]" id="sd_data['.esc_attr($meta_field['id']).'][id]" value="'.esc_attr($mediavalue['id']).'">'
31
- . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_height" class="upload-height" name="sd_data['.esc_attr($meta_field['id']).'][height]" id="sd_data['.esc_attr($meta_field['id']).'][height]" value="'.esc_attr($mediavalue['height']).'">'
32
- . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_width" class="upload-width" name="sd_data['.esc_attr($meta_field['id']).'][width]" id="sd_data['.esc_attr($meta_field['id']).'][width]" value="'.esc_attr($mediavalue['width']).'">'
33
- . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_thumbnail" class="upload-thumbnail" name="sd_data['.esc_attr($meta_field['id']).'][thumbnail]" id="sd_data['.esc_attr($meta_field['id']).'][thumbnail]" value="'.esc_attr($mediavalue['thumbnail']).'">'
34
- . '</fieldset>',
35
- $class,
36
- esc_attr($meta_field['id']),
37
- esc_attr($meta_field['name']),
38
- esc_url($mediavalue['url']),
39
- esc_attr($meta_field['id']),
40
- esc_attr($meta_field['id'])
41
- );
42
- break;
43
- case 'checkbox':
44
- $hiddenvalue ="";
45
- if(array_key_exists('id', $hidden)){
46
- $hiddenvalue = $settings[$hidden['id']];
47
- }
48
- $hiddenfield="";
49
- if(!empty($hidden)){
50
- $hiddenfield = sprintf(
51
- '<input id="%s" name="%s" type="hidden" value="%s">',
52
- esc_attr($hidden['id']),
53
- esc_attr($hidden['name']),
54
- esc_attr($hiddenvalue)
55
- );
56
- }
57
-
58
- $input = sprintf(
59
- '<input class="%s" id="%s" name="%s" type="checkbox" %s>',
60
- esc_attr($class),
61
- esc_attr($meta_field['id']),
62
- esc_attr($meta_field['name']),
63
- $hiddenvalue == 1 ? 'checked' : ''
64
- );
65
-
66
- $input .=$hiddenfield;
67
- break;
68
-
69
- case 'select':
70
- $input = sprintf(
71
- '<select class="%s" id="%s" name="%s">',
72
- $class,
73
- esc_attr($meta_field['id']),
74
- esc_attr($meta_field['name'])
75
- );
76
- foreach ( $meta_field['options'] as $key => $value ) {
77
- $input .= sprintf(
78
- '<option %s value="%s">%s</option>',
79
- $settings[$meta_field['id']] == $key ? 'selected' : '',
80
- $key,
81
- esc_html__( $value, 'schema-and-structured-data-for-wp' )
82
- );
83
- }
84
- $input .= '</select>';
85
- break;
86
- default:
87
-
88
- $input = sprintf(
89
- '<input class="%s" %s id="%s" name="%s" type="%s" value="%s">',
90
- $class,
91
- $meta_field['type'] !== 'color' ? 'style="width: 100%"' : '',
92
- esc_attr($meta_field['id']),
93
- esc_attr($meta_field['name']),
94
- esc_attr($meta_field['type']),
95
- esc_attr($settings[$meta_field['id']])
96
- );
97
-
98
- }
99
-
100
- $allowed_html = saswp_expanded_allowed_tags();
101
- $output .= '<li><div style="width:200px;float:left;clear: both;">'.$label.'</div><div style="width:75%; float:right;">'.$input.'<p>'.esc_html__($note,'schema-and-structured-data-for-wp').'</p></div></li>';
102
- }
103
- echo '<div style="width:85%;"><div class="saswp-settings-list"><ul>' . wp_kses($output, $allowed_html) . '</ul></div></div>';
104
- }
105
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Metabox to show ads type such as custom and adsense
4
+ */
5
+ class saswp_fields_generator {
6
+
7
+ public function saswp_tooltip_message($meta_field_id){
8
+ $tooltip_message='';
9
+ switch ($meta_field_id) {
10
+ case 'saswp_kb_type':
11
+ //$tooltip_message = esc_html__('ss','schema-and-structured-data-for-wp');
12
+ break;
13
+
14
+ default:
15
+ break;
16
+ }
17
+ return $tooltip_message;
18
+ }
19
+ public function saswp_field_generator( $meta_fields, $settings ) {
20
+ $output = '';
21
+ $tooltip_message='';
22
+ foreach ( $meta_fields as $meta_field ) {
23
+
24
+ $tooltip_message = $this->saswp_tooltip_message($meta_field['id']);
25
+
26
+ $class = "";
27
+ $note = "";
28
+ $tooltip_element="";
29
+ $hidden = array();
30
+ if(array_key_exists('class', $meta_field)){
31
+ $class = $meta_field['class'];
32
+ }
33
+ if(array_key_exists('note', $meta_field)){
34
+ $note = $meta_field['note'];
35
+ }
36
+ if(array_key_exists('hidden', $meta_field)){
37
+ $hidden = $meta_field['hidden'];
38
+ }
39
+ if($tooltip_message){
40
+ $tooltip_element = '<span class="saswp-tooltiptext">'.$tooltip_message.'</span>';
41
+ }
42
+ $label = '<label class="saswp-tooltip" for="' . esc_attr($meta_field['id']) . '">' . esc_html__( $meta_field['label'], 'schema-and-structured-data-for-wp' ) .$tooltip_element.'</label>';
43
+
44
+ switch ( $meta_field['type'] ) {
45
+ case 'media':
46
+ $mediavalue = $settings[$meta_field['id']];
47
+ $input = sprintf(
48
+ '<fieldset><input class="%s" style="width: 80%%" id="%s" name="%s" type="text" value="%s"> <input data-id="media" style="width: 19%%" class="button" id="%s_button" name="%s_button" type="button" value="Upload" />'
49
+ . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_id" class="upload-id " name="sd_data['.esc_attr($meta_field['id']).'][id]" id="sd_data['.esc_attr($meta_field['id']).'][id]" value="'.esc_attr($mediavalue['id']).'">'
50
+ . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_height" class="upload-height" name="sd_data['.esc_attr($meta_field['id']).'][height]" id="sd_data['.esc_attr($meta_field['id']).'][height]" value="'.esc_attr($mediavalue['height']).'">'
51
+ . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_width" class="upload-width" name="sd_data['.esc_attr($meta_field['id']).'][width]" id="sd_data['.esc_attr($meta_field['id']).'][width]" value="'.esc_attr($mediavalue['width']).'">'
52
+ . '<input type="hidden" data-id="'.esc_attr($meta_field['id']).'_thumbnail" class="upload-thumbnail" name="sd_data['.esc_attr($meta_field['id']).'][thumbnail]" id="sd_data['.esc_attr($meta_field['id']).'][thumbnail]" value="'.esc_attr($mediavalue['thumbnail']).'">'
53
+ . '</fieldset>',
54
+ $class,
55
+ esc_attr($meta_field['id']),
56
+ esc_attr($meta_field['name']),
57
+ esc_url($mediavalue['url']),
58
+ esc_attr($meta_field['id']),
59
+ esc_attr($meta_field['id'])
60
+ );
61
+ break;
62
+ case 'checkbox':
63
+ $hiddenvalue ="";
64
+ if(array_key_exists('id', $hidden)){
65
+ $hiddenvalue = $settings[$hidden['id']];
66
+ }
67
+ $hiddenfield="";
68
+ if(!empty($hidden)){
69
+ $hiddenfield = sprintf(
70
+ '<input id="%s" name="%s" type="hidden" value="%s">',
71
+ esc_attr($hidden['id']),
72
+ esc_attr($hidden['name']),
73
+ esc_attr($hiddenvalue)
74
+ );
75
+ }
76
+
77
+ $input = sprintf(
78
+ '<input class="%s" id="%s" name="%s" type="checkbox" %s>',
79
+ esc_attr($class),
80
+ esc_attr($meta_field['id']),
81
+ esc_attr($meta_field['name']),
82
+ $hiddenvalue == 1 ? 'checked' : ''
83
+ );
84
+
85
+ $input .=$hiddenfield;
86
+ break;
87
+
88
+ case 'select':
89
+ $input = sprintf(
90
+ '<select class="%s" id="%s" name="%s">',
91
+ $class,
92
+ esc_attr($meta_field['id']),
93
+ esc_attr($meta_field['name'])
94
+ );
95
+ foreach ( $meta_field['options'] as $key => $value ) {
96
+ $input .= sprintf(
97
+ '<option %s value="%s">%s</option>',
98
+ $settings[$meta_field['id']] == $key ? 'selected' : '',
99
+ $key,
100
+ esc_html__( $value, 'schema-and-structured-data-for-wp' )
101
+ );
102
+ }
103
+ $input .= '</select>';
104
+ break;
105
+ default:
106
+
107
+ $input = sprintf(
108
+ '<input class="%s" %s id="%s" name="%s" type="%s" value="%s">',
109
+ $class,
110
+ $meta_field['type'] !== 'color' ? 'style="width: 100%"' : '',
111
+ esc_attr($meta_field['id']),
112
+ esc_attr($meta_field['name']),
113
+ esc_attr($meta_field['type']),
114
+ esc_attr($settings[$meta_field['id']])
115
+ );
116
+
117
+ }
118
+
119
+ $allowed_html = saswp_expanded_allowed_tags();
120
+ $output .= '<li><div class="saswp-knowledge-label">'.$label.'</div><div class="saswp-knowledge-field">'.$input.'<p>'.esc_html__($note,'schema-and-structured-data-for-wp').'</p></div></li>';
121
+ }
122
+ echo '<div><div class="saswp-settings-list"><ul>' . wp_kses($output, $allowed_html) . '</ul></div></div>';
123
+ }
124
+ }
admin_section/images/sd-logo-white.png ADDED
Binary file
admin_section/images/spinner.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <span class="merlin__button--loading__spinner">
2
+ <cite class="merlin-spinner"><!--
3
+ --><cite class="merlin-spinner-line merlin-spinner-line--1"><!--
4
+ --><cite class="merlin-spinner-line-cog"><!--
5
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--left"></cite><!--
6
+ --></cite><!--
7
+ --><cite class="merlin-spinner-line-ticker"><!--
8
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--center"></cite><!--
9
+ --></cite><!--
10
+ --><cite class="merlin-spinner-line-cog"><!--
11
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--right"></cite><!--
12
+ --></cite><!--
13
+ --></cite><!--
14
+ --><cite class="merlin-spinner-line merlin-spinner-line--2"><!--
15
+ --><cite class="merlin-spinner-line-cog"><!--
16
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--left"></cite><!--
17
+ --></cite><!--
18
+ --><cite class="merlin-spinner-line-ticker"><!--
19
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--center"></cite><!--
20
+ --></cite><!--
21
+ --><cite class="merlin-spinner-line-cog"><!--
22
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--right"></cite><!--
23
+ --></cite><!--
24
+ --></cite><!--
25
+ --><cite class="merlin-spinner-line merlin-spinner-line--3"><!--
26
+ --><cite class="merlin-spinner-line-cog"><!--
27
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--left"></cite><!--
28
+ --></cite><!--
29
+ --><cite class="merlin-spinner-line-ticker"><!--
30
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--center"></cite><!--
31
+ --></cite><!--
32
+ --><cite class="merlin-spinner-line-cog"><!--
33
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--right"></cite><!--
34
+ --></cite><!--
35
+ --></cite><!--
36
+ --><cite class="merlin-spinner-line merlin-spinner-line--4"><!--
37
+ --><cite class="merlin-spinner-line-cog"><!--
38
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--left"></cite><!--
39
+ --></cite><!--
40
+ --><cite class="merlin-spinner-line-ticker"><!--
41
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--center"></cite><!--
42
+ --></cite><!--
43
+ --><cite class="merlin-spinner-line-cog"><!--
44
+ --><cite class="merlin-spinner-line-cog-inner merlin-spinner-line-cog-inner--right"></cite><!--
45
+ --></cite><!--
46
+ --></cite><!--
47
+ --></cite><!--/spinner -->
48
+ </span>
admin_section/images/sprite.svg ADDED
@@ -0,0 +1,648 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <svg id="sprite" xmlns="http://www.w3.org/2000/svg" version="1.0" class="hidden">
2
+
3
+ <symbol id="icon-merlin" width="80px" height="122px" viewBox="0 0 80 122" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4
+ <defs></defs>
5
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
6
+ <path d="M17,60.7982835 L37.9947017,2.5892267 C39.110827,-0.863075567 40.9197197,-0.863075567 42.0366469,2.5892267 L62.9521959,60.7982835 L17,60.7982835 Z" id="Fill-5" fill="#0073AA"></path>
7
+ <path d="M43.5015868,54.4568084 C43.3083496,54.4568084 43.1054906,54.3976555 42.8970189,54.2810642 L40.588596,52.9839861 L38.280173,54.2810642 C37.7862555,54.5579685 37.2931398,54.4928145 37.0125048,54.137897 C36.8769983,53.9664392 36.7342753,53.654386 36.8152586,53.1434419 L37.2562563,50.3949738 L35.389633,48.448928 C35.0536729,48.0991542 34.9269862,47.6833691 35.0408438,47.3087338 C35.1538996,46.9366705 35.4850489,46.6794838 35.9484975,46.6074716 L38.5295372,46.2071177 L39.682546,43.706406 C39.8902158,43.2571867 40.2205633,43 40.588596,43 C40.9558268,43 41.2861743,43.2571867 41.4946459,43.706406 L42.6484565,46.2071177 L45.2278926,46.6074716 C45.6913412,46.6794838 46.0232923,46.9366705 46.1371499,47.3104484 C46.2510075,47.6850837 46.123519,48.0991542 45.7875589,48.448928 L43.9201337,50.3949738 L44.3611315,53.1434419 C44.4429166,53.654386 44.2993918,53.9664392 44.1646871,54.137897 C44.0019188,54.3436463 43.7669872,54.4568084 43.5015868,54.4568084" id="Fill-6" fill="#FFEB72"></path>
8
+ <path d="M43.0110526,23.4481806 C42.8514916,23.4481806 42.6847142,23.3993151 42.5123242,23.3032988 L40.6088174,22.2334023 L38.7053106,23.3032988 C38.2971872,23.5321949 37.8914692,23.4781857 37.6589431,23.1849929 C37.5482928,23.0435403 37.4296243,22.7863536 37.4961749,22.3645675 L37.8601985,20.098753 L36.3215171,18.493051 C36.0440894,18.2050019 35.9398536,17.8629436 36.0336659,17.5534624 C36.1266763,17.2465529 36.3992931,17.0348026 36.7817585,16.9747924 L38.910575,16.6447362 L39.8623284,14.5829564 C40.0331148,14.2117504 40.3057316,14 40.6088174,14 C40.9119031,14 41.18452,14.2117504 41.3561082,14.5829564 L42.3070598,16.6447362 L44.4358763,16.9747924 C44.8175399,17.0348026 45.0917603,17.2465529 45.1847708,17.5543196 C45.278583,17.8629436 45.1735454,18.2050019 44.8969195,18.493051 L43.3566345,20.098753 L43.7198563,22.3645675 C43.7872087,22.7863536 43.669342,23.0435403 43.5586917,23.1849929 C43.4239869,23.3547361 43.2307497,23.4481806 43.0110526,23.4481806" id="Fill-7" fill="#FFEB72"></path>
9
+ <path d="M26.3759131,38.0563447 L28.4710535,39.2342596 C28.6594798,39.3405634 28.843897,39.3937153 29.0186925,39.3937153 C29.2600386,39.3937153 29.4733211,39.2908406 29.6216568,39.1039517 C29.7427307,38.9479251 29.8742282,38.665877 29.7988577,38.2012265 L29.3995542,35.7082305 L31.0929857,33.9430727 C31.3976751,33.6258758 31.5131363,33.249526 31.4113059,32.9100396 C31.3070701,32.5705532 31.0063898,32.3382279 30.5854374,32.2722167 L28.2449419,31.9104408 L27.8247913,31 L25,38.8304765 L26.3759131,38.0563447" id="Fill-9" fill="#FFEB72"></path>
10
+ <path d="M51.0472167,35.7536668 L50.6471115,38.2466628 C50.5733446,38.7113134 50.7032385,38.9933614 50.8251142,39.149388 C51.0808929,39.4717286 51.5275034,39.5317388 51.9765193,39.2796959 L54.0700561,38.101781 L55.4499782,38.8776274 L52.6428269,31 L52.2010273,31.9558771 L49.8605318,32.317653 C49.4403812,32.3836642 49.1397009,32.6159895 49.0370686,32.9546186 C48.9336346,33.294105 49.0490959,33.6713121 49.3529834,33.988509 L51.0472167,35.7536668" id="Fill-10" fill="#FFEB72"></path>
11
+ <path d="M69.1847569,80.2753378 L62.307597,59 L32.9042703,59.0017146 L32.6244371,59.0162885 C32.504165,59.0240041 32.3846947,59.032577 32.2764498,59.0334343 C32.2331518,59.0317197 32.1922593,59.0240041 32.1160869,59.0137166 L20.0239277,59 L19.6751386,59.1680286 C19.3784673,59.3120531 19.0344891,59.4732235 18.7265924,59.5563805 C18.4948682,59.6189626 18.2430985,59.6875457 17.9760944,59.7801329 L17.9680763,59.7595579 C17.8967148,59.7904203 17.8245515,59.8135671 17.705883,59.8555743 L16.8687891,60.1496244 L10.5216282,80.0215803 C9.01822671,84.7289535 5.88874608,94.5226215 10.156001,104.349724 C14.9283988,115.342739 24.2815609,121.647241 35.8156574,121.647241 L35.8156574,121.597518 C36.6038407,121.669531 37.8674998,121.671245 39.9714602,121.675532 L44.1256593,121.679818 C55.2267762,121.6541 64.2215273,115.605069 69.4549683,104.644631 C73.9932364,95.1424413 70.7458891,85.1001595 69.1847569,80.2753378" id="Fill-22" fill="#DBDEE4"></path>
12
+ <path d="M16,75.6536386 C16,90.0055115 21.4563453,96.7892383 40.3029869,96.7892383 C59.3484784,96.7892383 64.6075774,90.0055115 64.6075774,75.6536386 C64.6075774,70.2167126 63.043238,65.1724249 60.3739987,61 L20.2327769,61 C17.5635376,65.1724249 16,70.2167126 16,75.6536386 Z" id="Fill-23" fill="#FBDFD3"></path>
13
+ <path d="M56.4181479,97.838813 C56.4181479,105.496974 50.6122117,111.703746 43.4504077,111.703746 L36.9661366,111.703746 C29.8059363,111.703746 24,105.496974 24,97.838813 L24,96.8649328 C24,89.2076287 29.8059363,83 36.9661366,83 L43.4504077,83 C50.6122117,83 56.4181479,89.2076287 56.4181479,96.8649328 L56.4181479,97.838813" id="Fill-24" fill="#FFFFFF"></path>
14
+ <path d="M76.8875625,63.6692513 L2.65079758,63.6692513 C1.18588313,63.6692513 0,62.4004638 0,60.834197 C0,59.2687875 1.18588313,58 2.65079758,58 L76.8875625,58 C78.352477,58 79.5391619,59.2687875 79.5391619,60.834197 C79.5391619,62.4004638 78.352477,63.6692513 76.8875625,63.6692513" id="Fill-25" fill="#0073AA"></path>
15
+ <path d="M44.9432973,80.3238188 C44.9432973,83.8455615 42.7166594,84.811726 39.9712477,84.811726 C37.2266379,84.811726 35,83.8455615 35,80.3238188 C35,76.8012188 37.2266379,73 39.9712477,73 C42.7166594,73 44.9432973,76.8012188 44.9432973,80.3238188" id="Fill-26" fill="#F0CCBC"></path>
16
+ <path d="M34.7605967,67.834197 C34.7605967,69.4004638 33.5739118,70.6692513 32.1097991,70.6692513 L22.6515994,70.6692513 C21.1858831,70.6692513 20,69.4004638 20,67.834197 C20,66.2687875 21.1858831,65 22.6515994,65 L32.1097991,65 C33.5739118,65 34.7605967,66.2687875 34.7605967,67.834197" id="Fill-27" fill="#FFFFFF"></path>
17
+ <path d="M59.7613985,67.834197 C59.7613985,69.4004638 58.5747136,70.6692513 57.1097991,70.6692513 L47.6515994,70.6692513 C46.1866849,70.6692513 45,69.4004638 45,67.834197 C45,66.2687875 46.1866849,65 47.6515994,65 L57.1097991,65 C58.5747136,65 59.7613985,66.2687875 59.7613985,67.834197" id="Fill-28" fill="#FFFFFF"></path>
18
+ <path d="M29.9087847,77.7245189 C29.4132636,77.7245189 28.9377878,77.4270397 28.7108744,76.9160955 C28.4134014,76.2491248 27.8040226,75.8350543 27.1168679,75.8350543 C26.4297131,75.8350543 25.8195326,76.2491248 25.5228613,76.9160955 C25.2085502,77.6242161 24.4179614,77.9225527 23.7572666,77.5873527 C23.0957699,77.2512955 22.8143331,76.4060087 23.1286443,75.6996026 C23.8574934,74.059609 25.4226346,73 27.1168679,73 C28.8111012,73 30.3770442,74.059609 31.1050915,75.6996026 C31.4186008,76.4060087 31.1379658,77.2512955 30.477271,77.5873527 C30.2928537,77.6807972 30.0996165,77.7245189 29.9087847,77.7245189" id="Fill-29" fill="#220B68"></path>
19
+ <path d="M54.9087847,77.7245189 C54.4140654,77.7245189 53.9377878,77.4270397 53.7116762,76.9160955 C53.4142032,76.2491248 52.8040226,75.8350543 52.1168679,75.8350543 C51.4297131,75.8350543 50.8195326,76.2491248 50.5228613,76.9160955 C50.209352,77.6242161 49.4187633,77.9225527 48.7572666,77.5873527 C48.0957699,77.2512955 47.8143331,76.4060087 48.1286443,75.6996026 C48.8574934,74.059609 50.4226346,73 52.1168679,73 C53.8111012,73 55.3770442,74.059609 56.1050915,75.6996026 C56.4194026,76.4060087 56.1379658,77.2512955 55.477271,77.5873527 C55.2928537,77.6807972 55.0996165,77.7245189 54.9087847,77.7245189" id="Fill-40" fill="#220B68"></path>
20
+ <path d="M46.373596,88 C46.373596,91.0665223 43.6041299,93.5500881 40.186798,93.5500881 C36.7694661,93.5500881 34,91.0665223 34,88 L46.373596,88" id="Fill-41" fill="#220B68"></path>
21
+ </g>
22
+
23
+ </symbol>
24
+
25
+ <symbol id="icon-welcome" width="166px" height="105px" viewBox="0 0 166 105" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
26
+ <defs></defs>
27
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
28
+ <g id="Getting-Started">
29
+ <g id="getting-started">
30
+ <polygon id="Fill-310" fill="#FFFFFF" points="130.588 73.184 139.861 73.184 139.861 67.506 130.588 67.506"></polygon>
31
+ <path d="M142.664,103.301 L127.943,103.301 L127.943,72.114 C127.943,71.346 128.566,70.723 129.335,70.723 L141.273,70.723 C142.041,70.723 142.664,71.346 142.664,72.114 L142.664,103.301" id="Fill-312" fill="#FFFFFF"></path>
32
+ <path d="M149.481,94.952 C149.461,95.921 148.66,96.69 147.692,96.671 C146.723,96.652 145.954,95.851 145.973,94.882 C145.992,93.914 146.793,93.144 147.762,93.163 C148.73,93.183 149.5,93.984 149.481,94.952" id="Fill-322" fill="#FFFFFF"></path>
33
+ <path d="M136.324881,101.023 C135.858427,101.023 135.476088,100.603 135.436155,100.046 C135.341845,98.695 134.442073,97.641 133.295905,97.537 C132.828602,97.494 132.476,97.051 132.476,96.506 L132.476,93.7 L133.750464,93.7 L133.750464,96.094 C135.239888,96.403 136.39965,97.767 136.662189,99.523 L140.749,99.523 L140.749,101.023 L136.324881,101.023 Z" id="Fill-326" fill="#0073AA"></path>
34
+ <path d="M151.667,103.665 L151.667,100.387 C151.667,100.097 151.902,99.862 152.192,99.862 L164.85,99.862 C165.14,99.862 165.375,100.097 165.375,100.387 L165.375,103.665 L151.667,103.665" id="Fill-327" fill="#FFFFFF"></path>
35
+ <path d="M155.125,103.665 L153.625,103.665 L153.625,100.612 L141.417,100.612 L141.417,103.665 L139.917,103.665 L139.917,100.387 C139.917,99.684 140.489,99.112 141.192,99.112 L153.85,99.112 C154.553,99.112 155.125,99.684 155.125,100.387 L155.125,103.665" id="Fill-328" fill="#0073AA"></path>
36
+ <rect id="Rectangle" fill="#E7F7FF" x="141" y="95" width="14" height="4"></rect>
37
+ <path d="M142.159,98.554 L154.367,98.554 L154.367,95.725 L142.159,95.725 L142.159,98.554 Z M154.728,100.054 L141.798,100.054 C141.17,100.054 140.659,99.542 140.659,98.914 L140.659,95.363 C140.659,94.735 141.17,94.225 141.798,94.225 L154.728,94.225 C155.356,94.225 155.867,94.735 155.867,95.363 L155.867,98.914 C155.867,99.542 155.356,100.054 154.728,100.054 L154.728,100.054 Z" id="Fill-330" fill="#0073AA"></path>
38
+ <path d="M141.55,93.666 L153.758,93.666 L153.758,90.838 L141.55,90.838 L141.55,93.666 Z M154.119,95.166 L141.188,95.166 C140.56,95.166 140.05,94.655 140.05,94.027 L140.05,90.477 C140.05,89.849 140.56,89.338 141.188,89.338 L154.119,89.338 C154.747,89.338 155.258,89.849 155.258,90.477 L155.258,94.027 C155.258,94.655 154.747,95.166 154.119,95.166 L154.119,95.166 Z" id="Fill-332" fill="#0073AA"></path>
39
+ <path d="M101.438,7.16 L97.164,7.16 C96.75,7.16 96.414,6.824 96.414,6.41 C96.414,5.996 96.75,5.66 97.164,5.66 L101.438,5.66 C101.852,5.66 102.188,5.996 102.188,6.41 C102.188,6.824 101.852,7.16 101.438,7.16" id="Fill-340" fill="#0073AA"></path>
40
+ <path d="M99.301,9.297 C98.887,9.297 98.551,8.961 98.551,8.547 L98.551,4.273 C98.551,3.859 98.887,3.523 99.301,3.523 C99.715,3.523 100.051,3.859 100.051,4.273 L100.051,8.547 C100.051,8.961 99.715,9.297 99.301,9.297" id="Fill-341" fill="#0073AA"></path>
41
+ <path d="M42.733,24.023 L38.459,24.023 C38.045,24.023 37.709,23.688 37.709,23.273 C37.709,22.859 38.045,22.523 38.459,22.523 L42.733,22.523 C43.147,22.523 43.483,22.859 43.483,23.273 C43.483,23.688 43.147,24.023 42.733,24.023" id="Fill-342" fill="#0073AA"></path>
42
+ <path d="M40.596,26.16 C40.182,26.16 39.846,25.824 39.846,25.41 L39.846,21.136 C39.846,20.722 40.182,20.386 40.596,20.386 C41.01,20.386 41.346,20.722 41.346,21.136 L41.346,25.41 C41.346,25.824 41.01,26.16 40.596,26.16" id="Fill-343" fill="#0073AA"></path>
43
+ <path d="M152.15,52.938 C151.958,52.938 151.767,52.864 151.62,52.718 C151.327,52.425 151.327,51.95 151.62,51.657 L154.643,48.635 C154.935,48.342 155.41,48.342 155.703,48.635 C155.996,48.928 155.996,49.402 155.703,49.695 L152.681,52.718 C152.534,52.864 152.343,52.938 152.15,52.938" id="Fill-344" fill="#0073AA"></path>
44
+ <path d="M155.173,52.938 C154.98,52.938 154.789,52.864 154.643,52.718 L151.62,49.695 C151.327,49.402 151.327,48.928 151.62,48.635 C151.913,48.342 152.388,48.342 152.681,48.635 L155.703,51.657 C155.996,51.95 155.996,52.425 155.703,52.718 C155.557,52.864 155.365,52.938 155.173,52.938" id="Fill-345" fill="#0073AA"></path>
45
+ <path d="M5.332,64.237 C5.14,64.237 4.948,64.164 4.802,64.018 C4.509,63.725 4.509,63.25 4.802,62.957 L7.824,59.935 C8.117,59.642 8.592,59.642 8.885,59.935 C9.178,60.228 9.178,60.702 8.885,60.995 L5.862,64.018 C5.716,64.164 5.524,64.237 5.332,64.237" id="Fill-346" fill="#0073AA"></path>
46
+ <path d="M8.354,64.237 C8.162,64.237 7.971,64.164 7.824,64.018 L4.802,60.995 C4.509,60.702 4.509,60.228 4.802,59.935 C5.095,59.642 5.569,59.642 5.862,59.935 L8.885,62.957 C9.178,63.25 9.178,63.725 8.885,64.018 C8.738,64.164 8.547,64.237 8.354,64.237" id="Fill-347" fill="#0073AA"></path>
47
+ <polygon id="Fill-348" fill="#0073AA" points="12.078 49.372 29.474 49.372 29.474 47.872 12.078 47.872"></polygon>
48
+ <polygon id="Fill-349" fill="#0073AA" points="50.771 7.16 70.439 7.16 70.439 5.66 50.771 5.66"></polygon>
49
+ <polygon id="Fill-350" fill="#0073AA" points="112.441 51.426 150.247 51.426 150.247 49.926 112.441 49.926"></polygon>
50
+ <polygon id="Fill-351" fill="#0073AA" points="30.974 49.372 34.544 49.372 34.544 47.872 30.974 47.872"></polygon>
51
+ <polygon id="Fill-352" fill="#0073AA" points="95.949 13.22 113.346 13.22 113.346 11.72 95.949 11.72"></polygon>
52
+ <polygon id="Fill-353" fill="#0073AA" points="114.846 13.22 118.416 13.22 118.416 11.72 114.846 11.72"></polygon>
53
+ <path d="M129.29,35.307 C129.29,36.051 128.687,36.654 127.943,36.654 C127.2,36.654 126.597,36.051 126.597,35.307 C126.597,34.563 127.2,33.96 127.943,33.96 C128.687,33.96 129.29,34.563 129.29,35.307" id="Fill-354" fill="#0073AA"></path>
54
+ <path d="M60.281,56.195 C60.281,56.939 59.678,57.542 58.934,57.542 C58.19,57.542 57.587,56.939 57.587,56.195 C57.587,55.451 58.19,54.848 58.934,54.848 C59.678,54.848 60.281,55.451 60.281,56.195" id="Fill-355" fill="#0073AA"></path>
55
+ <path d="M149.201,21.202 C149.201,21.616 148.865,21.952 148.451,21.952 C148.037,21.952 147.701,21.616 147.701,21.202 C147.701,20.787 148.037,20.451 148.451,20.451 C148.865,20.451 149.201,20.787 149.201,21.202" id="Fill-356" fill="#0073AA"></path>
56
+ <path d="M57.468,1.665 C57.468,2.227 57.013,2.682 56.451,2.682 C55.889,2.682 55.434,2.227 55.434,1.665 C55.434,1.103 55.889,0.648 56.451,0.648 C57.013,0.648 57.468,1.103 57.468,1.665" id="Fill-357" fill="#0073AA"></path>
57
+ <path d="M122.492,103.665 L47.793,103.665 C43.641,103.665 40.244,100.268 40.244,96.116 L40.244,95.827 C40.244,91.675 43.641,88.278 47.793,88.278 L122.492,88.278 C126.644,88.278 130.041,91.675 130.041,95.827 L130.041,96.116 C130.041,100.268 126.644,103.665 122.492,103.665" id="Fill-358" fill="#FFFFFF"></path>
58
+ <path d="M70.679,76.533 C70.679,83.02 65.421,88.278 58.934,88.278 C52.448,88.278 47.189,83.02 47.189,76.533 C47.189,70.047 52.448,64.789 58.934,64.789 C65.421,64.789 70.679,70.047 70.679,76.533" id="Fill-359" fill="#FFFFFF"></path>
59
+ <path d="M50.772,78.312 C50.772,80.879 48.691,82.96 46.124,82.96 C43.556,82.96 41.475,80.879 41.475,78.312 C41.475,75.744 43.556,73.663 46.124,73.663 C48.691,73.663 50.772,75.744 50.772,78.312" id="Fill-360" fill="#FFFFFF"></path>
60
+ <path d="M48.498,83.603 C48.498,87.387 45.431,90.454 41.648,90.454 C37.865,90.454 34.798,87.387 34.798,83.603 C34.798,79.82 37.865,76.753 41.648,76.753 C45.431,76.753 48.498,79.82 48.498,83.603" id="Fill-361" fill="#FFFFFF"></path>
61
+ <path d="M49.505,94.404 C49.505,99.519 45.359,103.665 40.244,103.665 C35.13,103.665 30.983,99.519 30.983,94.404 C30.983,89.289 35.13,85.143 40.244,85.143 C45.359,85.143 49.505,89.289 49.505,94.404" id="Fill-362" fill="#FFFFFF"></path>
62
+ <path d="M40.244,104.415 C34.725,104.415 30.233,99.924 30.233,94.404 C30.233,91.145 31.828,88.08 34.499,86.205 L35.36,87.434 C33.089,89.027 31.733,91.633 31.733,94.404 C31.733,99.097 35.552,102.915 40.244,102.915 L40.244,104.415" id="Fill-363" fill="#0073AA"></path>
63
+ <path d="M73.306,85.898 C73.306,88.045 71.566,89.785 69.42,89.785 C67.273,89.785 65.533,88.045 65.533,85.898 C65.533,83.752 67.273,82.011 69.42,82.011 C71.566,82.011 73.306,83.752 73.306,85.898" id="Fill-364" fill="#FFFFFF"></path>
64
+ <path d="M120.686,76.042 C120.686,81.948 115.899,86.735 109.993,86.735 C104.088,86.735 99.301,81.948 99.301,76.042 C99.301,70.137 104.088,65.349 109.993,65.349 C115.899,65.349 120.686,70.137 120.686,76.042" id="Fill-365" fill="#FFFFFF"></path>
65
+ <path d="M122.552,82.011 C122.21,85.8 119.49,88.852 115.712,88.852 C111.934,88.852 108.871,85.789 108.871,82.011 C108.871,78.233 111.934,75.171 115.712,75.171 C119.49,75.171 122.892,78.249 122.552,82.011" id="Fill-366" fill="#FFFFFF"></path>
66
+ <path d="M115.7,86.735 C115.357,90.524 112.637,93.576 108.859,93.576 C105.081,93.576 102.019,90.513 102.019,86.735 C102.019,82.957 105.081,79.895 108.859,79.895 C112.637,79.895 116.04,82.973 115.7,86.735" id="Fill-367" fill="#FFFFFF"></path>
67
+ <path d="M68.646,86.824 C67.993,90.612 62.806,93.664 55.601,93.664 C48.397,93.664 42.556,90.602 42.556,86.824 C42.556,83.046 48.397,79.983 55.601,79.983 C62.806,79.983 69.295,83.061 68.646,86.824" id="Fill-368" fill="#FFFFFF"></path>
68
+ <path d="M136.204,83.664 C135.704,89.203 131.727,93.664 126.204,93.664 C120.681,93.664 116.203,89.187 116.203,83.664 C116.203,78.141 120.681,73.663 126.204,73.663 C131.727,73.663 136.702,78.163 136.204,83.664" id="Fill-369" fill="#FFFFFF"></path>
69
+ <path d="M133.476,94.017 C132.993,99.36 129.156,103.665 123.828,103.665 C118.5,103.665 114.18,99.345 114.18,94.017 C114.18,88.689 118.5,84.369 123.828,84.369 C129.156,84.369 133.956,88.71 133.476,94.017" id="Fill-370" fill="#FFFFFF"></path>
70
+ <path d="M107.183,83.126 C107.183,86.594 104.371,89.406 100.903,89.406 C97.435,89.406 94.624,86.594 94.624,83.126 C94.624,79.658 97.435,76.847 100.903,76.847 C104.371,76.847 107.183,79.658 107.183,83.126" id="Fill-371" fill="#FFFFFF"></path>
71
+ <path d="M99.082,88.633 C99.082,90.657 97.441,92.297 95.418,92.297 C93.395,92.297 91.754,90.657 91.754,88.633 C91.754,86.61 93.395,84.969 95.418,84.969 C97.441,84.969 99.082,86.61 99.082,88.633" id="Fill-372" fill="#FFFFFF"></path>
72
+ <path d="M92.195,88.972 L90.695,88.972 C90.695,86.538 92.676,84.558 95.109,84.558 L95.109,86.058 C93.503,86.058 92.195,87.365 92.195,88.972" id="Fill-373" fill="#0073AA"></path>
73
+ <path d="M84.029,90.971 C84.029,93.31 80.759,95.207 76.724,95.207 C72.69,95.207 69.42,93.31 69.42,90.971 C69.42,88.632 72.69,86.735 76.724,86.735 C80.759,86.735 84.029,88.632 84.029,90.971" id="Fill-374" fill="#FFFFFF"></path>
74
+ <path d="M126.407,73.973 C126.407,76.69 121.797,83.938 121.797,80.606 C121.797,77.89 116.879,78.404 116.879,75.688 C116.879,72.971 119.081,70.769 121.797,70.769 C124.514,70.769 126.407,71.257 126.407,73.973" id="Fill-375" fill="#FFFFFF"></path>
75
+ <path d="M125.598,73.972 C124.924,72.481 123.432,71.519 121.797,71.519 C121.219,71.519 120.657,71.635 120.13,71.865 L119.53,70.49 C120.248,70.178 121.011,70.019 121.797,70.019 C124.019,70.019 126.049,71.328 126.965,73.355 L125.598,73.972" id="Fill-376" fill="#0073AA"></path>
76
+ <path d="M101.902,84.134 C99.741,81.973 98.551,79.099 98.551,76.042 C98.551,72.984 99.741,70.111 101.902,67.951 C104.063,65.79 106.935,64.6 109.993,64.6 C113.05,64.6 115.924,65.79 118.085,67.951 C120.246,70.112 121.436,72.985 121.436,76.042 L119.936,76.042 C119.936,73.387 118.902,70.89 117.024,69.012 C115.146,67.134 112.649,66.1 109.993,66.1 C107.337,66.1 104.84,67.134 102.963,69.012 C101.085,70.889 100.051,73.386 100.051,76.042 C100.051,78.698 101.085,81.195 102.963,83.073 L101.902,84.134" id="Fill-377" fill="#0073AA"></path>
77
+ <polygon id="Fill-378" fill="#FFFFFF" points="77.451 51.464 89.899 51.464 89.899 46.22 77.451 46.22"></polygon>
78
+ <path d="M78.201,50.714 L89.148,50.714 L89.148,46.97 L78.201,46.97 L78.201,50.714 Z M76.701,52.214 L90.648,52.214 L90.648,45.47 L76.701,45.47 L76.701,52.214 Z" id="Fill-379" fill="#0073AA"></path>
79
+ <path d="M64.551,46.294 L76.328,46.294 L76.328,20.645 L71.981,26.524 C70.731,28.215 69.261,29.72 67.751,31.184 C65.729,33.146 64.551,35.865 64.551,38.748 L64.551,46.294" id="Fill-380" fill="#ADDDF8"></path>
80
+ <path d="M75.413,45.544 L72.563,45.544 L72.563,26.999 C72.57,26.989 72.578,26.98 72.585,26.97 L75.413,23.144 L75.413,45.544" id="Fill-381" fill="#8AC4E6"></path>
81
+ <path d="M102.228,46.785 L90.451,46.785 L90.451,21.136 L94.797,27.015 C96.048,28.706 97.517,30.211 99.027,31.675 C101.05,33.637 102.228,36.356 102.228,39.239 L102.228,46.785" id="Fill-382" fill="#ADDDF8"></path>
82
+ <polyline id="Fill-383" fill="#A6CFE4" points="94.578 26.718 91.618 22.714 91.618 21.328 94.578 25.331 94.578 26.718"></polyline>
83
+ <polyline id="Fill-384" fill-opacity="0.35266644" fill="#4B97C6" points="94.578 45.889 91.618 45.889 91.618 22.714 94.578 26.718 94.578 45.889"></polyline>
84
+ <path d="M65.301,45.544 L75.577,45.544 L75.577,22.922 L72.585,26.97 C71.271,28.745 69.736,30.303 68.274,31.722 C66.385,33.554 65.301,36.115 65.301,38.748 L65.301,45.544 M77.077,47.044 L63.801,47.044 L63.801,38.748 C63.801,35.712 65.051,32.758 67.229,30.645 C68.647,29.27 70.13,27.766 71.379,26.077 L77.077,18.369 L77.077,47.044" id="Fill-385" fill="#0073AA"></path>
85
+ <path d="M91.201,45.544 L101.477,45.544 L101.477,38.748 C101.477,36.115 100.394,33.555 98.505,31.722 C97.043,30.304 95.509,28.747 94.194,26.969 L91.201,22.921 L91.201,45.544 Z M102.977,47.044 L89.701,47.044 L89.701,18.37 L95.401,26.077 C96.65,27.769 98.133,29.272 99.55,30.646 C101.728,32.759 102.977,35.712 102.977,38.748 L102.977,47.044 L102.977,47.044 Z" id="Fill-386" fill="#0073AA"></path>
86
+ <path d="M91.618,48.85 L75.413,48.85 L75.413,15.269 C75.413,11.35 77.228,7.653 80.329,5.258 L81.776,4.14 C82.8,3.349 84.23,3.349 85.255,4.14 L86.833,5.36 C89.851,7.691 91.618,11.289 91.618,15.102 L91.618,48.85" id="Fill-387" fill="#FFFFFF"></path>
87
+ <path d="M79.37,6.274 L81.3,4.784 C82.666,3.728 84.573,3.728 85.939,4.784 L88.045,6.41 L79.37,6.274" id="Fill-388" fill="#0073AA"></path>
88
+ <path d="M75.413,15.269 C75.413,11.35 77.228,7.653 80.329,5.258 L81.776,4.14 C82.288,3.745 82.902,3.547 83.515,3.547 C84.129,3.547 84.742,3.745 85.255,4.14 C84.742,3.745 84.129,3.547 83.515,3.547 C82.902,3.547 82.288,3.745 81.776,4.14 L80.329,5.258 C77.228,7.653 75.413,11.35 75.413,15.269 M85.296,4.172 L85.255,4.14 L85.296,4.172" id="Fill-389" fill="#AFC9D6"></path>
89
+ <path d="M78.974,48.85 L75.413,48.85 L75.413,15.269 C75.413,11.35 77.228,7.653 80.329,5.258 L81.776,4.14 C82.288,3.745 82.902,3.547 83.515,3.547 C84.129,3.547 84.742,3.745 85.255,4.14 L85.296,4.172 L85.126,4.303 C84.646,4.096 84.133,3.992 83.62,3.992 C82.801,3.992 81.983,4.256 81.3,4.784 L79.37,6.274 L82.677,6.326 C80.321,8.682 78.974,11.893 78.974,15.269 L78.974,48.85" id="Fill-390" fill="#E7F7FF"></path>
90
+ <path d="M82.677,6.326 L79.37,6.274 L81.3,4.784 C81.983,4.256 82.801,3.992 83.62,3.992 C84.133,3.992 84.646,4.096 85.126,4.303 L83.89,5.258 C83.461,5.59 83.056,5.947 82.677,6.326" id="Fill-391" fill="#0073AA"></path>
91
+ <path d="M88.386,22.231 L86.886,22.231 C86.886,20.373 85.374,18.861 83.516,18.861 C81.657,18.861 80.144,20.373 80.144,22.231 L78.644,22.231 C78.644,19.546 80.83,17.361 83.516,17.361 C86.201,17.361 88.386,19.546 88.386,22.231" id="Fill-392" fill="#0073AA"></path>
92
+ <path d="M76.163,48.1 L90.868,48.1 L90.868,15.103 C90.868,11.547 89.188,8.127 86.374,5.953 L84.797,4.734 C84.041,4.15 82.989,4.15 82.235,4.734 L80.787,5.852 C77.892,8.089 76.163,11.609 76.163,15.269 L76.163,48.1 Z M92.368,49.6 L74.663,49.6 L74.663,15.269 C74.663,11.148 76.609,7.184 79.87,4.664 L81.318,3.547 C82.611,2.547 84.419,2.547 85.714,3.547 L87.291,4.766 C90.471,7.222 92.368,11.086 92.368,15.103 L92.368,49.6 L92.368,49.6 Z" id="Fill-393" fill="#0073AA"></path>
93
+ <path d="M100.903,90.155 C97.027,90.155 93.874,87.002 93.874,83.126 C93.874,79.936 96.026,77.141 99.107,76.328 L99.49,77.779 C97.066,78.418 95.374,80.616 95.374,83.126 C95.374,86.175 97.854,88.655 100.903,88.655 L100.903,90.155" id="Fill-394" fill="#0073AA"></path>
94
+ <path d="M65.124,87.39 L64.38,86.087 C67.803,84.131 69.929,80.471 69.929,76.533 C69.929,70.471 64.997,65.539 58.935,65.539 C52.872,65.539 47.939,70.471 47.939,76.533 L46.439,76.533 C46.439,69.644 52.045,64.039 58.935,64.039 C65.824,64.039 71.429,69.644 71.429,76.533 C71.429,81.008 69.013,85.167 65.124,87.39" id="Fill-395" fill="#0073AA"></path>
95
+ <path d="M44.285,74.873 L43.578,73.551 C44.833,72.879 46.358,72.732 47.716,73.152 L47.274,74.586 C46.293,74.284 45.191,74.389 44.285,74.873" id="Fill-396" fill="#0073AA"></path>
96
+ <path d="M69.42,90.535 L69.42,89.035 C71.149,89.035 72.557,87.628 72.557,85.898 C72.557,84.169 71.149,82.762 69.42,82.762 L69.42,81.262 C71.977,81.262 74.057,83.342 74.057,85.898 C74.057,88.455 71.977,90.535 69.42,90.535" id="Fill-397" fill="#0073AA"></path>
97
+ <path d="M99.033,94.918 L71.351,94.918 L79.363,85.898 L79.363,52.557 L87.943,52.557 L87.574,82.994 C87.551,84.824 88.383,86.56 89.823,87.691 L99.033,94.918" id="Fill-398" fill="#FFFFFF"></path>
98
+ <path d="M92.003,88.408 L91.112,88.408 C88.865,88.386 87.044,86.546 87.044,84.307 L87.044,52.557 L88.544,52.557 L88.544,84.307 C88.544,85.727 89.699,86.894 91.12,86.908 L92.003,86.908 L92.003,88.408" id="Fill-399" fill="#0073AA"></path>
99
+ <path d="M76.339,87.574 L73.298,87.574 L73.298,86.074 L76.339,86.074 C77.593,86.074 78.613,85.054 78.613,83.8 L78.613,52.557 L80.113,52.557 L80.113,83.8 C80.113,85.881 78.42,87.574 76.339,87.574" id="Fill-400" fill="#0073AA"></path>
100
+ <path d="M74.85,101.262 C74.842,100.523 74.977,99.794 75.249,99.099 C75.521,98.405 75.919,97.781 76.43,97.243 C76.96,96.687 77.588,96.247 78.298,95.938 C79.008,95.628 79.758,95.467 80.527,95.459 C81.263,95.461 81.996,95.585 82.69,95.857 C83.385,96.132 84.009,96.529 84.546,97.039 L83.513,98.127 C83.116,97.75 82.654,97.456 82.141,97.253 C81.643,97.058 81.12,96.959 80.588,96.959 L80.543,96.959 C79.976,96.965 79.422,97.084 78.897,97.313 C78.373,97.542 77.908,97.866 77.517,98.277 C77.141,98.673 76.847,99.135 76.645,99.648 C76.443,100.162 76.344,100.7 76.35,101.246 L74.85,101.262" id="Fill-401" fill="#0073AA"></path>
101
+ <path d="M50.021,89.266 C50.014,88.524 50.148,87.797 50.421,87.103 C50.694,86.408 51.092,85.783 51.603,85.246 C52.134,84.689 52.763,84.249 53.472,83.941 C54.18,83.632 54.93,83.471 55.699,83.463 C56.45,83.464 57.17,83.589 57.862,83.861 C58.555,84.134 59.179,84.531 59.718,85.043 L58.685,86.131 C58.286,85.753 57.825,85.459 57.313,85.258 C56.801,85.056 56.251,84.946 55.715,84.963 C55.147,84.969 54.594,85.088 54.07,85.316 C53.546,85.544 53.081,85.868 52.69,86.28 C52.313,86.677 52.019,87.138 51.817,87.651 C51.615,88.165 51.516,88.703 51.521,89.25 L50.021,89.266" id="Fill-402" fill="#0073AA"></path>
102
+ <path d="M114.568,86.589 L113.164,86.064 C113.355,85.551 113.444,85.012 113.428,84.461 C113.413,83.912 113.293,83.378 113.072,82.874 C112.846,82.356 112.519,81.895 112.102,81.5 C111.686,81.107 111.206,80.808 110.674,80.609 C110.161,80.417 109.619,80.319 109.07,80.345 C108.521,80.359 107.987,80.48 107.483,80.7 L106.882,79.325 C107.564,79.027 108.286,78.865 109.028,78.845 C109.77,78.831 110.502,78.944 111.198,79.204 C111.919,79.473 112.57,79.879 113.133,80.41 C113.695,80.942 114.138,81.569 114.446,82.272 C114.745,82.955 114.907,83.677 114.928,84.419 C114.949,85.163 114.828,85.894 114.568,86.589" id="Fill-403" fill="#0073AA"></path>
103
+ <path d="M81.966,96.485 L80.479,96.284 C80.583,95.52 80.835,94.795 81.228,94.131 C81.62,93.468 82.134,92.898 82.753,92.439 C83.352,91.996 84.019,91.679 84.739,91.493 C85.463,91.31 86.201,91.266 86.935,91.363 L86.736,92.85 C86.194,92.776 85.647,92.809 85.112,92.946 C84.581,93.083 84.087,93.318 83.644,93.645 C83.188,93.982 82.81,94.403 82.52,94.895 C82.228,95.387 82.042,95.921 81.966,96.485" id="Fill-404" fill="#0073AA"></path>
104
+ <path d="M114.923,97.504 L113.436,97.303 C113.539,96.541 113.791,95.817 114.185,95.15 C114.579,94.484 115.092,93.915 115.71,93.457 C116.307,93.016 116.975,92.698 117.696,92.512 C118.42,92.326 119.158,92.284 119.893,92.382 L119.693,93.868 C119.151,93.794 118.603,93.826 118.069,93.965 C117.536,94.103 117.042,94.337 116.602,94.662 C116.146,95 115.768,95.421 115.477,95.913 C115.185,96.406 114.999,96.941 114.923,97.504" id="Fill-405" fill="#0073AA"></path>
105
+ <path d="M97.82,104.67 C97.09,104.43 96.424,104.05 95.841,103.542 C95.258,103.033 94.791,102.424 94.454,101.733 C94.128,101.065 93.938,100.35 93.888,99.607 C93.836,98.865 93.928,98.131 94.159,97.425 L95.585,97.892 C95.414,98.413 95.346,98.956 95.384,99.505 C95.421,100.055 95.561,100.582 95.802,101.075 C96.051,101.586 96.395,102.035 96.827,102.411 C97.258,102.787 97.75,103.067 98.289,103.244 L97.82,104.67" id="Fill-406" fill="#0073AA" transform="translate(96.081444, 101.047500) rotate(-7.000000) translate(-96.081444, -101.047500) "></path>
106
+ <path d="M36.273,88.978 C34.838,87.541 34.048,85.633 34.048,83.604 C34.048,79.412 37.457,76.003 41.648,76.003 C43.405,76.003 45.119,76.617 46.475,77.731 L45.521,78.89 C44.435,77.995 43.059,77.503 41.648,77.503 C38.284,77.503 35.548,80.239 35.548,83.604 C35.548,85.232 36.183,86.765 37.334,87.917 L36.273,88.978" id="Fill-407" fill="#0073AA"></path>
107
+ <path d="M130.726,93.384 L130.065,92.036 C133.054,90.573 135.119,87.34 135.457,83.597 C135.655,81.409 134.9,79.259 133.331,77.541 C131.048,75.044 127.321,73.874 124.019,74.673 L123.668,73.214 C127.486,72.293 131.796,73.638 134.438,76.529 C136.295,78.563 137.188,81.12 136.951,83.731 C136.56,88.058 134.233,91.666 130.726,93.384" id="Fill-408" fill="#0073AA"></path>
108
+ <path d="M123.828,104.415 L123.828,102.915 C128.517,102.915 132.26,99.145 132.728,93.949 C132.815,92.994 132.716,92.046 132.433,91.133 L133.864,90.688 C134.207,91.79 134.327,92.933 134.223,94.085 C133.683,100.07 129.31,104.415 123.828,104.415" id="Fill-409" fill="#0073AA"></path>
109
+ <path d="M43.833,81.368 L17.011,81.368 C16.226,81.368 15.59,82.004 15.59,82.788 L15.59,103.676 L42.442,103.676 C44.033,103.676 45.323,102.386 45.323,100.794 L45.323,82.858 C45.323,82.035 44.656,81.368 43.833,81.368" id="Fill-410" fill="#62A6CF"></path>
110
+ <path d="M42.988,104.426 L14.841,104.426 L14.841,82.519 C14.841,81.471 15.693,80.618 16.741,80.618 L34.269,80.618 L34.269,82.118 L16.741,82.118 C16.52,82.118 16.341,82.298 16.341,82.519 L16.341,102.926 L42.988,102.926 C43.862,102.926 44.573,102.215 44.573,101.341 L44.573,82.576 C44.573,82.323 44.368,82.118 44.115,82.118 L42.284,82.118 L42.284,80.618 L44.115,80.618 C45.195,80.618 46.073,81.496 46.073,82.576 L46.073,101.341 C46.073,103.042 44.689,104.426 42.988,104.426" id="Fill-411" fill="#0073AA"></path>
111
+ <path d="M34.673,73.02 L40.596,78.943 L40.596,99.62 C40.596,100.556 39.837,101.315 38.902,101.315 L21.218,101.315 C20.283,101.315 19.524,100.556 19.524,99.62 L19.524,74.714 C19.524,73.778 20.283,73.02 21.218,73.02 L34.673,73.02" id="Fill-412" fill="#FFFFFF"></path>
112
+ <polyline id="Fill-413" fill="#62A6CF" points="34.673 78.943 34.673 73.02 40.596 78.943 34.673 78.943"></polyline>
113
+ <path d="M40.596,79.692 L35.265,79.692 C34.524,79.692 33.923,79.091 33.923,78.351 L33.923,73.02 L35.423,73.02 L35.423,78.192 L40.596,78.192 L40.596,79.692" id="Fill-414" fill="#0073AA"></path>
114
+ <path d="M38.901,102.065 L21.219,102.065 L21.219,100.565 L38.901,100.565 C39.422,100.565 39.846,100.141 39.846,99.62 L39.846,79.253 L34.362,73.77 L21.219,73.77 C20.697,73.77 20.273,74.193 20.273,74.714 L20.273,82.695 L18.773,82.695 L18.773,74.714 C18.773,73.366 19.87,72.27 21.219,72.27 L34.983,72.27 L41.346,78.632 L41.346,99.62 C41.346,100.968 40.249,102.065 38.901,102.065" id="Fill-415" fill="#0073AA"></path>
115
+ <path d="M38.123,71.295 L44.046,77.218 L44.046,97.895 C44.046,98.831 43.287,99.59 42.351,99.59 L24.668,99.59 C23.732,99.59 22.974,98.831 22.974,97.895 L22.974,72.989 C22.974,72.053 23.732,71.295 24.668,71.295 L38.123,71.295" id="Fill-416" fill="#ADDDF8"></path>
116
+ <polyline id="Fill-417" fill="#62A6CF" points="38.123 77.218 38.123 71.295 44.046 77.218 38.123 77.218"></polyline>
117
+ <path d="M44.046,77.968 L38.715,77.968 C37.975,77.968 37.373,77.366 37.373,76.626 L37.373,71.295 L38.873,71.295 L38.873,76.468 L44.046,76.468 L44.046,77.968" id="Fill-418" fill="#0073AA"></path>
118
+ <polygon id="Fill-419" fill="#0073AA" points="26.133 80.857 41.201 80.857 41.201 79.357 26.133 79.357"></polygon>
119
+ <polygon id="Fill-420" fill="#0073AA" points="26.133 84.218 41.201 84.218 41.201 82.718 26.133 82.718"></polygon>
120
+ <polygon id="Fill-421" fill="#0073AA" points="26.133 87.577 41.201 87.577 41.201 86.077 26.133 86.077"></polygon>
121
+ <polygon id="Fill-422" fill="#0073AA" points="26.133 90.938 41.201 90.938 41.201 89.438 26.133 89.438"></polygon>
122
+ <path d="M42.352,100.34 L41.572,100.34 L41.572,98.84 L42.352,98.84 C42.872,98.84 43.296,98.416 43.296,97.896 L43.296,77.528 L37.813,72.045 L24.668,72.045 C24.147,72.045 23.724,72.469 23.724,72.989 L23.724,84.941 L22.224,84.941 L22.224,72.989 C22.224,71.642 23.32,70.545 24.668,70.545 L38.434,70.545 L44.796,76.907 L44.796,97.896 C44.796,99.243 43.699,100.34 42.352,100.34" id="Fill-423" fill="#0073AA"></path>
123
+ <path d="M41.572,73.882 L47.496,79.805 L47.496,100.483 C47.496,101.418 46.737,102.177 45.801,102.177 L28.118,102.177 C27.182,102.177 26.423,101.418 26.423,100.483 L26.423,75.577 C26.423,74.641 27.182,73.882 28.118,73.882 L41.572,73.882" id="Fill-424" fill="#FFFFFF"></path>
124
+ <polyline id="Fill-425" fill="#E7F7FF" points="41.572 79.805 41.572 73.882 47.496 79.805 41.572 79.805"></polyline>
125
+ <path d="M47.495,80.556 L42.164,80.556 C41.424,80.556 40.822,79.953 40.822,79.213 L40.822,73.882 L42.322,73.882 L42.322,79.056 L47.495,79.056 L47.495,80.556" id="Fill-426" fill="#0073AA"></path>
126
+ <polygon id="Fill-427" fill="#0073AA" points="29.582 83.445 44.651 83.445 44.651 81.945 29.582 81.945"></polygon>
127
+ <polygon id="Fill-428" fill="#0073AA" points="29.582 86.805 44.651 86.805 44.651 85.305 29.582 85.305"></polygon>
128
+ <polygon id="Fill-429" fill="#0073AA" points="29.582 90.165 44.651 90.165 44.651 88.665 29.582 88.665"></polygon>
129
+ <polygon id="Fill-430" fill="#0073AA" points="29.582 93.525 44.651 93.525 44.651 92.025 29.582 92.025"></polygon>
130
+ <path d="M45.801,102.927 L42.779,102.927 L42.779,101.427 L45.801,101.427 C46.321,101.427 46.745,101.003 46.745,100.482 L46.745,80.116 L41.262,74.632 L28.118,74.632 C27.598,74.632 27.174,75.056 27.174,75.576 L27.174,84.942 L25.674,84.942 L25.674,75.576 C25.674,74.229 26.77,73.132 28.118,73.132 L41.883,73.132 L48.245,79.495 L48.245,100.482 C48.245,101.83 47.148,102.927 45.801,102.927" id="Fill-431" fill="#0073AA"></path>
131
+ <path d="M42.943,103.676 L14.569,103.676 C13.889,103.676 13.337,103.124 13.337,102.444 L13.337,84.829 C13.337,84.26 13.798,83.8 14.366,83.8 L19.216,83.8 C19.569,83.8 19.898,83.982 20.086,84.281 L21.338,86.27 L39.383,86.27 C40.034,86.27 40.562,86.798 40.562,87.449 L40.562,101.296 C40.562,102.407 41.358,103.676 42.943,103.676" id="Fill-432" fill="#FFFFFF"></path>
132
+ <path d="M40.562,97.998 L13.337,97.998 L13.337,102.081085 C13.337,102.961395 13.889,103.676 14.57,103.676 L42.943,103.676 C41.358,103.676 40.562,102.033186 40.562,100.59362 L40.562,97.998 Z" id="Fill-433" fill="#E7F7FF"></path>
133
+ <path d="M42.942,104.426 C40.909,104.426 39.813,102.814 39.813,101.296 L39.813,87.449 C39.813,87.212 39.62,87.02 39.384,87.02 L20.924,87.02 L19.452,84.68 C19.401,84.6 19.311,84.55 19.216,84.55 L14.366,84.55 C14.212,84.55 14.087,84.675 14.087,84.829 L14.087,103.571 L12.587,103.571 L12.587,84.829 C12.587,83.848 13.385,83.05 14.366,83.05 L19.216,83.05 C19.83,83.05 20.394,83.36 20.722,83.88 L21.752,85.52 L39.384,85.52 C40.447,85.52 41.313,86.385 41.313,87.449 L41.313,101.296 C41.313,101.951 41.746,102.926 42.942,102.926 L42.942,104.426" id="Fill-434" fill="#0073AA"></path>
134
+ <polygon id="Fill-435" fill="#0073AA" points="5.332 104.426 164.92275 104.426 164.92275 102.926 5.332 102.926"></polygon>
135
+ <polygon id="Fill-436" fill="#0073AA" points="0.77 104.426 3.509 104.426 3.509 102.926 0.77 102.926"></polygon>
136
+ </g>
137
+ </g>
138
+ </g>
139
+ </symbol>
140
+
141
+
142
+ <symbol id="icon-done" width="177px" height="107px" viewBox="0 0 177 107" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
143
+ <!-- Generator: Sketch 44.1 (41455) - http://www.bohemiancoding.com/sketch -->
144
+ <desc>Created with Sketch.</desc>
145
+ <defs></defs>
146
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
147
+ <path d="M62.855,71.007 L62.759,71.007 C62.336,69.55 60.994,68.484 59.401,68.484 C58.705,68.484 58.059,68.689 57.514,69.039 C57.16,66.744 55.182,64.984 52.788,64.984 C50.638,64.984 48.82,66.4 48.215,68.35 C47.942,68.277 47.656,68.234 47.36,68.234 C45.72,68.234 44.364,69.436 44.116,71.007 L43.58,71.007 C42.23,71.007 41.125,72.112 41.125,73.462 L41.125,73.643 C41.125,74.993 42.23,76.098 43.58,76.098 L62.855,76.098 C64.205,76.098 65.31,74.993 65.31,73.643 L65.31,73.462 C65.31,72.112 64.205,71.007 62.855,71.007" id="Fill-447" fill="#FFFFFF"></path>
148
+ <path d="M52.734,76.848 L43.552,76.848 C41.603,76.848 40.017,75.262 40.017,73.313 L40.017,73.108 C40.017,71.159 41.603,69.573 43.552,69.573 L43.565,69.573 C44.185,67.566 46.144,66.208 48.328,66.456 C48.409,66.268 48.501,66.083 48.602,65.904 C48.789,65.567 49.014,65.243 49.268,64.941 C50.447,63.543 52.171,62.741 53.997,62.741 C57.065,62.741 59.632,64.943 60.1,67.977 L58.617,68.205 C58.263,65.908 56.32,64.241 53.997,64.241 C52.614,64.241 51.309,64.848 50.415,65.907 C50.223,66.136 50.053,66.381 49.911,66.636 C49.75,66.923 49.621,67.223 49.526,67.531 L49.314,68.222 L48.614,68.034 C46.835,67.552 45.17,68.734 44.9,70.44 L44.8,71.073 L43.552,71.073 C42.43,71.073 41.517,71.986 41.517,73.108 L41.517,73.313 C41.517,74.435 42.43,75.348 43.552,75.348 L52.734,75.348 L52.734,76.848" id="Fill-449" fill="#0073AA"></path>
149
+ <path d="M50.593,69.095 L49.093,69.095 C49.093,68.442 48.561,67.912 47.909,67.912 L47.909,66.412 C49.389,66.412 50.593,67.615 50.593,69.095" id="Fill-450" fill="#0073AA"></path>
150
+ <path d="M118.93,55.565 C118.058,54.222 116.583,53.42 114.986,53.42 C114.142,53.42 113.313,53.647 112.59,54.076 L111.824,52.786 C112.779,52.22 113.872,51.92 114.986,51.92 C117.094,51.92 119.038,52.978 120.188,54.749 L118.93,55.565" id="Fill-453" fill="#0073AA"></path>
151
+ <path d="M129.06,66.089 L116.041,66.089 L116.041,64.589 L129.06,64.589 C130.497,64.589 131.667,63.42 131.667,61.982 L131.667,61.735 C131.667,60.297 130.497,59.128 129.06,59.128 L128.365,59.128 L128.208,58.587 C127.712,56.874 126.119,55.679 124.337,55.679 C123.566,55.679 122.814,55.9 122.162,56.319 L121.191,56.941 L121.016,55.802 C120.577,52.958 118.172,50.894 115.295,50.894 C113.582,50.894 111.966,51.646 110.861,52.957 C110.624,53.238 110.414,53.542 110.235,53.861 C110.037,54.214 109.877,54.587 109.76,54.968 L109.546,55.658 L108.848,55.47 C108.52,55.382 108.193,55.337 107.875,55.337 L107.875,53.837 C108.102,53.837 108.33,53.853 108.559,53.884 C108.666,53.626 108.789,53.373 108.927,53.128 C109.151,52.727 109.416,52.344 109.715,51.99 C111.104,50.34 113.139,49.394 115.295,49.394 C118.572,49.394 121.364,51.521 122.274,54.579 C122.928,54.315 123.627,54.179 124.337,54.179 C126.598,54.179 128.635,55.581 129.469,57.648 C131.542,57.854 133.167,59.608 133.167,61.735 L133.167,61.982 C133.167,64.247 131.324,66.089 129.06,66.089" id="Fill-454" fill="#0073AA"></path>
152
+ <path d="M120.512,17.724 L116.237,17.724 C115.823,17.724 115.487,17.388 115.487,16.974 C115.487,16.56 115.823,16.224 116.237,16.224 L120.512,16.224 C120.926,16.224 121.262,16.56 121.262,16.974 C121.262,17.388 120.926,17.724 120.512,17.724" id="Fill-456" fill="#0073AA"></path>
153
+ <path d="M118.375,19.861 C117.961,19.861 117.625,19.525 117.625,19.111 L117.625,14.837 C117.625,14.423 117.961,14.087 118.375,14.087 C118.789,14.087 119.125,14.423 119.125,14.837 L119.125,19.111 C119.125,19.525 118.789,19.861 118.375,19.861" id="Fill-457" fill="#0073AA"></path>
154
+ <path d="M43.262,17.724 L38.987,17.724 C38.573,17.724 38.237,17.388 38.237,16.974 C38.237,16.56 38.573,16.224 38.987,16.224 L43.262,16.224 C43.676,16.224 44.012,16.56 44.012,16.974 C44.012,17.388 43.676,17.724 43.262,17.724" id="Fill-458" fill="#0073AA"></path>
155
+ <path d="M41.125,19.861 C40.711,19.861 40.375,19.525 40.375,19.111 L40.375,14.837 C40.375,14.423 40.711,14.087 41.125,14.087 C41.539,14.087 41.875,14.423 41.875,14.837 L41.875,19.111 C41.875,19.525 41.539,19.861 41.125,19.861" id="Fill-459" fill="#0073AA"></path>
156
+ <path d="M167.776,59.179 C167.584,59.179 167.393,59.106 167.246,58.96 C166.953,58.667 166.953,58.192 167.246,57.899 L170.269,54.877 C170.561,54.583 171.036,54.583 171.329,54.877 C171.622,55.169 171.622,55.644 171.329,55.937 L168.307,58.96 C168.16,59.106 167.969,59.179 167.776,59.179" id="Fill-460" fill="#0073AA"></path>
157
+ <path d="M170.799,59.179 C170.606,59.179 170.415,59.106 170.269,58.96 L167.246,55.937 C166.953,55.644 166.953,55.169 167.246,54.877 C167.539,54.583 168.014,54.583 168.307,54.877 L171.329,57.899 C171.622,58.192 171.622,58.667 171.329,58.96 C171.183,59.106 170.991,59.179 170.799,59.179" id="Fill-461" fill="#0073AA"></path>
158
+ <polygon id="Fill-466" fill="#0073AA" points="52.286 13.45 93.083 13.45 93.083 11.95 52.286 11.95"></polygon>
159
+ <polygon id="Fill-467" fill="#0073AA" points="9.023 59.856 34.619 59.856 34.619 58.356 9.023 58.356"></polygon>
160
+ <polygon id="Fill-468" fill="#0073AA" points="142.007 67.75 161.109 67.75 161.109 66.25 142.007 66.25"></polygon>
161
+ <polygon id="Fill-469" fill="#0073AA" points="163.403 67.75 166.009 67.75 166.009 66.25 163.403 66.25"></polygon>
162
+ <path d="M93.102,28.199 C93.102,28.939 92.502,29.538 91.763,29.538 C91.024,29.538 90.425,28.939 90.425,28.199 C90.425,27.46 91.024,26.861 91.763,26.861 C92.502,26.861 93.102,27.46 93.102,28.199" id="Fill-471" fill="#0073AA"></path>
163
+ <path d="M161.822,49.274 C161.822,50.147 161.114,50.855 160.241,50.855 C159.367,50.855 158.659,50.147 158.659,49.274 C158.659,48.401 159.367,47.693 160.241,47.693 C161.114,47.693 161.822,48.401 161.822,49.274" id="Fill-472" fill="#0073AA"></path>
164
+ <path d="M141.313,34.272 L147.564,34.272 L147.586,33.937 C147.722,31.815 150.68,28.247 152.484,26.167 C154.733,23.575 156.095,20.192 156.095,16.49 C156.095,8.326 149.477,1.708 141.313,1.708 L141.313,34.272" id="Fill-474" fill="#E7F7FF"></path>
165
+ <path d="M141.309,34.272 L135.058,34.272 L135.037,33.937 C134.9,31.815 131.941,28.247 130.137,26.167 C127.888,23.575 126.526,20.192 126.526,16.49 C126.526,8.326 133.144,1.708 141.308,1.708 L141.309,34.272" id="Fill-475" fill="#FFFFFF"></path>
166
+ <path d="M141.211,34.272 L144.772,34.272 L144.784,33.937 C144.86,31.815 146.513,28.247 147.541,26.167 C148.822,23.575 149.598,20.192 149.598,16.49 C149.598,8.326 145.827,1.708 141.176,1.708 L141.211,34.272" id="Fill-476" fill="#FFFFFF"></path>
167
+ <path d="M141.208,34.272 L137.647,34.272 L137.634,33.937 C137.554,31.815 135.835,28.247 134.807,26.167 C133.526,23.575 132.75,20.192 132.75,16.49 C132.75,8.326 136.521,1.708 141.173,1.708 L141.208,34.272" id="Fill-477" fill="#E7F7FF"></path>
168
+ <path d="M141.96,33.522 L144.062,33.522 C144.235,31.818 145.157,29.296 146.869,25.835 C148.146,23.251 148.849,19.933 148.849,16.49 C148.849,9.346 145.749,3.243 141.927,2.528 L141.96,33.522 Z M145.497,35.022 L140.462,35.022 L140.425,0.957 L141.176,0.957 C146.319,0.957 150.349,7.78 150.349,16.49 C150.349,20.158 149.59,23.713 148.214,26.5 C146.064,30.848 145.569,32.959 145.534,33.964 L145.497,35.022 L145.497,35.022 Z" id="Fill-478" fill="#0073AA"></path>
169
+ <path d="M138.354,33.522 L140.457,33.522 L140.424,2.524 C136.543,3.215 133.5,9.215 133.5,16.49 C133.5,19.935 134.203,23.253 135.479,25.835 C136.788,28.483 138.133,31.436 138.354,33.522 Z M141.959,35.022 L136.925,35.022 L136.885,33.966 C136.807,31.907 134.935,28.118 134.135,26.5 C132.759,23.715 132,20.161 132,16.49 C132,7.78 136.029,0.957 141.173,0.957 L141.922,0.957 L141.959,35.022 L141.959,35.022 Z" id="Fill-479" fill="#0073AA"></path>
170
+ <path d="M135.731,33.522 L146.881,33.522 C147.175,31.771 148.781,29.27 151.891,25.706 C154.118,23.154 155.345,19.881 155.345,16.49 C155.345,12.573 153.771,8.939 150.914,6.257 C148.06,3.578 144.325,2.24 140.399,2.487 C133.477,2.925 127.855,8.467 127.324,15.378 C127.031,19.185 128.244,22.855 130.74,25.712 C133.7,29.1 135.375,31.723 135.731,33.522 Z M147.354,35.022 L135.273,35.022 C134.758,35.022 134.33,34.618 134.3,34.103 C134.21,32.708 132.501,30.007 129.611,26.699 C126.848,23.536 125.504,19.475 125.828,15.263 C126.417,7.611 132.641,1.475 140.306,0.99 C144.632,0.714 148.781,2.197 151.941,5.163 C155.058,8.089 156.845,12.217 156.845,16.49 C156.845,20.243 155.487,23.867 153.021,26.693 C149.258,31.005 148.396,33.039 148.334,33.986 L148.326,34.107 C148.293,34.621 147.865,35.022 147.354,35.022 L147.354,35.022 Z" id="Fill-480" fill="#0073AA"></path>
171
+ <path d="M142.856,53.914 L140.071,53.914 C137.876,53.914 136.08,52.118 136.08,49.923 L136.08,44.851 L146.847,44.851 L146.847,49.923 C146.847,52.118 145.051,53.914 142.856,53.914" id="Fill-481" fill="#8AC4E6"></path>
172
+ <path d="M137.51,49.923 L137.51,44.851 L136.08,44.851 L136.08,49.923 C136.08,52.118 137.876,53.914 140.071,53.914 L141.501,53.914 C139.306,53.914 137.51,52.118 137.51,49.923" id="Fill-482" fill="#E7F7FF"></path>
173
+ <path d="M144.395,44.851 L144.395,49.923 C144.395,52.118 142.599,53.914 140.404,53.914 L142.856,53.914 C145.051,53.914 146.847,52.118 146.847,49.923 L146.847,44.851 L144.395,44.851" id="Fill-483" fill="#E7F7FF"></path>
174
+ <polyline id="Fill-484" fill="#468EBF" points="137.51 47.072 137.51 44.851 144.395 44.851 144.395 46.106 137.51 47.072"></polyline>
175
+ <path d="M136.829,45.601 L136.829,49.923 C136.829,51.71 138.283,53.164 140.07,53.164 L142.856,53.164 C144.644,53.164 146.098,51.71 146.098,49.923 L146.098,45.601 L136.829,45.601 Z M142.856,54.664 L140.07,54.664 C137.456,54.664 135.329,52.537 135.329,49.923 L135.329,44.101 L147.598,44.101 L147.598,49.923 C147.598,52.537 145.471,54.664 142.856,54.664 L142.856,54.664 Z" id="Fill-487" fill="#0073AA"></path>
176
+ <path d="M147.265,44.788 L135.662,44.788 C135.113,44.788 134.664,44.339 134.664,43.79 L134.664,43.789 C134.664,43.24 135.113,42.791 135.662,42.791 L147.265,42.791 C147.814,42.791 148.263,43.24 148.263,43.789 L148.263,43.79 C148.263,44.339 147.814,44.788 147.265,44.788" id="Fill-488" fill="#62A6CF"></path>
177
+ <path d="M135.662,43.541 C135.527,43.541 135.414,43.655 135.414,43.79 C135.414,43.924 135.527,44.038 135.662,44.038 L147.265,44.038 C147.399,44.038 147.514,43.924 147.514,43.79 C147.514,43.655 147.399,43.541 147.265,43.541 L135.662,43.541 Z M147.265,45.538 L135.662,45.538 C134.698,45.538 133.914,44.754 133.914,43.79 C133.914,42.825 134.698,42.041 135.662,42.041 L147.265,42.041 C148.229,42.041 149.014,42.825 149.014,43.79 C149.014,44.754 148.229,45.538 147.265,45.538 L147.265,45.538 Z" id="Fill-489" fill="#0073AA"></path>
178
+ <polyline id="Fill-492" fill="#0073AA" points="137.017 43.04 134.32 34.334 135.754 33.891 138.45 42.596 137.017 43.04"></polyline>
179
+ <polyline id="Fill-493" fill="#0073AA" points="145.721 43.024 144.279 42.611 146.729 34.065 148.17 34.479 145.721 43.024"></polyline>
180
+ <path d="M104.043,65.339 L102.706,65.339 C100.86,65.339 99.349,63.829 99.349,61.982 C99.349,63.829 100.86,65.339 102.706,65.339 L104.043,65.339" id="Fill-494" fill="#96BCD2"></path>
181
+ <path d="M117.288,66.089 L116.041,66.089 L116.041,64.589 L116.179,64.589 L117.288,66.089 M108.372,55.373 C108.205,55.349 108.039,55.337 107.875,55.337 L107.875,53.837 L107.958,53.843 L107.958,55.318 C108.101,55.318 108.24,55.337 108.372,55.373" id="Fill-497" fill="#2871AB"></path>
182
+ <path d="M66.57,62.586 L97.489,105.676 L34.296,105.676 L66.149,62.583 C66.254,62.441 66.467,62.443 66.57,62.586" id="Fill-499" fill="#E7F7FF"></path>
183
+ <path d="M33.692,105.23 L65.546,62.137 C65.735,61.881 66.039,61.727 66.358,61.727 C66.685,61.729 66.989,61.886 67.178,62.147 L77.6536458,76.6425781 L76.6692708,78.1077474 L66.35,63.574 L34.899,106.122 L33.692,105.23 Z" id="Fill-500" fill="#0073AA"></path>
184
+ <polyline id="Fill-501" fill="#96BCD2" points="85.855 89.463 75.321 74.782 85.855 89.463"></polyline>
185
+ <polygon id="Fill-502" fill="#8AC4E6" points="52.948 105.181 75.134847 75.8929036 97.134 105.181"></polygon>
186
+ <polyline id="Fill-504" fill="#ADDDF8" points="143.251 105.181 56.448 105.181 99.205 45.594 143.251 105.181"></polyline>
187
+ <polyline id="Fill-505" fill="#FFFFFF" points="109.61 59.649 107.731 57.282 107.841 57.133 99.193 45.594 91.22 57.133 90.913 57.133 88.916 59.649 92.121 64.116 94.206 61.295 99.407 68.543 104.542 61.596 106.405 64.116 109.61 59.649"></polyline>
188
+ <polyline id="Fill-506" fill="#0073AA" points="142.641188 106.122 98.9618386 46.8885729 56.5677088 106.112927 55.3418229 105.231871 98.9437369 44.32 143.854 105.222798 142.641188 106.122"></polyline>
189
+ <polygon id="Fill-507" fill="#0073AA" points="98.455 47.073 99.955 47.073 99.955 32.087 98.455 32.087"></polygon>
190
+ <polyline id="Fill-508" fill="#8AC4E6" points="115.521 45.057 105.174 45.057 105.174 37.006 115.521 37.006 113.909 41.031 115.521 45.057"></polyline>
191
+ <path d="M105.924,44.307 L114.412,44.307 L113.102,41.031 L114.412,37.756 L105.924,37.756 L105.924,44.307 Z M116.629,45.807 L104.424,45.807 L104.424,36.256 L116.629,36.256 L114.717,41.031 L116.629,45.807 L116.629,45.807 Z" id="Fill-509" fill="#0073AA"></path>
192
+ <polygon id="Fill-510" fill="#ADDDF8" points="99.263 42.37 109.61 42.37 109.61 34.319 99.263 34.319"></polygon>
193
+ <path d="M100.013,41.62 L108.86,41.62 L108.86,35.069 L100.013,35.069 L100.013,41.62 Z M98.513,43.12 L110.36,43.12 L110.36,33.569 L98.513,33.569 L98.513,43.12 Z" id="Fill-511" fill="#0073AA"></path>
194
+ <path d="M21.023,89.476 C12.061,87.325 13.217,80.28 13.229,80.209 L13.341,79.591 L19.459,79.591 L19.459,81.091 L14.659,81.091 C14.643,82.622 15.225,86.542 21.373,88.017 L21.023,89.476" id="Fill-512" fill="#0073AA"></path>
195
+ <path d="M36.928,89.476 L36.578,88.017 C42.766,86.532 43.325,82.62 43.297,81.091 L38.491,81.091 L38.491,79.591 L44.611,79.591 L44.722,80.209 C44.734,80.28 45.89,87.325 36.928,89.476" id="Fill-513" fill="#0073AA"></path>
196
+ <path d="M38.565,81.6647988 C38.565,80.3060295 38.334,79.0116845 37.931,77.813 L19.997,77.813 C19.594,79.0116845 19.363,80.3060295 19.363,81.6647988 C19.363,87.2404387 23.08,92.8209593 27.864,93.5784342 L27.864,101.038 L30.064,101.038 L30.064,93.5784342 C34.848,92.8209593 38.565,87.2404387 38.565,81.6647988" id="Fill-514" fill="#E7F7FF"></path>
197
+ <path d="M28.39,93.958 C23.949,92.768 22.961,87.189 22.961,81.759 C22.961,80.367 23.191,79.041 23.594,77.813 L21.436,77.813 C21.033,79.041 20.802,80.367 20.802,81.759 C20.802,87.471 23.08,93.188 27.864,93.964 C27.864,93.964 28.159,94.02 28.39,93.958" id="Fill-515" fill="#FFFFFF"></path>
198
+ <polygon id="Fill-516" fill="#0073AA" points="24.596 78.563 26.353 78.563 26.353 77.063 24.596 77.063"></polygon>
199
+ <path d="M30.815,100.856 L27.114,100.856 L27.114,93.5373925 C22.372,92.4292537 18.613,87.1764125 18.613,81.480504 C18.613,80.1465984 18.839,78.8239811 19.284,77.5483986 L19.454,77.063 L22.971,77.063 L22.971,78.4740426 L20.553,78.4740426 C20.261,79.4551875 20.113,80.4645533 20.113,81.480504 C20.113,86.6750221 23.718,91.6146118 27.984,92.2655728 L28.614,92.3615237 L28.614,99.4449574 L29.315,99.4449574 L29.315,92.3615237 L29.944,92.2655728 C34.21,91.6146118 37.815,86.6750221 37.815,81.480504 C37.815,80.465494 37.667,79.4561282 37.376,78.4740426 L27.461,78.4740426 L27.461,77.063 L38.476,77.063 L38.645,77.5483986 C39.089,78.8249218 39.315,80.1484798 39.315,81.480504 C39.315,87.1764125 35.556,92.4292537 30.815,93.5373925 L30.815,100.856" id="Fill-517" fill="#0073AA"></path>
200
+ <polygon id="Fill-518" fill="#0073AA" points="26.758 96.12 31.287 96.12 31.287 94.62 26.758 94.62"></polygon>
201
+ <polygon id="Fill-519" fill="#0073AA" points="26.758 98.803 31.287 98.803 31.287 97.303 26.758 97.303"></polygon>
202
+ <path d="M24.061,105.007 L33.771,105.007 L33.771,101.861 C33.771,101.674 33.618,101.522 33.432,101.522 L24.399,101.522 C24.213,101.522 24.061,101.674 24.061,101.861 L24.061,105.007 Z M35.271,106.507 L22.561,106.507 L22.561,101.861 C22.561,100.847 23.386,100.022 24.399,100.022 L33.432,100.022 C34.445,100.022 35.271,100.847 35.271,101.861 L35.271,106.507 L35.271,106.507 Z" id="Fill-521" fill="#0073AA"></path>
203
+ <polygon id="Fill-522" fill="#FFFFFF" points="25.909 104.025 31.923 104.025 31.923 101.625 25.909 101.625"></polygon>
204
+ <polygon id="Fill-523" fill="#0073AA" points="27.461 103.575 30.289 103.575 30.289 102.075 27.461 102.075"></polygon>
205
+ <polygon id="Fill-524" fill="#0073AA" points="21.198 106.507 36.418 106.507 36.418 105.007 21.198 105.007"></polygon>
206
+ <polygon id="Fill-525" fill="#0073AA" points="0.294 106.426 3.033 106.426 3.033 104.926 0.294 104.926"></polygon>
207
+ <polygon id="Fill-526" fill="#0073AA" points="170.241 106.426 176.29 106.426 176.29 104.926 170.241 104.926"></polygon>
208
+ <polygon id="Fill-527" fill="#0073AA" points="4.856 106.426 168.679 106.426 168.679 104.926 4.856 104.926"></polygon>
209
+ <path d="M80.646,41.035 C80.646,45.432 77.082,48.996 72.685,48.996 C68.288,48.996 64.723,45.432 64.723,41.035 C64.723,36.638 68.288,33.073 72.685,33.073 C77.082,33.073 80.646,36.638 80.646,41.035" id="Fill-528" fill="#E7F7FF"></path>
210
+
211
+ <g class="spinning">
212
+ <path d="M72.685,33.823 C68.708,33.823 65.473,37.058 65.473,41.035 C65.473,45.011 68.708,48.246 72.685,48.246 C76.661,48.246 79.896,45.011 79.896,41.035 C79.896,37.058 76.661,33.823 72.685,33.823 Z M72.685,49.746 C67.881,49.746 63.973,45.838 63.973,41.035 C63.973,36.231 67.881,32.323 72.685,32.323 C77.488,32.323 81.396,36.231 81.396,41.035 C81.396,45.838 77.488,49.746 72.685,49.746 L72.685,49.746 Z" id="Fill-529" fill="#0073AA"></path>
213
+ <polygon id="Fill-530" fill="#0073AA" points="71.935 31.075 73.435 31.075 73.435 27.179 71.935 27.179"></polygon>
214
+ <polyline id="Fill-531" fill="#0073AA" points="78.357 32.814 77.063 32.057 78.045 30.375 79.34 31.132 78.357 32.814"></polyline>
215
+ <polyline id="Fill-532" fill="#0073AA" points="81.73 36.799 80.994 35.493 84.388 33.581 85.124 34.887 81.73 36.799"></polyline>
216
+ <polyline id="Fill-533" fill="#0073AA" points="84.567 42.003 82.619 41.942 82.666 40.443 84.614 40.504 84.567 42.003"></polyline>
217
+ <polyline id="Fill-534" fill="#0073AA" points="84.146 48.855 80.815 46.837 81.592 45.554 84.924 47.572 84.146 48.855"></polyline>
218
+ <polyline id="Fill-535" fill="#0073AA" points="77.517 51.807 76.751 50.094 78.12 49.482 78.886 51.194 77.517 51.807"></polyline>
219
+ <polyline id="Fill-536" fill="#0073AA" points="72.996 54.907 71.496 54.859 71.62 50.965 73.12 51.013 72.996 54.907"></polyline>
220
+ <polyline id="Fill-537" fill="#0073AA" points="66.99 51.519 65.719 50.722 66.754 49.072 68.025 49.869 66.99 51.519"></polyline>
221
+ <polyline id="Fill-538" fill="#0073AA" points="60.752 48.115 60.057 46.786 63.509 44.982 64.204 46.311 60.752 48.115"></polyline>
222
+ <polygon id="Fill-539" fill="#0073AA" points="60.79 41.313 62.736 41.313 62.736 39.813 60.79 39.813"></polygon>
223
+ <polyline id="Fill-540" fill="#0073AA" points="63.926 36.236 60.658 34.113 61.475 32.855 64.742 34.978 63.926 36.236"></polyline>
224
+ <polyline id="Fill-541" fill="#0073AA" points="67.543 32.472 66.72 30.835 68.06 30.161 68.883 31.798 67.543 32.472"></polyline>
225
+ <path d="M156.536,105.296 L157.412,100.276 C157.587,99.271 156.814,98.351 155.794,98.351 L138.854,98.351 C137.834,98.351 137.061,99.271 137.236,100.276 L138.112,105.296 L156.536,105.296" id="Fill-542" fill="#FFFFFF"></path>
226
+
227
+ </g>
228
+
229
+ <path d="M157.274,105.425 L155.796,105.167 L156.694,100.023 C156.735,99.79 156.674,99.563 156.523,99.382 C156.37,99.201 156.156,99.102 155.92,99.102 L138.729,99.102 C138.492,99.102 138.278,99.201 138.126,99.382 C137.975,99.563 137.913,99.79 137.954,100.023 L138.852,105.167 L137.373,105.425 L136.476,100.281 C136.359,99.614 136.543,98.935 136.979,98.417 C137.413,97.898 138.052,97.602 138.729,97.602 L155.92,97.602 C156.597,97.602 157.234,97.898 157.67,98.417 C158.105,98.935 158.289,99.614 158.173,100.281 L157.274,105.425" id="Fill-543" fill="#0073AA"></path>
230
+ <polygon id="Fill-544" fill="#0073AA" points="146.314 98.834 148.06 98.834 148.06 93.06 146.314 93.06"></polygon>
231
+ <path d="M157.033,86.407 C157.033,86.407 157.34,90.568 154.964,92.945 C152.587,95.321 148.426,95.014 148.426,95.014 C148.426,95.014 148.118,90.852 150.495,88.475 C152.871,86.099 157.033,86.407 157.033,86.407" id="Fill-550" fill="#E7F7FF"></path>
232
+ <path d="M156.292,87.148 C155.09,87.181 152.584,87.446 151.024,89.006 C149.467,90.564 149.2,93.069 149.168,94.272 C150.37,94.239 152.875,93.973 154.434,92.414 C155.999,90.849 156.262,88.349 156.292,87.148 Z M148.918,95.778 C148.604,95.778 148.406,95.764 148.37,95.762 L147.726,95.714 L147.678,95.069 C147.664,94.885 147.375,90.536 149.964,87.945 C152.555,85.355 156.905,85.646 157.088,85.659 L157.732,85.707 L157.78,86.351 C157.794,86.535 158.084,90.885 155.494,93.475 C153.414,95.555 150.198,95.778 148.918,95.778 L148.918,95.778 Z" id="Fill-551" fill="#0073AA"></path>
233
+ <path d="M146.488,95.014 C146.488,95.014 146.796,90.852 144.419,88.475 C142.042,86.099 137.881,86.407 137.881,86.407 C137.881,86.407 137.573,90.568 139.95,92.945 C142.327,95.321 146.488,95.014 146.488,95.014" id="Fill-552" fill="#E7F7FF"></path>
234
+ <path d="M138.623,87.147 C138.655,88.349 138.921,90.855 140.48,92.414 C142.039,93.973 144.544,94.239 145.746,94.272 C145.714,93.069 145.447,90.564 143.889,89.006 C142.323,87.44 139.823,87.177 138.623,87.147 Z M145.996,95.778 C144.716,95.778 141.5,95.555 139.42,93.475 C136.83,90.885 137.119,86.535 137.133,86.352 L137.181,85.707 L137.825,85.659 C138.009,85.646 142.359,85.354 144.949,87.945 C147.539,90.535 147.25,94.885 147.236,95.069 L147.189,95.714 L146.544,95.762 C146.508,95.764 146.31,95.778 145.996,95.778 L145.996,95.778 Z" id="Fill-553" fill="#0073AA"></path>
235
+ </g>
236
+ </symbol>
237
+
238
+
239
+ <symbol id="icon-plugins" width="179px" height="95px" viewBox="0 0 179 95" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
240
+ <!-- Generator: Sketch 44.1 (41455) - http://www.bohemiancoding.com/sketch -->
241
+ <desc>Created with Sketch.</desc>
242
+ <defs></defs>
243
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
244
+ <path d="M156.632,94.094 L156.632,20.501 C156.632,18.283 155.034,16.485 153.064,16.485 L100.33,16.485 C98.36,16.485 96.762,18.283 96.762,20.501 L96.762,94.094 L156.632,94.094" id="Fill-183" fill="#FFFFFF"></path>
245
+ <path d="M96.762,19.486 C96.762,17.828 98.105,16.485 99.763,16.485 L153.631,16.485 C155.288,16.485 156.632,17.828 156.632,19.486 L156.632,25.734 L96.762,25.734 L96.762,19.486 Z" id="Fill-184" fill="#FFFFFF"></path>
246
+ <polygon id="Fill-185" fill="#0073AA" points="97.073 26.647 156.632 26.647 156.632 25.147 97.073 25.147"></polygon>
247
+ <polygon id="Fill-186" fill="#0073AA" points="103.638 22.368 105.036 22.368 105.036 20.868 103.638 20.868"></polygon>
248
+ <polygon id="Fill-187" fill="#0073AA" points="107.687 22.368 109.086 22.368 109.086 20.868 107.687 20.868"></polygon>
249
+ <polygon id="Fill-188" fill="#0073AA" points="111.738 22.368 113.136 22.368 113.136 20.868 111.738 20.868"></polygon>
250
+ <polygon id="Fill-189" fill="#E7F7FF" points="104.782 50.091 148.611 50.091 148.611 32.803 104.782 32.803"></polygon>
251
+ <polygon id="Fill-190" fill="#9CC9E1" points="104.787 78.355 118.113 78.355 118.113 61.068 104.787 61.068"></polygon>
252
+ <polygon id="Fill-191" fill="#D1E8F0" points="120.038 78.355 133.364 78.355 133.364 61.068 120.038 61.068"></polygon>
253
+ <path d="M157.382,48.843 L155.882,48.843 L155.882,20.501 C155.882,18.7 154.618,17.235 153.064,17.235 L100.33,17.235 C98.776,17.235 97.512,18.7 97.512,20.501 L97.512,34.594 L96.012,34.594 L96.012,20.501 C96.012,17.873 97.949,15.735 100.33,15.735 L153.064,15.735 C155.445,15.735 157.382,17.873 157.382,20.501 L157.382,48.843" id="Fill-194" fill="#0073AA"></path>
254
+ <polygon id="Fill-195" fill="#0073AA" points="155.882 94.094 157.382 94.094 157.382 68.271 155.882 68.271"></polygon>
255
+ <path d="M81.917,3.637 L77.643,3.637 C77.229,3.637 76.893,3.301 76.893,2.887 C76.893,2.473 77.229,2.137 77.643,2.137 L81.917,2.137 C82.331,2.137 82.667,2.473 82.667,2.887 C82.667,3.301 82.331,3.637 81.917,3.637" id="Fill-196" fill="#0073AA"></path>
256
+ <path d="M79.78,5.774 C79.366,5.774 79.03,5.439 79.03,5.024 L79.03,0.75 C79.03,0.336 79.366,0 79.78,0 C80.194,0 80.53,0.336 80.53,0.75 L80.53,5.024 C80.53,5.439 80.194,5.774 79.78,5.774" id="Fill-197" fill="#0073AA"></path>
257
+ <path d="M8.165,57.95 L3.891,57.95 C3.477,57.95 3.141,57.614 3.141,57.2 C3.141,56.786 3.477,56.45 3.891,56.45 L8.165,56.45 C8.579,56.45 8.915,56.786 8.915,57.2 C8.915,57.614 8.579,57.95 8.165,57.95" id="Fill-198" fill="#0073AA"></path>
258
+ <path d="M6.028,60.087 C5.614,60.087 5.278,59.751 5.278,59.337 L5.278,55.063 C5.278,54.648 5.614,54.313 6.028,54.313 C6.442,54.313 6.778,54.648 6.778,55.063 L6.778,59.337 C6.778,59.751 6.442,60.087 6.028,60.087" id="Fill-199" fill="#0073AA"></path>
259
+ <path d="M167.204,14.301 C167.013,14.301 166.821,14.228 166.674,14.081 C166.381,13.788 166.381,13.314 166.674,13.021 L169.696,9.999 C169.989,9.706 170.464,9.706 170.757,9.999 C171.05,10.292 171.05,10.767 170.757,11.06 L167.735,14.081 C167.588,14.228 167.396,14.301 167.204,14.301" id="Fill-200" fill="#0073AA"></path>
260
+ <path d="M170.226,14.301 C170.035,14.301 169.843,14.228 169.696,14.081 L166.674,11.06 C166.381,10.767 166.381,10.292 166.674,9.999 C166.967,9.706 167.442,9.706 167.735,9.999 L170.757,13.021 C171.05,13.314 171.05,13.788 170.757,14.081 C170.61,14.228 170.418,14.301 170.226,14.301" id="Fill-201" fill="#0073AA"></path>
261
+ <polygon id="Fill-204" fill="#0073AA" points="21.566 3.637 72.286 3.637 72.286 2.137 21.566 2.137"></polygon>
262
+ <polygon id="Fill-206" fill="#0073AA" points="0 40.018 25.157 40.018 25.157 38.518 0 38.518"></polygon>
263
+ <path d="M8.698,32.416 C8.698,33.16 8.095,33.763 7.351,33.763 C6.608,33.763 6.005,33.16 6.005,32.416 C6.005,31.672 6.608,31.069 7.351,31.069 C8.095,31.069 8.698,31.672 8.698,32.416" id="Fill-210" fill="#0073AA"></path>
264
+ <path d="M117.815,2.887 C117.815,3.631 117.212,4.234 116.468,4.234 C115.725,4.234 115.122,3.631 115.122,2.887 C115.122,2.143 115.725,1.54 116.468,1.54 C117.212,1.54 117.815,2.143 117.815,2.887" id="Fill-211" fill="#0073AA"></path>
265
+ <path d="M172.52,56.45 C172.52,57.194 171.917,57.797 171.173,57.797 C170.43,57.797 169.827,57.194 169.827,56.45 C169.827,55.707 170.43,55.104 171.173,55.104 C171.917,55.104 172.52,55.707 172.52,56.45" id="Fill-212" fill="#0073AA"></path>
266
+ <path d="M38.479,94.094 L34.696,94.094 C34.411,94.094 34.18,93.863 34.18,93.578 L34.18,39.087 L34.227,38.871 L36.119,34.773 C36.303,34.373 36.872,34.373 37.056,34.773 L38.947,38.871 L38.995,39.087 L38.995,93.578 C38.995,93.863 38.764,94.094 38.479,94.094" id="Fill-214" fill="#FFFFFF"></path>
267
+ <polygon id="Fill-215" fill="#ADDDF8" points="34.18 88.878 38.995 88.878 38.995 40.826 33.4855957 40.826"></polygon>
268
+ <path d="M38.245,94.094 L38.245,39.139 L36.588,35.548 L34.93,39.139 L34.93,58.3605957 L33.43,58.3605957 L33.43,38.809 L35.627,34.048 C35.802,33.669 36.17,33.434 36.588,33.434 C37.005,33.434 37.373,33.669 37.548,34.048 L39.745,38.809 L39.745,94.094 L38.245,94.094 Z" id="Fill-216" fill="#0073AA"></path>
269
+ <polygon id="Fill-217" fill="#0073AA" points="33.43 93.919 34.93 93.919 34.93 74.236 33.43 74.236"></polygon>
270
+ <polygon id="Fill-218" fill="#0073AA" points="34.014 41.575 38.995 41.575 38.995 40.075 34.014 40.075"></polygon>
271
+ <path d="M47.926,94.182 L47.926,22 L42.8954316,22 C42.5364316,22 42.2454316,22.325 42.2454316,22.728 L42.2454316,93.454 C42.2454316,93.856 42.5364316,94.182 42.8954316,94.182 L47.926,94.182 Z" id="Fill-220" fill="#E7F7FF"></path>
272
+ <path d="M43.451,93.302 L41.951,93.302 L41.951,22.703 C41.951,21.853 42.643,21.161 43.493,21.161 L53.255,21.161 C54.105,21.161 54.797,21.853 54.797,22.703 L54.797,34.302 L53.297,34.302 L53.297,22.703 L43.493,22.661 L43.451,93.302" id="Fill-221" fill="#0073AA"></path>
273
+ <polygon id="Fill-223" fill="#0073AA" points="42.701 81.363 47.926 81.363 47.926 79.863 42.701 79.863"></polygon>
274
+ <polygon id="Fill-224" fill="#0073AA" points="42.701 73.772 47.926 73.772 47.926 72.272 42.701 72.272"></polygon>
275
+ <polygon id="Fill-225" fill="#0073AA" points="42.701 66.182 47.926 66.182 47.926 64.682 42.701 64.682"></polygon>
276
+ <polygon id="Fill-226" fill="#0073AA" points="42.701 58.591 47.926 58.591 47.926 57.091 42.701 57.091"></polygon>
277
+ <polygon id="Fill-227" fill="#0073AA" points="42.701 51.001 47.926 51.001 47.926 49.501 42.701 49.501"></polygon>
278
+ <polygon id="Fill-228" fill="#0073AA" points="42.701 43.41 47.926 43.41 47.926 41.91 42.701 41.91"></polygon>
279
+ <polygon id="Fill-229" fill="#0073AA" points="42.701 35.819 47.926 35.819 47.926 34.319 42.701 34.319"></polygon>
280
+ <polygon id="Fill-230" fill="#0073AA" points="42.701 28.34 47.926 28.34 47.926 26.84 42.701 26.84"></polygon>
281
+ <path d="M123.044,91.052 L48.836,91.052 C48.286,91.052 47.836,90.602 47.836,90.052 L47.836,37.275 C47.836,36.725 48.286,36.275 48.836,36.275 L123.044,36.275 C123.594,36.275 124.044,36.725 124.044,37.275 L124.044,90.052 C124.044,90.602 123.594,91.052 123.044,91.052" id="Fill-231" fill="#8AC4E6"></path>
282
+ <polygon id="Fill-232" fill="#0073AA" points="102.77 37.025 108.033 37.025 108.033 35.525 102.77 35.525"></polygon>
283
+ <path d="M122.151,91.803 L49.73,91.803 C48.272,91.803 47.086,90.617 47.086,89.159 L47.086,38.169 C47.086,36.711 48.272,35.525 49.73,35.525 L101.397,35.525 L101.397,37.025 L49.73,37.025 C49.099,37.025 48.586,37.538 48.586,38.169 L48.586,89.159 C48.586,89.79 49.099,90.303 49.73,90.303 L122.151,90.303 C122.781,90.303 123.294,89.79 123.294,89.159 L124.794,89.159 C124.794,90.617 123.608,91.803 122.151,91.803" id="Fill-233" fill="#0073AA"></path>
284
+ <polygon id="Fill-234" fill="#0073AA" points="109.752 37.025 119.93 37.025 119.93 35.525 109.752 35.525"></polygon>
285
+ <polygon id="Fill-235" fill="#FFFFFF" points="51.537 85.036 119.93 85.036 119.93 40.585 51.537 40.585"></polygon>
286
+ <path d="M122.712,94.094 L48.328,94.094 C46.542,94.094 45.019,92.8 44.73,91.038 L44.2,87.806 L78.676,87.806 L79.995,89.7 L89.522,89.7 L90.948,87.806 L127.267,87.806 L126.806,90.617 C126.477,92.622 124.744,94.094 122.712,94.094" id="Fill-236" fill="#FFFFFF"></path>
287
+ <path d="M45.083,88.557 L45.47,90.917 C45.701,92.323 46.903,93.344 48.328,93.344 L122.712,93.344 C124.385,93.344 125.795,92.147 126.065,90.496 L126.384,88.557 L91.322,88.557 L89.895,90.45 L79.604,90.45 L78.285,88.557 L45.083,88.557 M122.712,94.844 L48.328,94.844 C46.164,94.844 44.34,93.294 43.99,91.159 L43.317,87.057 L79.068,87.057 L80.387,88.95 L89.147,88.95 L90.574,87.057 L128.149,87.057 L127.546,90.738 C127.156,93.117 125.123,94.844 122.712,94.844" id="Fill-237" fill="#0073AA"></path>
288
+ <polyline id="Fill-239" fill="#B4D7E7" points="128.149 87.057 124.044 87.057 124.044 78.355 124.044 87.056 128.149 87.056 128.149 87.057"></polyline>
289
+ <polyline id="Fill-241" fill="#0073AA" points="119.93 37.025 119.627 37.025 119.144 35.525 119.93 35.525 119.93 37.025"></polyline>
290
+ <polygon id="Fill-242" fill="#B4D7E7" points="119.821 85.036 119.93 85.036 119.93 45.915 119.821 45.915"></polygon>
291
+ <path d="M125.308,94.094 L119.821,94.094 L119.821,93.344 L122.712,93.344 C124.385,93.344 125.795,92.147 126.065,90.496 L126.384,88.557 L119.821,88.557 L119.821,87.057 L128.149,87.057 L127.546,90.738 C127.31,92.177 126.467,93.37 125.308,94.094" id="Fill-243" fill="#0073AA"></path>
292
+ <path d="M128.529,47.577 L128.569,47.583 L131.29,47.591 L135.421,35.076 L129.776,25.121 L128.894,25.121 L128.811,34.648 C129.013,34.738 129.735,35.046 129.899,35.209 C130.612,35.919 130.614,37.073 129.905,37.785 C129.196,38.496 128.041,38.499 127.329,37.788 C126.616,37.079 126.615,35.925 127.324,35.213 C127.478,35.06 128.022,34.709 128.208,34.623 L128.428,25.121 L127.56,25.121 L121.77,35.023 L125.808,47.568 L128.529,47.577" id="Fill-244" fill="#FFFFFF"></path>
293
+ <path d="M128.484,35.324 C128.323,35.411 127.943,35.66 127.848,35.749 C127.653,35.944 127.542,36.214 127.543,36.5 C127.543,36.786 127.655,37.055 127.857,37.257 C128.06,37.459 128.329,37.57 128.615,37.57 L128.617,37.57 C128.903,37.569 129.172,37.458 129.373,37.256 C129.789,36.837 129.788,36.157 129.369,35.74 C129.348,35.729 129.171,35.624 128.564,35.358 L128.484,35.324 Z M128.625,46.833 L130.748,46.84 L134.605,35.157 L129.633,26.388 L129.566,34.165 C130.047,34.39 130.282,34.532 130.428,34.677 C131.432,35.678 131.436,37.309 130.436,38.314 C129.951,38.801 129.306,39.068 128.619,39.07 L128.615,39.07 C127.929,39.07 127.285,38.804 126.799,38.319 C126.313,37.835 126.044,37.19 126.043,36.503 C126.042,35.816 126.308,35.17 126.792,34.684 C126.936,34.541 127.217,34.345 127.468,34.186 L127.647,26.458 L122.587,35.111 L126.354,46.82 L128.625,46.833 Z M131.831,48.344 L125.261,48.316 L120.954,34.934 L127.13,24.371 L130.213,24.371 L136.238,34.995 L131.831,48.344 L131.831,48.344 Z" id="Fill-245" fill="#0073AA"></path>
294
+ <polygon id="Fill-246" fill="#E7F7FF" points="122.571 94.094 134.621 94.094 134.621 46.665 122.571 46.665"></polygon>
295
+ <polygon id="Fill-247" fill="#8AC4E6" points="128.596 94.094 134.467 94.094 134.467 46.665 128.596 46.665"></polygon>
296
+ <polygon id="Fill-248" fill="#0073AA" points="127.846 34.623 129.346 34.623 129.346 25.121 127.846 25.121"></polygon>
297
+ <path d="M128.596,35.222 C127.836,35.222 127.219,35.84 127.219,36.599 C127.219,37.358 127.836,37.976 128.596,37.976 C129.355,37.976 129.972,37.358 129.972,36.599 C129.972,35.84 129.355,35.222 128.596,35.222 Z M128.596,39.476 C127.009,39.476 125.719,38.185 125.719,36.599 C125.719,35.013 127.009,33.722 128.596,33.722 C130.182,33.722 131.472,35.013 131.472,36.599 C131.472,38.185 130.182,39.476 128.596,39.476 L128.596,39.476 Z" id="Fill-249" fill="#0073AA"></path>
298
+ <polygon id="Fill-250" fill="#0073AA" points="133.87 94.094 135.37 94.094 135.37 79.333 133.87 79.333"></polygon>
299
+ <polyline id="Fill-251" fill="#0073AA" points="123.321 94.094 121.821 94.094 121.821 45.915 135.37 45.915 135.37 49.952 133.87 49.952 133.87 47.415 123.321 47.415 123.321 94.094"></polyline>
300
+ <path d="M147.043,49.952 L150.585,49.952 L161.415,52.531 C162.41,52.768 163.112,53.657 163.112,54.679 L163.112,55.356 L147.043,55.356 L147.043,49.952" id="Fill-252" fill="#E7F7FF"></path>
301
+ <path d="M147.043,67.248 L150.585,67.248 L161.415,64.668 C162.41,64.432 163.112,63.543 163.112,62.521 L163.112,61.843 L147.043,61.843 L147.043,67.248" id="Fill-253" fill="#E7F7FF"></path>
302
+ <path d="M147.793,54.607 L162.36,54.607 C162.328,53.96 161.877,53.412 161.241,53.261 L150.497,50.702 L147.793,50.702 L147.793,54.607 Z M163.862,56.107 L146.293,56.107 L146.293,49.202 L150.759,49.223 L161.589,51.802 C162.927,52.121 163.862,53.304 163.862,54.679 L163.862,56.107 L163.862,56.107 Z" id="Fill-254" fill="#0073AA"></path>
303
+ <path d="M147.793,66.498 L150.497,66.498 L161.242,63.939 C161.878,63.787 162.328,63.239 162.36,62.593 L147.793,62.593 L147.793,66.498 Z M150.673,67.998 L146.293,67.998 L146.293,61.093 L163.862,61.093 L163.862,62.521 C163.862,63.897 162.927,65.079 161.589,65.397 L150.673,67.998 L150.673,67.998 Z" id="Fill-255" fill="#0073AA"></path>
304
+ <path d="M138.74,60.795 L136.212,60.795 L128.485,62.636 C127.776,62.805 127.275,63.439 127.275,64.168 L127.275,64.651 L138.74,64.651 L138.74,60.795" id="Fill-256" fill="#ADDDF8"></path>
305
+ <path d="M138.74,55.514 L136.212,55.514 L128.485,53.674 C127.776,53.505 127.275,52.871 127.275,52.141 L127.275,51.658 L138.74,51.658 L138.74,55.514" id="Fill-257" fill="#ADDDF8"></path>
306
+ <path d="M128.069,63.901 L137.99,63.901 L137.99,61.545 L136.3,61.545 L128.659,63.365 C128.376,63.433 128.158,63.639 128.069,63.901 Z M139.49,65.401 L126.525,65.401 L126.525,64.168 C126.525,63.087 127.26,62.156 128.311,61.906 L136.212,60.045 L139.49,60.045 L139.49,65.401 L139.49,65.401 Z" id="Fill-258" fill="#0073AA"></path>
307
+ <path d="M136.3,54.764 L137.99,54.764 L137.99,52.408 L128.069,52.408 C128.158,52.671 128.376,52.877 128.659,52.944 L136.3,54.764 Z M139.49,56.264 L136.038,56.243 L128.311,54.403 C127.26,54.153 126.525,53.223 126.525,52.142 L126.525,50.908 L139.49,50.908 L139.49,56.264 L139.49,56.264 Z" id="Fill-259" fill="#0073AA"></path>
308
+ <polygon id="Fill-260" fill="#FFFFFF" points="138.188 94.094 147.043 94.094 147.043 49.952 138.188 49.952"></polygon>
309
+ <polyline id="Fill-261" fill="#0073AA" points="147.793 94.094 146.293 94.094 146.293 50.702 138.938 50.702 138.938 94.094 137.438 94.094 137.438 49.202 147.793 49.202 147.793 94.094"></polyline>
310
+ <polygon id="Fill-262" fill="#0073AA" points="138.188 55.509 142.201 55.509 142.201 54.009 138.188 54.009"></polygon>
311
+ <polygon id="Fill-263" fill="#0073AA" points="138.188 59.226 142.201 59.226 142.201 57.726 138.188 57.726"></polygon>
312
+ <polygon id="Fill-264" fill="#0073AA" points="138.188 62.941 142.201 62.941 142.201 61.441 138.188 61.441"></polygon>
313
+ <polygon id="Fill-265" fill="#0073AA" points="138.188 85.237 142.201 85.237 142.201 83.737 138.188 83.737"></polygon>
314
+ <polygon id="Fill-266" fill="#0073AA" points="138.188 88.953 142.201 88.953 142.201 87.453 138.188 87.453"></polygon>
315
+ <polygon id="Fill-267" fill="#0073AA" points="138.188 92.669 142.201 92.669 142.201 91.169 138.188 91.169"></polygon>
316
+ <polygon id="Fill-268" fill="#8AC4E6" points="136.16 82.149 147.558 82.149 147.558 67.346 136.16 67.346"></polygon>
317
+ <path d="M136.91,81.398 L146.808,81.398 L146.808,68.096 L136.91,68.096 L136.91,81.398 Z M135.41,82.898 L148.308,82.898 L148.308,66.596 L135.41,66.596 L135.41,82.898 Z" id="Fill-269" fill="#0073AA"></path>
318
+ <polygon id="Fill-270" fill="#D1E8F0" points="132.496 77.619 135.003 77.619 135.003 71.657 132.496 71.657"></polygon>
319
+ <path d="M133.246,76.869 L134.253,76.869 L134.253,72.406 L133.246,72.406 L133.246,76.869 Z M131.746,78.369 L135.753,78.369 L135.753,70.906 L131.746,70.906 L131.746,78.369 Z" id="Fill-271" fill="#0073AA"></path>
320
+ <path d="M160.608,57.2 C159.905,57.2 159.333,57.772 159.333,58.476 C159.333,59.179 159.905,59.75 160.608,59.75 C161.311,59.75 161.883,59.179 161.883,58.476 C161.883,57.772 161.311,57.2 160.608,57.2 Z M160.608,61.25 C159.077,61.25 157.833,60.006 157.833,58.476 C157.833,56.945 159.077,55.7 160.608,55.7 C162.138,55.7 163.383,56.945 163.383,58.476 C163.383,60.006 162.138,61.25 160.608,61.25 L160.608,61.25 Z" id="Fill-272" fill="#0073AA"></path>
321
+ <path d="M25.87,94.094 L24.269,94.094 C23.719,94.094 23.269,93.644 23.269,93.094 L23.269,89.579 C23.269,89.029 23.719,88.579 24.269,88.579 L25.87,88.579 C26.42,88.579 26.87,89.029 26.87,89.579 L26.87,93.094 C26.87,93.644 26.42,94.094 25.87,94.094" id="Fill-273" fill="#62A6CF"></path>
322
+ <path d="M24.269,89.329 C24.133,89.329 24.019,89.443 24.019,89.579 L24.019,93.094 C24.019,93.229 24.133,93.344 24.269,93.344 L25.87,93.344 C26.006,93.344 26.12,93.229 26.12,93.094 L26.12,89.579 C26.12,89.443 26.006,89.329 25.87,89.329 L24.269,89.329 Z M25.87,94.844 L24.269,94.844 C23.304,94.844 22.519,94.059 22.519,93.094 L22.519,89.579 C22.519,88.614 23.304,87.829 24.269,87.829 L25.87,87.829 C26.835,87.829 27.62,88.614 27.62,89.579 L27.62,93.094 C27.62,94.059 26.835,94.844 25.87,94.844 L25.87,94.844 Z" id="Fill-274" fill="#0073AA"></path>
323
+ <path d="M37.189,66.18 C37.189,59.535 31.802,54.147 25.157,54.147 C18.511,54.147 13.125,59.535 13.125,66.18 C13.125,70.638 15.556,74.522 19.159,76.6 L19.159,88.464 L20.865,91.696 L29.13,91.696 L31.154,88.464 L31.154,76.6 C34.758,74.522 37.189,70.638 37.189,66.18" id="Fill-275" fill="#FFFFFF"></path>
324
+ <polyline id="Fill-276" fill="#ADDDF8" points="19.159 79.913 19.159 89.173 20.865 91.696 29.13 91.696 31.154 89.173 31.154 79.913 19.159 79.913"></polyline>
325
+ <polyline id="Fill-277" fill="#62A6CF" points="31.154 88.464 29.13 91.696 20.865 91.696 19.159 88.464 31.154 88.464"></polyline>
326
+ <path d="M29.546,92.446 L20.412,92.446 L18.41,88.649 L18.41,77.025 C14.676,74.697 12.375,70.581 12.375,66.18 C12.375,63.169 13.442,60.245 15.379,57.946 L16.526,58.913 C14.816,60.941 13.875,63.522 13.875,66.18 C13.875,70.192 16.043,73.937 19.535,75.951 L19.91,76.167 L19.91,88.278 L21.317,90.946 L28.715,90.946 L30.404,88.248 L30.404,76.167 L30.779,75.951 C34.27,73.937 36.439,70.192 36.439,66.18 C36.439,59.959 31.378,54.897 25.157,54.897 C23.691,54.897 22.265,55.174 20.92,55.72 L20.356,54.329 C21.882,53.711 23.497,53.397 25.157,53.397 C32.205,53.397 37.939,59.132 37.939,66.18 C37.939,70.581 35.638,74.697 31.904,77.025 L31.904,88.68 L29.546,92.446" id="Fill-278" fill="#0073AA"></path>
327
+ <path d="M17.682,57.728 L16.617,56.673 C17.379,55.902 17.772,55.677 18.556,55.228 L18.784,55.098 L19.533,56.397 L19.301,56.53 C18.554,56.958 18.302,57.103 17.682,57.728" id="Fill-279" fill="#0073AA"></path>
328
+ <polygon id="Fill-280" fill="#0073AA" points="17.35 81.029 32.964 81.029 32.964 79.529 17.35 79.529"></polygon>
329
+ <polygon id="Fill-281" fill="#0073AA" points="17.35 83.758 32.964 83.758 32.964 82.258 17.35 82.258"></polygon>
330
+ <polygon id="Fill-282" fill="#0073AA" points="17.35 86.485 32.964 86.485 32.964 84.985 17.35 84.985"></polygon>
331
+ <polygon id="Fill-283" fill="#0073AA" points="17.35 89.214 32.964 89.214 32.964 87.714 17.35 87.714"></polygon>
332
+ <path d="M31.488,66.188 C31.488,69.684 28.653,72.519 25.157,72.519 C21.66,72.519 18.826,69.684 18.826,66.188 C18.826,62.691 21.66,59.856 25.157,59.856 C28.653,59.856 31.488,62.691 31.488,66.188" id="Fill-284" fill="#E7F7FF"></path>
333
+ <polygon id="Fill-320" fill="#0073AA" points="7.351 94.844 171.173 94.844 171.173 93.344 7.351 93.344"></polygon>
334
+ <polygon id="Fill-321" fill="#0073AA" points="2.789 94.844 5.528 94.844 5.528 93.344 2.789 93.344"></polygon>
335
+ <polygon id="Fill-322" fill="#0073AA" points="172.736 94.844 178.785 94.844 178.785 93.344 172.736 93.344"></polygon>
336
+ </g>
337
+ </symbol>
338
+
339
+
340
+ <symbol id="icon-license" width="168px" height="104px" viewBox="0 0 168 104" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
341
+ <defs></defs>
342
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
343
+ <path d="M159.557,102.076 L159.557,23.847 C159.557,21.722 157.834,20 155.71,20 L98.847,20 C96.722,20 95,21.722 95,23.847 L95,102.077 L159.557,102.076" id="Fill-16" fill="#ADDDF8"></path>
344
+ <path d="M153.735,103.076 L153.735,24.847 C153.735,22.722 152.274,21 150.473,21 L102.262,21 C100.46,21 99,22.722 99,24.847 L99,103.077 L153.735,103.076" id="Fill-17" fill="#FFFFFF"></path>
345
+ <path d="M95,29.973 L95,23.235 C95,21.448 96.448,20 98.235,20 L156.322,20 C158.108,20 159.557,21.448 159.557,23.235 L159.557,29.973 L95,29.973" id="Fill-18" fill="#ADDDF8"></path>
346
+ <path d="M95.5,33.4394531 L94,33.4394531 L94,22.986 C94,20.788 95.787,19 97.985,19 L106.557,19 L106.557,20.5 L97.985,20.5 C96.614,20.5 95.5,21.615 95.5,22.986 L95.5,30.986 L95.5,33.4394531 Z" id="Fill-19" fill="#0073AA"></path>
347
+ <path d="M160.284,102.85612 L158.784,101.859 L158.784,22.986 C158.784,21.615 157.669,20.5 156.299,20.5 L118,20.5 L118,19 L156.299,19 C158.496,19 160.284,20.788 160.284,22.986 L160.284,101.859 L160.284,102.85612 Z" id="Fill-20" fill="#0073AA"></path>
348
+ <polygon id="Fill-21" fill="#0073AA" points="110 20.5 114.435 20.5 114.435 19 110 19"></polygon>
349
+ <polygon id="Fill-22" fill="#0073AA" points="95 30.5 159.557 30.5 159.557 29 95 29"></polygon>
350
+ <polygon id="Fill-23" fill="#0073AA" points="102 25.5 103.502 25.5 103.502 24 102 24"></polygon>
351
+ <polygon id="Fill-24" fill="#0073AA" points="107 25.5 108.503 25.5 108.503 24 107 24"></polygon>
352
+ <polygon id="Fill-25" fill="#0073AA" points="111 25.5 112.503 25.5 112.503 24 111 24"></polygon>
353
+ <polygon id="Fill-26" fill="#E7F7FF" points="103 55.642 150.26 55.642 150.26 37 103 37"></polygon>
354
+ <polygon id="Fill-27" fill="#D1E8F0" points="103 86.641 117.37 86.641 117.37 68 103 68"></polygon>
355
+ <polygon id="Fill-28" fill="#E7F7FF" points="120 79.641 134.782 79.641 134.782 61 120 61"></polygon>
356
+ <polygon id="Fill-29" fill="#E7F7FF" points="136 79.641 150.369 79.641 150.369 61 136 61"></polygon>
357
+ <polygon id="Fill-28-Copy" fill="#E7F7FF" points="102.48 103.641 134.782 103.641 134.782 84.999 102.48 84.999"></polygon>
358
+ <polygon id="Fill-29-Copy" fill="#E7F7FF" points="136 103.641 150.369 103.641 150.369 85 136 85"></polygon>
359
+ <path d="M167.024,7.5 L162.75,7.5 C162.335,7.5 162,7.164 162,6.75 C162,6.335 162.335,6 162.75,6 L167.024,6 C167.438,6 167.774,6.335 167.774,6.75 C167.774,7.164 167.438,7.5 167.024,7.5" id="Fill-30" fill="#0073AA"></path>
360
+ <path d="M164.75,9.774 C164.336,9.774 164,9.438 164,9.024 L164,4.75 C164,4.336 164.336,4 164.75,4 C165.164,4 165.5,4.336 165.5,4.75 L165.5,9.024 C165.5,9.438 165.164,9.774 164.75,9.774" id="Fill-31" fill="#0073AA"></path>
361
+ <path d="M38.024,3.5 L33.75,3.5 C33.336,3.5 33,3.164 33,2.75 C33,2.336 33.336,2 33.75,2 L38.024,2 C38.438,2 38.774,2.336 38.774,2.75 C38.774,3.164 38.438,3.5 38.024,3.5" id="Fill-32" fill="#0073AA"></path>
362
+ <path d="M35.75,5.774 C35.336,5.774 35,5.438 35,5.024 L35,0.75 C35,0.336 35.336,0 35.75,0 C36.164,0 36.5,0.336 36.5,0.75 L36.5,5.024 C36.5,5.438 36.164,5.774 35.75,5.774" id="Fill-33" fill="#0073AA"></path>
363
+ <polygon id="Fill-42" fill="#0073AA" points="51 3.5 68.395 3.5 68.395 2 51 2"></polygon>
364
+ <polygon id="Fill-43" fill="#0073AA" points="45 3.5 48.57 3.5 48.57 2 45 2"></polygon>
365
+ <path d="M10.553,75.276 C10.553,75.981 9.982,76.553 9.277,76.553 C8.572,76.553 8,75.981 8,75.276 C8,74.571 8.572,74 9.277,74 C9.982,74 10.553,74.571 10.553,75.276" id="Fill-44" fill="#0073AA"></path>
366
+ <path d="M81.83,19.915 C81.83,20.421 81.421,20.83 80.915,20.83 C80.41,20.83 80,20.421 80,19.915 C80,19.409 80.41,19 80.915,19 C81.421,19 81.83,19.409 81.83,19.915" id="Fill-45" fill="#0073AA"></path>
367
+ <path d="M20.444,7.222 C20.444,7.897 19.897,8.444 19.222,8.444 C18.547,8.444 18,7.897 18,7.222 C18,6.547 18.547,6 19.222,6 C19.897,6 20.444,6.547 20.444,7.222" id="Fill-48" fill="#0073AA"></path>
368
+ <path d="M166.444,43.222 C166.444,43.896 165.897,44.443 165.222,44.443 C164.547,44.443 164,43.896 164,43.222 C164,42.547 164.547,42 165.222,42 C165.897,42 166.444,42.547 166.444,43.222" id="Fill-49" fill="#0073AA"></path>
369
+ <polyline id="Fill-50" fill="#A6CFE4" points="100.512 102 95 102 100.512 102"></polyline>
370
+ <path d="M94.8495,88 L98.8495,88 L95.9598297,88 L95.9598297,102.09423 L99.023112,102.09423 L99.023112,103 L94.8495,103 L94.8495,88 Z M94.8495,32.75 L99.3995,32.75 L99.3995,32 L94.8495,32 L94.8495,32.75 Z" id="Fill-51" fill="#3378B0"></path>
371
+ <path d="M41,79.577 L41,34.024801 C41,32.9360152 41.884,32.053 42.974,32.053 L117.087891,32.053 C118.177891,32.053 120.988,34.9388835 120.988,36.0276693 L120.988,79.577 L41,79.577 Z" id="Fill-55" fill="#8AC4E6"></path>
372
+ <polygon id="Fill-56" fill="#0073AA" points="41 58.71 42.5 58.71 42.5 50 41 50"></polygon>
373
+ <path d="M121.774,89.5021973 L120.274,89.5021973 L120.274,36.617 C120.274,34.898 118.875,33.5 117.156,33.5 L58,33.5 L58,32 L117.156,32 C119.702,32 121.774,34.071 121.774,36.617 L121.774,89.5021973 L121.34668,85.7150879" id="Fill-57" fill="#0073AA"></path>
374
+ <polygon id="Fill-58" fill="#FFFFFF" points="46 83.024 117.396 83.024 117.396 37 46 37"></polygon>
375
+ <polygon id="Fill-59" fill="#E7F7FF" points="69 101.266 93.099 101.266 93.099 87 69 87"></polygon>
376
+ <polygon id="Fill-60" fill="#8AC4E6" points="69 93.133 93.099 93.133 93.099 86 69 86"></polygon>
377
+ <path d="M69.5,101.266 L92.099,101.266 L92.099,88.5 L69.5,88.5 L69.5,101.266 Z M68,102.766 L93.599,102.766 L93.599,87 L68,87 L68,102.766 Z" id="Fill-61" fill="#0073AA"></path>
378
+ <path d="M120.988,82.317 L41,82.317 L41,87.6012964 C41,88.2646852 41.896,88.802 43,88.802 L118.989,88.802 C120.093,88.802 120.988,88.2646852 120.988,87.6012964 L120.988,82.317" id="Fill-62" fill="#FFFFFF"></path>
379
+ <polygon id="Fill-63" fill="#0073AA" points="53 89.5 115.489 89.5 115.489 88 53 88"></polygon>
380
+ <polygon id="Fill-64" fill="#0073AA" points="51.5465 89.5 121.3405 89.5 121.3405 78.709 51.5465 78.709"></polygon>
381
+ <polygon id="Fill-66" fill="#FFFFFE" points="136 82.189 138.052 82.189 138.052 68.082 136 68.082"></polygon>
382
+ <path d="M137.746,101.42 L136.566,101.42 C135.149,101.42 134,100.271 134,98.854 L134,82 L140.312,82 L140.312,98.854 C140.312,100.271 139.163,101.42 137.746,101.42" id="Fill-67" fill="#FFFFFF"></path>
383
+ <path d="M134.5,83.5 L134.5,99.604 C134.5,100.606 135.315,101.421 136.316,101.421 L137.495,101.421 C138.497,101.421 139.312,100.606 139.312,99.605 L139.312,83.5 L134.5,83.5 Z M137.495,102.921 L136.316,102.921 C134.488,102.921 133,101.434 133,99.604 L133,82 L140.812,82 L140.812,99.605 C140.812,101.434 139.325,102.921 137.495,102.921 L137.495,102.921 Z" id="Fill-68" fill="#0073AA"></path>
384
+ <polygon id="Fill-69" fill="#0073AA" points="132 83.5 142.066 83.5 142.066 82 132 82"></polygon>
385
+ <polyline id="Fill-70" fill="#FFFFFF" points="138.504 64.191 135 64.191 135.416 58 138.107 58 138.504 64.191"></polyline>
386
+ <path d="M136.283,81.086 L136.835,81.086 L136.835,63.191 L137.506,63.191 L137.205,58.5 L135.919,58.5 L135.604,63.191 L136.283,63.191 L136.283,81.086 Z M138.335,82.586 L134.783,82.586 L134.783,64.691 L134,64.691 L134.517,57 L138.612,57 L139.106,64.691 L138.335,64.691 L138.335,82.586 L138.335,82.586 Z" id="Fill-71" fill="#0073AA"></path>
387
+ <path d="M158.556,66.414 C158.556,63.16 156.675,60.353 153.944,59 L153.944,66.158 L150.278,68.274 L146.612,66.158 L146.612,59 C143.881,60.353 142,63.16 142,66.414 C142,69.82 144.057,72.742 146.996,74.013 L147.043,98.072 C147.043,99.885 148.513,101.354 150.325,101.354 C152.138,101.354 153.607,99.885 153.607,98.072 L153.56,74.013 C156.499,72.742 158.556,69.82 158.556,66.414" id="Fill-72" fill="#FFFFFF"></path>
388
+ <path d="M145.612,60.532 C143.666,61.934 142.5,64.172 142.5,66.622 C142.5,69.626 144.283,72.339 147.044,73.533 L147.495,73.728 L147.543,98.279 C147.543,99.677 148.679,100.812 150.075,100.812 C151.472,100.812 152.608,99.677 152.608,98.281 L152.559,73.729 L153.012,73.533 C155.772,72.339 157.556,69.626 157.556,66.622 C157.556,64.171 156.389,61.933 154.444,60.532 L154.444,66.799 L150.028,69.349 L145.612,66.799 L145.612,60.532 Z M150.075,102.312 C147.852,102.312 146.043,100.504 146.043,98.281 L145.997,74.7 C142.945,73.177 141,70.058 141,66.622 C141,63.172 142.927,60.074 146.029,58.536 L147.112,58 L147.112,65.932 L150.028,67.616 L152.944,65.932 L152.944,58 L154.027,58.536 C157.129,60.073 159.056,63.171 159.056,66.622 C159.056,70.057 157.111,73.175 154.061,74.699 L154.108,98.279 C154.108,100.504 152.298,102.312 150.075,102.312 L150.075,102.312 Z" id="Fill-73" fill="#0073AA"></path>
389
+ <path d="M53,90 L54.154,90" id="Fill-74" fill="#A6CFE4"></path>
390
+ <polygon id="Fill-78" fill="#0073AA" points="53 89.5 54.154 89.5 54.154 88 53 88"></polygon>
391
+ <path d="M17,103.21 L50.716,103.21 L50.716,64.224 C50.716,62.995 49.72,62 48.492,62 L19.224,62 C17.995,62 17,62.995 17,64.224 L17,103.21" id="Fill-80" fill="#FFFFFF"></path>
392
+ <path d="M18.5,99.476 L17,99.476 L17,65.686 C17,63.654 18.653,62 20.685,62 L24.907,62 L24.907,63.5 L20.685,63.5 C19.48,63.5 18.5,64.481 18.5,65.686 L18.5,99.476" id="Fill-81" fill="#0073AA"></path>
393
+ <polygon id="Fill-82" fill="#0073AA" points="27 63.5 31.912 63.5 31.912 62 27 62"></polygon>
394
+ <path d="M52.366,99.476 L50.866,99.476 L50.866,65.686 C50.866,64.481 49.886,63.5 48.681,63.5 L34,63.5 L34,62 L48.681,62 C50.712,62 52.366,63.654 52.366,65.686 L52.366,99.476" id="Fill-83" fill="#0073AA"></path>
395
+ <polygon id="Fill-84" fill="#E7F7FF" points="20 103.024 48.147 103.024 48.147 68 20 68"></polygon>
396
+ <polygon id="Fill-85" fill="#0073AA" points="31 66.5 38.152 66.5 38.152 65 31 65"></polygon>
397
+ <path d="M53.497,102.743 L53.497,101.63 C53.497,100.547 52.62,99.666 51.535,99.666 L48.487,99.654 C48.125,98.069 47.502,96.586 46.661,95.257 L48.819,93.097 C49.593,92.329 49.597,91.078 48.826,90.31 L47.211,88.693 C46.442,87.925 45.193,87.919 44.423,88.687 L42.261,90.847 C40.933,90.005 39.451,89.383 37.871,89.023 L37.871,85.973 C37.871,84.884 36.985,84 35.893,84 L33.614,84 C32.522,84 31.639,84.884 31.639,85.973 L31.639,89.023 C30.08,89.374 28.626,89.989 27.31,90.804 L25.164,88.639 C24.396,87.867 23.145,87.852 22.374,88.626 L20.75,90.231 C19.98,90.993 19.971,92.246 20.736,93.018 L22.88,95.189 C22.035,96.513 21.404,97.995 21.04,99.575 L17.991,99.562 C16.899,99.553 16.015,100.438 16.015,101.533 L16,102.743 L28.493,102.743 C28.493,99.288 31.296,96.495 34.756,96.495 C38.211,96.495 41.01,99.288 41.01,102.743 L53.497,102.743" id="Fill-86" fill="#8AC4E6"></path>
398
+ <path d="M41.511,102.493 L40.011,102.493 C40.011,99.462 37.541,96.995 34.506,96.995 C31.466,96.995 28.993,99.462 28.993,102.493 L27.493,102.493 C27.493,98.634 30.639,95.495 34.506,95.495 C38.368,95.495 41.511,98.634 41.511,102.493 Z M16.5,102.503 L15,102.484 L15.015,101.273 C15.015,100.549 15.302,99.862 15.821,99.346 C16.336,98.835 17.001,98.568 17.747,98.563 L20.206,98.573 C20.544,97.337 21.039,96.155 21.684,95.049 L19.952,93.295 C19.443,92.78 19.163,92.095 19.167,91.366 C19.172,90.639 19.457,89.958 19.972,89.448 L21.596,87.842 C22.615,86.82 24.415,86.824 25.446,87.86 L27.18,89.611 C28.283,88.986 29.442,88.508 30.639,88.186 L30.639,85.723 C30.639,84.222 31.861,83 33.364,83 L35.643,83 C37.147,83 38.371,84.222 38.371,85.723 L38.371,88.187 C39.61,88.522 40.792,89.012 41.897,89.651 L43.643,87.906 C44.704,86.849 46.431,86.852 47.491,87.913 L49.106,89.53 C49.619,90.041 49.902,90.724 49.902,91.451 C49.901,92.18 49.615,92.865 49.098,93.38 L47.357,95.121 C47.996,96.231 48.488,97.415 48.824,98.656 L51.288,98.666 C52.781,98.666 53.997,99.883 53.997,101.38 L53.997,102.493 L52.497,102.493 L52.497,101.38 C52.497,100.711 51.954,100.166 51.285,100.166 L47.638,100.151 L47.506,99.571 C47.167,98.087 46.586,96.686 45.778,95.407 L45.457,94.901 L48.039,92.317 C48.273,92.084 48.401,91.776 48.402,91.449 C48.402,91.125 48.276,90.82 48.046,90.591 L46.43,88.974 C45.953,88.495 45.177,88.494 44.703,88.968 L42.116,91.551 L41.61,91.23 C40.336,90.423 38.937,89.842 37.454,89.505 L36.871,89.371 L36.871,85.723 C36.871,85.049 36.32,84.5 35.643,84.5 L33.364,84.5 C32.688,84.5 32.139,85.049 32.139,85.723 L32.139,89.373 L31.553,89.505 C30.122,89.827 28.742,90.394 27.454,91.192 L26.947,91.506 L24.382,88.917 C23.921,88.454 23.115,88.445 22.655,88.905 L21.027,90.514 C20.797,90.742 20.669,91.047 20.667,91.375 C20.666,91.702 20.79,92.01 21.019,92.24 L23.585,94.838 L23.262,95.343 C22.447,96.62 21.861,98.016 21.521,99.494 L21.386,100.078 L17.738,100.063 C17.365,100.068 17.106,100.184 16.877,100.412 C16.644,100.643 16.515,100.952 16.515,101.282 L16.5,102.503 L16.5,102.503 Z" id="Fill-87" fill="#0073AA"></path>
399
+ <path d="M41,34.935 L41,34.935 C41,33.977 41.683,33.179 42.588,33 C41.683,33.179 41,33.978 41,34.936" id="Fill-97" fill="#B4D7E7"></path>
400
+ <path d="M41.75,50.13 L41.75,49.867 L41,49.867 L41,33.973 C41,33.016 41.683,32.217 42.588,32.038 C42.713,32.013 42.842,32 42.974,32 L53.999,32 C54.184,33.539 54.164,35.105 53.921,36.652 L45.341,36.652 L45.341,48.704 C44.19,49.324 42.985,49.799 41.75,50.13" id="Fill-98" fill="#4B97C6"></path>
401
+ <path d="M41,50.593 L41,50 L42.5,50 L42.5,50.263 C42.005,50.396 41.504,50.506 41,50.593" id="Fill-99" fill="#0073AA"></path>
402
+ <path d="M57.996,51.046 C57.881,51.046 57.765,51.027 57.652,50.987 L48.182,47.647 C47.483,48.178 46.753,48.646 46,49.052 L46,37 L54.58,37 C54.365,38.372 53.975,39.729 53.4,41.036 L58.863,49.448 C59.105,49.82 59.083,50.303 58.809,50.652 C58.608,50.906 58.307,51.046 57.996,51.046" id="Fill-100" fill="#E7F7FF"></path>
403
+ <path d="M26.1809572,45.6108842 C19.2089572,40.1958842 17.9459572,30.1538842 23.3599572,23.1818842 C28.7739572,16.2088842 38.8159572,14.9458842 45.7889572,20.3598842 C51.8099572,25.0348842 53.5689572,33.1588842 50.4529572,39.7798842 L56.1399572,48.5368842 C56.2879572,48.7638842 56.0629572,49.0498842 55.8069572,48.9598842 L45.9509572,45.4828842 C40.3129572,49.9858842 32.1309572,50.2308842 26.1809572,45.6108842" id="Fill-101" fill="#FFFFFF"></path>
404
+ <path d="M35.7222614,49.4751973 C32.1062614,49.4751973 28.4892614,48.2991973 25.4552614,45.9421973 C18.5682614,40.5951973 16.9512614,30.7251973 21.7722614,23.4741973 L23.0212614,24.3041973 C18.6322614,30.9051973 20.1062614,39.8901973 26.3752614,44.7581973 C31.9552614,49.0911973 39.7022614,49.0401973 45.2152614,44.6361973 L45.5412614,44.3761973 L54.4992614,47.5361973 L49.3302614,39.5781973 L49.5072614,39.2001973 C52.5142614,32.8101973 50.6452614,25.0271973 45.0622614,20.6911973 C40.8452614,17.4171973 35.1332614,16.5931973 30.1532614,18.5391973 L29.6082614,17.1431973 C35.0762614,15.0031973 41.3502614,15.9101973 45.9822614,19.5071973 C52.0032614,24.1821973 54.0922614,32.5111973 51.0392614,39.4551973 L56.5022614,47.8671973 C56.7442614,48.2381973 56.7222614,48.7221973 56.4482614,49.0701973 C56.1742614,49.4191973 55.7082614,49.5531973 55.2912614,49.4061973 L45.8212614,46.0661973 C42.8302614,48.3371973 39.2762614,49.4751973 35.7222614,49.4751973" id="Fill-102" fill="#0073AA"></path>
405
+ <path d="M25.127,22.451 L24,21.462 C24.279,21.143 24.568,20.838 24.866,20.546 C25.873,19.559 27.002,18.702 28.224,18 L28.971,19.301 C27.86,19.94 26.832,20.719 25.916,21.617 C25.645,21.884 25.382,22.161 25.127,22.451" id="Fill-103" fill="#0073AA"></path>
406
+ <polyline id="Fill-112" fill="#0073AA" points="54.009 33.51 54 32.01 55.647 32 55.656 33.5 54.009 33.51"></polyline>
407
+ <polygon id="Fill-125" fill="#0073AA" points="0 103.5 2.739 103.5 2.739 102 0 102"></polygon>
408
+ <polygon id="Fill-127" fill="#3378B0" points="4 103.5 167.822 103.5 167.822 102 4 102"></polygon>
409
+ <g id="Group" transform="translate(25.000000, 22.000000)">
410
+ <path d="M4.50393103,3.19910345 L2.73937931,4.96289655 L2.16206897,4.38634483 C1.84193103,4.0662069 1.84193103,3.54731034 2.16206897,3.22717241 L2.76744828,2.6217931 C3.08758621,2.30165517 3.60648276,2.30165517 3.92662069,2.6217931 L4.50393103,3.19910345" id="Fill-132" fill="#9CC9E1"></path>
411
+ <path d="M3.34703448,2.95103448 L3.17027586,3.02386207 L2.56489655,3.62924138 L2.49131034,3.80675862 L2.56489655,3.98427586 L2.73937931,4.15875862 L3.69903448,3.19910345 L3.52455172,3.02462069 L3.34703448,2.95103448 Z M2.73937931,5.7677931 L1.76,4.78841379 C1.49751724,4.52668966 1.35337931,4.17772414 1.35337931,3.80675862 C1.35337931,3.4357931 1.49827586,3.08682759 1.76075862,2.82434483 L2.36537931,2.21972414 C2.88882759,1.69551724 3.80448276,1.694 4.32944828,2.21972414 L5.30806897,3.19910345 L2.73937931,5.7677931 L2.73937931,5.7677931 Z" id="Fill-133" fill="#0073AA"></path>
412
+ <path d="M18.8752414,4.77855172 L17.1129655,3.01248276 L17.6902759,2.43593103 C18.0111724,2.11655172 18.530069,2.11731034 18.8502069,2.43744828 L19.454069,3.04282759 C19.7742069,3.36372414 19.7734483,3.88262069 19.4525517,4.20275862 L18.8752414,4.77855172" id="Fill-134" fill="#9CC9E1"></path>
413
+ <path d="M17.9171034,3.01324138 L18.876,3.97441379 L19.0504828,3.79993103 L19.124069,3.62241379 L19.0512414,3.44489655 L18.4473793,2.83951724 C18.3487586,2.74089655 18.1902069,2.74165517 18.0923448,2.83875862 L17.9171034,3.01324138 Z M18.8744828,5.58344828 L16.308069,3.01172414 L17.2889655,2.03310345 C17.8306207,1.49296552 18.7113793,1.49372414 19.2530345,2.03537931 L19.8568966,2.64151724 C20.1193793,2.904 20.2627586,3.25296552 20.262,3.62393103 C20.262,3.99489655 20.1171034,4.34386207 19.8538621,4.60558621 L18.8744828,5.58344828 L18.8744828,5.58344828 Z" id="Fill-135" fill="#0073AA"></path>
414
+ <path d="M17.2783448,19.1483448 L19.0466897,17.3883448 L19.6224828,17.9664138 C19.9418621,18.2873103 19.9403448,18.8062069 19.6194483,19.1255862 L19.0133103,19.7294483 C18.6924138,20.0488276 18.1727586,20.0473103 17.8533793,19.7264138 L17.2783448,19.1483448" id="Fill-136" fill="#9CC9E1"></path>
415
+ <path d="M18.0824828,19.1506207 L18.2569655,19.3251034 L18.4344828,19.3994483 L18.6112414,19.3258621 L19.2181379,18.7227586 L19.2917241,18.5452414 L19.2188966,18.3677241 L19.0451724,18.1924828 L18.0824828,19.1506207 Z M18.4344828,20.5373793 L18.4314483,20.5373793 C18.0604828,20.5366207 17.7115172,20.3909655 17.4505517,20.1277241 L16.4734483,19.1468276 L19.0482069,16.5834483 L20.0253103,17.5651034 C20.2870345,17.8283448 20.4311724,18.1773103 20.4296552,18.5482759 C20.4288966,18.9192414 20.2832414,19.2674483 20.0207586,19.5291724 L19.4146207,20.1322759 C19.1521379,20.394 18.8046897,20.5373793 18.4344828,20.5373793 L18.4344828,20.5373793 Z" id="Fill-137" fill="#0073AA"></path>
416
+ <path d="M2.91006897,17.534 L4.66855172,19.3046207 L4.08972414,19.8796552 C3.76806897,20.1990345 3.24917241,20.1967586 2.93055172,19.8758621 L2.32744828,19.2682069 C2.00806897,18.9473103 2.01034483,18.4284138 2.33124138,18.1090345 L2.91006897,17.534" id="Fill-138" fill="#9CC9E1"></path>
417
+ <path d="M2.9077931,18.3388966 L2.73255172,18.5126207 L2.6582069,18.6901379 L2.73103448,18.8668966 L3.33413793,19.4745517 L3.51089655,19.5488966 L3.51165517,19.5488966 L3.68841379,19.476069 L3.86365517,19.3023448 L2.9077931,18.3388966 Z M3.51165517,20.6868276 L3.50710345,20.6868276 C3.13613793,20.6853103 2.78717241,20.5396552 2.5262069,20.2764138 L1.92386207,19.6695172 C1.66213793,19.4062759 1.51875862,19.0565517 1.52027586,18.6863448 C1.52103448,18.3146207 1.66744828,17.9664138 1.93068966,17.7046897 L2.91310345,16.7298621 L5.47268966,19.3084138 L4.49027586,20.2832414 C4.22855172,20.5434483 3.88110345,20.6868276 3.51165517,20.6868276 L3.51165517,20.6868276 Z" id="Fill-139" fill="#0073AA"></path>
418
+ <path d="M10.9006207,16.8975172 C7.58772414,16.8975172 4.90296552,14.2127586 4.90296552,10.9006207 C4.90296552,7.58848276 7.58772414,4.90296552 10.9006207,4.90296552 C14.2127586,4.90296552 16.8975172,7.58848276 16.8975172,10.9006207 C16.8975172,14.2127586 14.2127586,16.8975172 10.9006207,16.8975172 Z M10.9006207,0.568965517 C5.19427586,0.568965517 0.568965517,5.19427586 0.568965517,10.9006207 C0.568965517,16.6062069 5.19427586,21.2322759 10.9006207,21.2322759 C16.6062069,21.2322759 21.2315172,16.6062069 21.2315172,10.9006207 C21.2315172,5.19427586 16.6062069,0.568965517 10.9006207,0.568965517 L10.9006207,0.568965517 Z" id="Fill-140" fill="#FFFFFF"></path>
419
+ <path d="M10.9006207,5.47193103 C7.90710345,5.47193103 5.47193103,7.90710345 5.47193103,10.9006207 C5.47193103,13.8933793 7.90710345,16.3285517 10.9006207,16.3285517 C13.8933793,16.3285517 16.3285517,13.8933793 16.3285517,10.9006207 C16.3285517,7.90710345 13.8933793,5.47193103 10.9006207,5.47193103 Z M10.9006207,17.4664828 C7.27972414,17.4664828 4.334,14.5207586 4.334,10.9006207 C4.334,7.27972414 7.27972414,4.334 10.9006207,4.334 C14.5207586,4.334 17.4664828,7.27972414 17.4664828,10.9006207 C17.4664828,14.5207586 14.5207586,17.4664828 10.9006207,17.4664828 Z M10.9006207,1.13793103 C5.51744828,1.13793103 1.13793103,5.51744828 1.13793103,10.9006207 C1.13793103,16.2837931 5.51744828,20.6633103 10.9006207,20.6633103 C16.2830345,20.6633103 20.6625517,16.2837931 20.6625517,10.9006207 C20.6625517,5.51744828 16.2830345,1.13793103 10.9006207,1.13793103 Z M10.9006207,21.8012414 C4.89006897,21.8012414 0,16.9111724 0,10.9006207 C0,4.89006897 4.89006897,0 10.9006207,0 C16.9111724,0 21.8004828,4.89006897 21.8004828,10.9006207 C21.8004828,16.9111724 16.9111724,21.8012414 10.9006207,21.8012414 L10.9006207,21.8012414 Z" id="Fill-141" fill="#0073AA"></path>
420
+ <path d="M1.59386207,6.43613793 L5.45524138,8.39868966 C6.00144828,7.2122069 6.91862069,6.23206897 8.06413793,5.61606897 L6.09324138,1.75924138 C4.13448276,2.79172414 2.5557931,4.43565517 1.59386207,6.43613793" id="Fill-142" fill="#D1E8F0"></path>
421
+ <path d="M15.6867586,1.74937931 L13.7242069,5.61 C14.8712414,6.22372414 15.7906897,7.20158621 16.339931,8.38655172 L20.1967586,6.41565517 C19.2310345,4.41744828 17.6477931,2.77731034 15.6867586,1.74937931" id="Fill-143" fill="#D1E8F0"></path>
422
+ <path d="M20.0010345,15.7914483 L16.1335862,13.8258621 C15.5357931,14.8917241 14.6216552,15.7527586 13.5186207,16.2898621 L15.4895172,20.1466897 C17.4057931,19.1931034 18.9882759,17.672069 20.0010345,15.7914483" id="Fill-144" fill="#D1E8F0"></path>
423
+ <path d="M6.33068966,20.1557931 L8.29324138,16.2951724 C7.18944828,15.7603448 6.2737931,14.9015862 5.67372414,13.8364828 L1.80931034,15.811931 C2.82586207,17.6895172 4.41289655,19.2067586 6.33068966,20.1557931" id="Fill-145" fill="#D1E8F0"></path>
424
+ <path d="M2.36234483,6.18806897 L5.20944828,7.63551724 C5.72606897,6.73731034 6.45206897,5.96655172 7.31537931,5.40062069 L5.85731034,2.54668966 C4.40455172,3.4282069 3.18924138,4.69510345 2.36234483,6.18806897 Z M5.72455172,9.174 L0.840551724,6.69103448 L1.0817931,6.18882759 C2.09075862,4.08896552 3.77717241,2.33731034 5.82848276,1.25627586 L6.33827586,0.987724138 L8.82427586,5.85351724 L8.33344828,6.11751724 C7.30324138,6.67131034 6.4642069,7.56572414 5.97186207,8.63613793 L5.72455172,9.174 L5.72455172,9.174 Z" id="Fill-146" fill="#0073AA"></path>
425
+ <path d="M14.4729655,5.39303448 C15.3370345,5.95668966 16.0653103,6.72593103 16.5834483,7.62337931 L19.4275172,6.16986207 C18.5983448,4.67841379 17.3792414,3.41455172 15.9249655,2.53682759 L14.4729655,5.39303448 Z M16.0721379,9.16262069 L15.8233103,8.62551724 C15.3286897,7.55662069 14.4881379,6.66372414 13.4556552,6.11144828 L12.964069,5.84896552 L15.4402069,0.977862069 L15.9507586,1.24565517 C18.0051034,2.32213793 19.6945517,4.07075862 20.7088276,6.16834483 L20.9508276,6.66903448 L16.0721379,9.16262069 L16.0721379,9.16262069 Z" id="Fill-147" fill="#0073AA"></path>
426
+ <path d="M14.278,16.5250345 L15.7330345,19.3728966 C17.1630345,18.5588966 18.3495172,17.4156552 19.2082759,16.0266207 L16.3422069,14.570069 C15.8058621,15.3658621 15.1041379,16.0304138 14.278,16.5250345 Z M15.2391724,20.9068276 L12.7478621,16.0326897 L13.2697931,15.7785517 C14.2749655,15.2892414 15.0935172,14.5177241 15.6366897,13.5474483 L15.9037241,13.0710345 L20.7778621,15.547931 L20.5017241,16.0615172 C19.4297931,18.0521379 17.7835862,19.6406897 15.7428966,20.6557241 L15.2391724,20.9068276 L15.2391724,20.9068276 Z" id="Fill-148" fill="#0073AA"></path>
427
+ <path d="M2.60282759,16.0455862 C3.46310345,17.4315862 4.65337931,18.5710345 6.08565517,19.3827586 L7.53462069,16.5318621 C6.70772414,16.0387586 6.00524138,15.3764828 5.46662069,14.5822069 L2.60282759,16.0455862 Z M6.58331034,20.9151724 L6.07882759,20.6663448 C4.03358621,19.6543448 2.38510345,18.0695862 1.30937931,16.0827586 L1.03172414,15.569931 L5.90206897,13.0816552 L6.16986207,13.5573103 C6.71531034,14.5268276 7.53537931,15.296069 8.54131034,15.7823448 L9.06324138,16.0357241 L6.58331034,20.9151724 L6.58331034,20.9151724 Z" id="Fill-149" fill="#0073AA"></path>
428
+ </g>
429
+ </g>
430
+ </symbol>
431
+
432
+
433
+ <symbol id="icon-content" width="175px" height="110px" viewBox="0 0 175 110" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
434
+ <defs></defs>
435
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
436
+ <g id="Group-2" transform="translate(55.000000, 43.000000)">
437
+ <polygon id="Fill-148" fill="#0073AA" points="0.559516803 47.1133533 7.64844949 47.1133533 7.64844949 45.8015 0.559516803 45.8015"></polygon>
438
+ <path d="M53.8269776,52.3664477 L53.8269776,4.41821002 C53.8269776,2.9725477 52.6187393,1.8015 51.1291798,1.8015 L11.2573146,1.8015 C9.76775514,1.8015 8.5595168,2.9725477 8.5595168,4.41821002 L8.5595168,52.3664477 L53.8269776,52.3664477" id="Fill-159" fill="#FFFFFF"></path>
439
+ <path d="M8,10.1133533 L8,4.49781548 C8,3.00819763 9.01618254,1.8015 10.2686027,1.8015 L50.9988581,1.8015 C52.2512783,1.8015 53.2674608,3.00819763 53.2674608,4.49781548 L53.2674608,10.1133533 L8,10.1133533" id="Fill-160" fill="#E7F7FF"></path>
440
+ <polygon id="Fill-161" fill="#0073AA" points="8.5595168 10.1133533 53.8269776 10.1133533 53.8269776 8.8015 8.5595168 8.8015"></polygon>
441
+ <polygon id="Fill-165" fill="#E7F7FF" points="12 32.1133533 39.6977074 32.1133533 39.6977074 12.8015 12 12.8015"></polygon>
442
+ <polygon id="Fill-165" fill="#E7F7FF" points="41 25.4801247 49.6977074 25.4801247 49.6977074 12.8015 41 12.8015"></polygon>
443
+ <polygon id="Fill-166" fill="#D1E8F0" points="15.5595168 46.4801247 25.6356835 46.4801247 25.6356835 33.8015 15.5595168 33.8015"></polygon>
444
+ <path d="M7.5595168,52.0232489 L7.5595168,4.07501124 C7.5595168,2.26990111 9.07342141,0.8015 10.9335674,0.8015 L50.8054326,0.8015 C52.6655786,0.8015 54.1794832,2.26990111 54.1794832,4.07501124 L54.1794832,31.0259048 L52.8269776,31.0259048 L52.8269776,4.07501124 C52.8269776,2.99316956 51.9198972,2.11335329 50.8054326,2.11335329 L10.9335674,2.11335329 C9.81910283,2.11335329 8.9120224,2.99316956 8.9120224,4.07501124 L8.9120224,52.0232489 L7.5595168,52.0232489 Z" id="Fill-168" fill="#0073AA"></path>
445
+ </g>
446
+ <path d="M61.309,91.654 C61.309,95.881 57.882,99.308 53.655,99.308 C49.427,99.308 46,95.881 46,91.654 C46,87.427 49.427,84 53.655,84 C57.882,84 61.309,87.427 61.309,91.654" id="Fill-406" fill="#FFFFFF"></path>
447
+ <path d="M118.91,95.455 C118.91,100.125 115.124,103.91 110.455,103.91 C105.785,103.91 102,100.125 102,95.455 C102,90.786 105.785,87 110.455,87 C115.124,87 118.91,90.786 118.91,95.455" id="Fill-407" fill="#FFFFFF"></path>
448
+ <path d="M139.063,95.531 C139.063,102.452 133.452,108.062 126.532,108.062 C119.611,108.062 114,102.452 114,95.531 C114,88.61 119.611,83 126.532,83 C133.452,83 139.063,88.61 139.063,95.531" id="Fill-408" fill="#FFFFFF"></path>
449
+ <path d="M150.687,100.844 C150.687,105.175 147.175,108.687 142.843,108.687 C138.512,108.687 135,105.175 135,100.844 C135,96.512 138.512,93 142.843,93 C147.175,93 150.687,96.512 150.687,100.844" id="Fill-409" fill="#FFFFFF"></path>
450
+ <path d="M168.34,95.67 C168.34,102.667 162.668,108.34 155.67,108.34 C148.673,108.34 143,102.667 143,95.67 C143,88.672 148.673,83 155.67,83 C162.668,83 168.34,88.672 168.34,95.67" id="Fill-410" fill="#FFFFFF"></path>
451
+ <path d="M48.999,92 C48.999,97.522 44.522,101.999 39,101.999 C33.477,101.999 29,97.522 29,92 C29,86.477 33.477,82 39,82 C44.522,82 48.999,86.477 48.999,92" id="Fill-411" fill="#FFFFFF"></path>
452
+ <path d="M63.999,99 C63.999,104.522 59.522,108.999 54,108.999 C48.477,108.999 44,104.522 44,99 C44,93.477 48.477,89 54,89 C59.522,89 63.999,93.477 63.999,99" id="Fill-412" fill="#FFFFFF"></path>
453
+ <path d="M26.76,100.88 C26.76,105.785 22.784,109.76 17.88,109.76 C12.976,109.76 9,105.785 9,100.88 C9,95.976 12.976,92 17.88,92 C22.784,92 26.76,95.976 26.76,100.88" id="Fill-413" fill="#FFFFFF"></path>
454
+ <path d="M38.02,100.01 C38.02,103.882 34.881,107.02 31.01,107.02 C27.138,107.02 24,103.882 24,100.01 C24,96.139 27.138,93 31.01,93 C34.881,93 38.02,96.139 38.02,100.01" id="Fill-415" fill="#FFFFFF"></path>
455
+ <path d="M61.807,91.405 L60.307,91.405 C60.307,87.598 57.211,84.5 53.404,84.5 C49.597,84.5 46.5,87.598 46.5,91.405 L45,91.405 C45,86.77 48.77,83 53.404,83 C58.038,83 61.807,86.77 61.807,91.405" id="Fill-416" fill="#0073AA"></path>
456
+ <path d="M120.41,96.205 L118.91,96.205 C118.91,91.957 115.454,88.5 111.205,88.5 C106.956,88.5 103.5,91.957 103.5,96.205 L102,96.205 C102,91.13 106.129,87 111.205,87 C116.281,87 120.41,91.13 120.41,96.205 L131.820312,88.6435547" id="Fill-417" fill="#0073AA"></path>
457
+ <path d="M158.3625,49.5 L154.0885,49.5 C153.6735,49.5 153.3385,49.164 153.3385,48.75 C153.3385,48.336 153.6735,48 154.0885,48 L158.3625,48 C158.7765,48 159.1125,48.336 159.1125,48.75 C159.1125,49.164 158.7765,49.5 158.3625,49.5" id="Fill-418" fill="#0073AA"></path>
458
+ <path d="M156.0885,51.774 C155.6745,51.774 155.3385,51.438 155.3385,51.024 L155.3385,46.75 C155.3385,46.336 155.6745,46 156.0885,46 C156.5025,46 156.8385,46.336 156.8385,46.75 L156.8385,51.024 C156.8385,51.438 156.5025,51.774 156.0885,51.774" id="Fill-419" fill="#0073AA"></path>
459
+ <path d="M25.025,7.5 L20.75,7.5 C20.336,7.5 20,7.164 20,6.75 C20,6.336 20.336,6 20.75,6 L25.025,6 C25.439,6 25.775,6.336 25.775,6.75 C25.775,7.164 25.439,7.5 25.025,7.5" id="Fill-420" fill="#0073AA"></path>
460
+ <path d="M22.75,9.774 C22.336,9.774 22,9.438 22,9.024 L22,4.75 C22,4.336 22.336,4 22.75,4 C23.164,4 23.5,4.336 23.5,4.75 L23.5,9.024 C23.5,9.438 23.164,9.774 22.75,9.774" id="Fill-421" fill="#0073AA"></path>
461
+ <path d="M100.74975,4.52275 C100.55775,4.52275 100.36575,4.44875 100.21975,4.30275 C99.92675,4.00975 99.92675,3.53475 100.21975,3.24175 L103.24175,0.21975 C103.53475,-0.07325 104.00975,-0.07325 104.30275,0.21975 C104.59575,0.51275 104.59575,0.98675 104.30275,1.27975 L101.27975,4.30275 C101.13375,4.44875 100.94175,4.52275 100.74975,4.52275" id="Fill-424" fill="#0073AA"></path>
462
+ <path d="M103.77175,4.52275 C103.57975,4.52275 103.38875,4.44875 103.24175,4.30275 L100.21975,1.27975 C99.92675,0.98675 99.92675,0.51275 100.21975,0.21975 C100.51275,-0.07325 100.98675,-0.07325 101.27975,0.21975 L104.30275,3.24175 C104.59575,3.53475 104.59575,4.00975 104.30275,4.30275 C104.15575,4.44875 103.96475,4.52275 103.77175,4.52275" id="Fill-425" fill="#0073AA"></path>
463
+ <path d="M10.74975,61.52275 C10.55775,61.52275 10.36575,61.44875 10.21975,61.30275 C9.92675,61.00975 9.92675,60.53475 10.21975,60.24175 L13.24175,57.21975 C13.53475,56.92675 14.00975,56.92675 14.30275,57.21975 C14.59575,57.51275 14.59575,57.98675 14.30275,58.27975 L11.27975,61.30275 C11.13375,61.44875 10.94175,61.52275 10.74975,61.52275" id="Fill-424" fill="#0073AA"></path>
464
+ <path d="M13.77175,61.52275 C13.57975,61.52275 13.38875,61.44875 13.24175,61.30275 L10.21975,58.27975 C9.92675,57.98675 9.92675,57.51275 10.21975,57.21975 C10.51275,56.92675 10.98675,56.92675 11.27975,57.21975 L14.30275,60.24175 C14.59575,60.53475 14.59575,61.00975 14.30275,61.30275 C14.15575,61.44875 13.96475,61.52275 13.77175,61.52275" id="Fill-425" fill="#0073AA"></path>
465
+ <polygon id="Fill-426" fill="#0073AA" points="142 69.5 163.817 69.5 163.817 68 142 68"></polygon>
466
+ <polygon id="Fill-428" fill="#0073AA" points="32 7.5 72.796 7.5 72.796 6 32 6"></polygon>
467
+ <polygon id="Fill-429" fill="#0073AA" points="125 8.5 146.817 8.5 146.817 7 125 7"></polygon>
468
+ <polygon id="Fill-430" fill="#0073AA" points="119 8.5 122.912 8.5 122.912 7 119 7"></polygon>
469
+ <path d="M139.677,74.338 C139.677,75.077 139.078,75.676 138.339,75.676 C137.599,75.676 137,75.077 137,74.338 C137,73.599 137.599,73 138.339,73 C139.078,73 139.677,73.599 139.677,74.338" id="Fill-433" fill="#0073AA"></path>
470
+ <path d="M14.677,18.338 C14.677,19.077 14.078,19.676 13.339,19.676 C12.6,19.676 12,19.077 12,18.338 C12,17.599 12.6,17 13.339,17 C14.078,17 14.677,17.599 14.677,18.338" id="Fill-434" fill="#0073AA"></path>
471
+ <path d="M164.677,26.339 C164.677,27.078 164.078,27.677 163.339,27.677 C162.6,27.677 162,27.078 162,26.339 C162,25.599 162.6,25 163.339,25 C164.078,25 164.677,25.599 164.677,26.339" id="Fill-435" fill="#0073AA"></path>
472
+ <path d="M64.696,28.848 C64.696,29.317 64.317,29.696 63.848,29.696 C63.38,29.696 63,29.317 63,28.848 C63,28.38 63.38,28 63.848,28 C64.317,28 64.696,28.38 64.696,28.848" id="Fill-438" fill="#0073AA"></path>
473
+ <polygon id="Fill-478" fill="#8AC4E6" points="60 109.352 67.384 109.352 67.384 75 60 75"></polygon>
474
+ <path d="M60.5,75.5 L60.5,107.257 C60.5,107.861 60.991,108.352 61.595,108.352 L66.384,108.352 L66.384,75.5 L60.5,75.5 Z M67.884,109.467529 L61.5241699,109.467529 C60.0931699,109.467529 59,108.688 59,107.257 L59,74 L67.884,74 L67.884,109.852 L67.884,109.467529 Z" id="Fill-479" fill="#0073AA"></path>
475
+ <polyline id="Fill-480" fill="#E7F7FF" points="56 79.993 63.384 79.993 65.78 75 58.396 75 56 79.993"></polyline>
476
+ <path d="M57.383,78.992 L63.104,78.992 L64.78,75.5 L59.059,75.5 L57.383,78.992 Z M64.047,80.492 L55,80.492 L58.115,74 L67.164,74 L64.047,80.492 L64.047,80.492 Z" id="Fill-481" fill="#0073AA"></path>
477
+ <path d="M109.971,109.352 L68,109.352 L68,75 L112.58,75 L112.58,106.742 C112.58,108.183 111.412,109.352 109.971,109.352" id="Fill-482" fill="#0073AA"></path>
478
+ <polygon id="Fill-483" fill="#0073AA" points="111 99.565 112.5 99.565 112.5 94 111 94"></polygon>
479
+ <path d="M67,109.434082 L67,74 L113.081,74 L113.081,90.582 L111.581,90.582 L111.581,75.5 L68.5,75.5 L68.5,108.352 L109.398,108.352 C110.601,108.352 111.581,107.373 111.581,106.17 L111.581,103.128 L113.081,103.128 L113.081,106.17 C113.081,108.2 111.732416,109.434082 109.701416,109.434082 L67,109.434082 Z" id="Fill-484" fill="#0073AA"></path>
480
+ <polyline id="Fill-485" fill="#E7F7FF" points="115.976 79.993 71.396 79.993 69 75 113.58 75 115.976 79.993"></polyline>
481
+ <path d="M72.059,78.992 L114.976,78.992 L113.3,75.5 L70.383,75.5 L72.059,78.992 Z M117.361,80.492 L71.116,80.492 L68,74 L114.244,74 L117.361,80.492 L117.361,80.492 Z" id="Fill-486" fill="#0073AA"></path>
482
+ <polyline id="Fill-513" fill="#D1E8F0" points="132.7655 45.13 119.8855 45.13 117.7395 48.848 126.3255 58.614 134.9125 48.848 132.7655 45.13"></polyline>
483
+ <polyline id="Fill-514" fill="#9CC9E1" points="122.8485 48.848 120.7015 45.13 118.7395 48.875 122.8485 48.848"></polyline>
484
+ <polyline id="Fill-515" fill="#9CC9E1" points="126.8965 48.733 124.8155 45.13 122.7395 48.727 126.8965 48.733"></polyline>
485
+ <polyline id="Fill-516" fill="#9CC9E1" points="130.8655 48.721 128.6355 45.13 126.7395 48.748 130.8655 48.721"></polyline>
486
+ <polyline id="Fill-517" fill="#9CC9E1" points="126.7395 49.13 126.7395 58.246 130.9345 49.13 126.7395 49.13"></polyline>
487
+ <polyline id="Fill-518" fill="#62A6CF" points="118.7395 49.13 118.7395 49.221 126.9455 58.451 122.6585 49.13 118.7395 49.13"></polyline>
488
+ <polyline id="Fill-519" fill="#62A6CF" points="134.9465 49.13 134.9465 49.221 126.7395 58.451 131.0275 49.13 134.9465 49.13"></polyline>
489
+ <polyline id="Fill-520" fill="#0073AA" points="126.2435 59.5 116.7395 48.69 119.3715 44.13 129.2805 44.13 129.2805 45.63 120.2375 45.63 118.5765 48.507 126.2435 57.229 133.9115 48.507 132.2515 45.63 131.4435 45.63 131.4435 44.13 133.1165 44.13 135.7495 48.69 126.2435 59.5"></polyline>
490
+ <polygon id="Fill-521" fill="#0073AA" points="129.7395 45.63 131.1395 45.63 131.1395 44.13 129.7395 44.13"></polygon>
491
+ <polygon id="Fill-522" fill="#0073AA" points="117.7395 49.63 134.9125 49.63 134.9125 48.13 117.7395 48.13"></polygon>
492
+ <polyline id="Fill-523" fill="#0073AA" points="126.0315 58.5 121.7395 48.734 123.1125 48.13 127.4045 57.897 126.0315 58.5"></polyline>
493
+ <polyline id="Fill-524" fill="#0073AA" points="127.1125 58.5 125.7395 57.896 130.0315 48.13 131.4045 48.734 127.1125 58.5"></polyline>
494
+ <polygon id="Fill-525" fill="#0073AA" points="125.7395 58.673 127.2395 58.673 127.2395 49.13 125.7395 49.13"></polygon>
495
+ <polyline id="Fill-526" fill="#0073AA" points="121.8865 49.598 119.7395 45.88 121.0375 45.13 123.1855 48.848 121.8865 49.598"></polyline>
496
+ <polyline id="Fill-527" fill="#0073AA" points="125.8865 49.598 123.7395 45.88 125.0375 45.13 127.1855 48.848 125.8865 49.598"></polyline>
497
+ <polyline id="Fill-528" fill="#0073AA" points="129.8875 49.598 127.7395 45.88 129.0385 45.13 131.1865 48.848 129.8875 49.598"></polyline>
498
+ <polyline id="Fill-529" fill="#0073AA" points="132.0385 49.598 130.7395 48.848 132.8865 45.13 134.1855 45.88 132.0385 49.598"></polyline>
499
+ <polyline id="Fill-530" fill="#0073AA" points="127.0385 49.598 125.7395 48.848 127.8865 45.13 129.1855 45.88 127.0385 49.598"></polyline>
500
+ <polyline id="Fill-531" fill="#0073AA" points="123.0385 49.598 121.7395 48.848 123.8875 45.13 125.1855 45.88 123.0385 49.598"></polyline>
501
+ <path d="M88.6770083,14.236 C87.2610083,14.236 86.1140083,13.09 86.1140083,11.672 C86.1140083,10.257 87.2610083,9.114 88.6770083,9.114 C90.0920083,9.114 91.2380083,10.257 91.2380083,11.672 C91.2380083,13.09 90.0920083,14.236 88.6770083,14.236 Z M95.5460083,10.412 L94.2980083,10.407 C94.1500083,9.758 93.8950083,9.151 93.5510083,8.607 L94.4340083,7.723 C94.7510083,7.409 94.7530083,6.897 94.4370083,6.582 L93.7760083,5.921 C93.4610083,5.606 92.9500083,5.604 92.6350083,5.918 L91.7500083,6.802 C91.2060083,6.458 90.5990083,6.203 89.9530083,6.056 L89.9530083,4.807 C89.9530083,4.362 89.5900083,4 89.1430083,4 L88.2100083,4 C87.7630083,4 87.4020083,4.362 87.4020083,4.807 L87.4020083,6.056 C86.7640083,6.199 86.1680083,6.451 85.6300083,6.785 L84.7510083,5.898 C84.4370083,5.583 83.9250083,5.576 83.6090083,5.893 L82.9440083,6.55 C82.6290083,6.862 82.6260083,7.375 82.9390083,7.691 L83.8160083,8.58 C83.4700083,9.121 83.2120083,9.728 83.0630083,10.375 L81.8150083,10.37 C81.3680083,10.366 81.0060083,10.728 81.0060083,11.176 L81.0000083,12.11 C80.9980083,12.554 81.3580083,12.918 81.8040083,12.921 L83.0500083,12.925 C83.1970083,13.576 83.4490083,14.181 83.7930083,14.724 L82.9040083,15.609 C82.5900083,15.921 82.5880083,16.432 82.9030083,16.749 L83.5590083,17.411 C83.8750083,17.73 84.3870083,17.73 84.7010083,17.416 L85.5880083,16.537 C86.1320083,16.881 86.7360083,17.141 87.3870083,17.29 L87.3820083,18.535 C87.3800083,18.981 87.7410083,19.346 88.1870083,19.346 L89.1210083,19.349 C89.5670083,19.349 89.9300083,18.991 89.9300083,18.546 L89.9340083,17.297 C90.5830083,17.151 91.1900083,16.895 91.7360083,16.553 L92.6170083,17.44 C92.9310083,17.755 93.4440083,17.755 93.7620083,17.44 L94.4210083,16.781 C94.7370083,16.468 94.7390083,15.955 94.4210083,15.642 L93.5450083,14.755 C93.8890083,14.21 94.1460083,13.606 94.2930083,12.955 L95.5400083,12.959 C95.9870083,12.959 96.3470083,12.598 96.3490083,12.153 L96.3490083,11.216 C96.3490083,10.773 95.9900083,10.412 95.5460083,10.412 L95.5460083,10.412 Z" id="Fill-532" fill="#FFFFFF"></path>
502
+ <path d="M88.4280386,9.614 C87.4270386,9.614 86.6130386,10.425 86.6130386,11.422 C86.6130386,12.422 87.4270386,13.236 88.4280386,13.236 C89.4260386,13.236 90.2370386,12.422 90.2370386,11.422 C90.2370386,10.425 89.4260386,9.614 88.4280386,9.614 Z M88.4280386,14.736 C86.6010386,14.736 85.1130386,13.249 85.1130386,11.422 C85.1130386,9.598 86.6010386,8.114 88.4280386,8.114 C90.2530386,8.114 91.7370386,9.598 91.7370386,11.422 C91.7370386,13.249 90.2530386,14.736 88.4280386,14.736 Z M85.2350386,15.333 L85.7390386,15.653 C86.2280386,15.962 86.7540386,16.183 87.3040386,16.309 L87.8890386,16.442 L87.8820386,18.288 L88.8740386,18.349 L88.9360386,16.446 L89.5200386,16.315 C90.0730386,16.191 90.6010386,15.973 91.0870386,15.668 L91.5950386,15.349 L92.8990386,16.662 L93.6400386,16.002 L92.3430386,14.609 L92.6600386,14.106 C92.9680386,13.618 93.1870386,13.091 93.3120386,12.539 L93.4440386,11.953 L95.2920386,11.959 L95.3490386,10.966 L95.3470386,10.966 L95.2930386,10.912 L93.4480386,10.905 L93.3170386,10.323 C93.1910386,9.767 92.9720386,9.24 92.6670386,8.758 L92.3470386,8.251 L93.6520386,6.943 L92.9950386,6.201 L91.6040386,7.507 L91.0970386,7.186 C90.6190386,6.882 90.0940386,6.664 89.5360386,6.537 L88.9520386,6.404 L88.9520386,4.557 L87.9600386,4.5 L87.9020386,6.406 L87.3170386,6.538 C86.7780386,6.659 86.2590386,6.872 85.7740386,7.172 L85.2660386,7.486 L83.9680386,6.176 L83.2220386,6.833 L84.5210386,8.229 L84.1980386,8.733 C83.8920386,9.213 83.6720386,9.738 83.5430386,10.294 L83.4080386,10.877 L81.5630386,10.87 L81.5000386,11.865 L83.4010386,11.927 L83.5310386,12.511 C83.6580386,13.072 83.8750386,13.597 84.1760386,14.073 L84.4970386,14.581 L83.1840386,15.89 L83.8410386,16.633 L85.2350386,15.333 Z M88.8710386,19.849 L87.9340386,19.845 C87.5210386,19.845 87.1300386,19.683 86.8360386,19.387 C86.5410386,19.091 86.3800386,18.699 86.3820386,18.282 L86.3850386,17.607 C86.0690386,17.502 85.7600386,17.374 85.4610386,17.22 L84.9800386,17.698 C84.6890386,17.989 84.2980386,18.151 83.8830386,18.151 L83.8800386,18.151 C83.4620386,18.15 83.0700386,17.986 82.7760386,17.688 L82.1200386,17.026 C81.5160386,16.417 81.5180386,15.431 82.1260386,14.827 L82.6080386,14.346 C82.4580386,14.05 82.3310386,13.742 82.2280386,13.423 L81.5520386,13.421 C80.6890386,13.414 79.9940386,12.711 80.0000386,11.856 L80.0060386,10.921 C80.0060386,10.507 80.1700386,10.114 80.4670386,9.819 C80.7640386,9.525 81.1360386,9.404 81.5720386,9.37 L82.2450386,9.373 C82.3510386,9.056 82.4800386,8.748 82.6330386,8.451 L82.1550386,7.968 C81.8630386,7.674 81.7040386,7.283 81.7060386,6.866 C81.7070386,6.45 81.8710386,6.059 82.1670386,5.767 L82.8320386,5.109 C83.4110386,4.528 84.4430386,4.528 85.0320386,5.119 L85.5110386,5.603 C85.8010386,5.458 86.0980386,5.335 86.4020386,5.235 L86.4020386,4.557 C86.4020386,3.698 87.1010386,3 87.9600386,3 L88.8930386,3 C89.7530386,3 90.4520386,3.698 90.4520386,4.557 L90.4520386,5.236 C90.7700386,5.339 91.0770386,5.467 91.3730386,5.618 L91.8560386,5.138 C92.1480386,4.845 92.5370386,4.684 92.9530386,4.684 C93.3870386,4.639 93.7620386,4.846 94.0560386,5.14 L94.7170386,5.802 C95.0120386,6.096 95.1730386,6.487 95.1720386,6.904 C95.1720386,7.321 95.0080386,7.712 94.7120386,8.006 L94.2350386,8.484 C94.3870386,8.782 94.5150386,9.091 94.6180386,9.41 L95.2960386,9.412 C96.1520386,9.413 96.8490386,10.109 96.8490386,10.966 L96.8490386,11.902 C96.8450386,12.762 96.1460386,13.459 95.2900386,13.459 L94.6120386,13.457 C94.5080386,13.774 94.3800386,14.083 94.2280386,14.381 L94.7040386,14.864 C94.9940386,15.149 95.1580386,15.541 95.1590386,15.958 C95.1590386,16.377 94.9950386,16.77 94.6970386,17.065 L94.0420386,17.72 C93.4280386,18.327 92.4410386,18.324 91.8360386,17.721 L91.3560386,17.237 C91.0580386,17.388 90.7490386,17.516 90.4320386,17.619 L90.4300386,18.299 C90.4300386,19.152 89.7310386,19.849 88.8710386,19.849 L88.8710386,19.849 Z" id="Fill-533" fill="#0073AA"></path>
503
+ <path d="M38.749,102.498 C32.822,102.498 28,97.676 28,91.749 C28,85.821 32.822,81 38.749,81 C42.75,81 46.394,83.199 48.261,86.739 L46.935,87.439 C45.328,84.392 42.191,82.5 38.749,82.5 C33.649,82.5 29.5,86.649 29.5,91.749 C29.5,96.849 33.649,100.998 38.749,100.998 L38.749,102.498" id="Fill-534" fill="#0073AA"></path>
504
+ <path d="M24.5,99.523 L23,99.523 C23,97.89 23.501,96.328 24.45,95.005 C25.519,93.516 27.08,92.448 28.848,92 L29.217,93.454 C27.791,93.815 26.531,94.677 25.669,95.879 C24.905,96.946 24.5,98.205 24.5,99.523" id="Fill-535" fill="#0073AA"></path>
505
+ <path d="M48.5,102.521 L47,102.521 C47,100.889 47.501,99.327 48.45,98.005 C49.518,96.515 51.079,95.448 52.848,95 L53.217,96.454 C51.79,96.815 50.531,97.676 49.669,98.879 C48.904,99.945 48.5,101.205 48.5,102.521" id="Fill-536" fill="#0073AA"></path>
506
+ <path d="M17.63,109.76 C12.14,109.76 8,105.835 8,100.63 C8,95.32 12.32,91 17.63,91 C20.88,91 23.89,92.623 25.679,95.342 L24.427,96.167 C22.915,93.871 20.374,92.5 17.63,92.5 C13.147,92.5 9.5,96.148 9.5,100.63 C9.5,104.98 12.995,108.26 17.63,108.26 L17.63,109.76" id="Fill-537" fill="#0073AA"></path>
507
+ <path d="M137.825,93.872 C137.12,87.959 132.091,83.5 126.126,83.5 C122.134,83.5 118.444,85.498 116.256,88.846 L115,88.025 C117.466,84.252 121.625,82 126.126,82 C132.851,82 138.52,87.027 139.315,93.695 L137.825,93.872" id="Fill-538" fill="#0073AA"></path>
508
+ <path d="M135.5,100.593 L134,100.593 C134,95.854 137.855,92 142.593,92 L142.593,93.5 C138.682,93.5 135.5,96.682 135.5,100.593" id="Fill-539" fill="#0073AA"></path>
509
+ <path d="M154.428955,108.394775 C161.000955,108.394775 167.34,101.993 167.34,95.42 C167.34,88.847 161.992,83.5 155.42,83.5 C149.87,83.5 145.101,87.266 143.821,92.658 C143.609,93.556 143.5,94.485 143.5,95.42 L142,95.42 C142,94.369 142.122,93.323 142.362,92.311 C143.803,86.24 149.172,82 155.42,82 C162.82,82 168.84,88.02 168.84,95.42 C168.84,102.82 162.82,109.290283 155.42,109.290283 L154.428955,108.394775 Z" id="Fill-540" fill="#0073AA"></path>
510
+ <path d="M118.996,102.234 C118.996,106.229 113.848,109.468 107.498,109.468 C101.148,109.468 96,106.229 96,102.234 C96,98.239 101.148,95 107.498,95 C113.848,95 118.996,98.239 118.996,102.234" id="Fill-541" fill="#FFFFFF"></path>
511
+ <path d="M118.468,99.233 C118.468,103.229 115.23,106.467 111.234,106.467 C107.239,106.467 104,103.229 104,99.233 C104,95.238 107.239,92 111.234,92 C115.23,92 118.468,95.238 118.468,99.233" id="Fill-542" fill="#FFFFFF"></path>
512
+ <path d="M108.565,100.283 C108.565,105.409 104.409,109.565 99.283,109.565 C94.156,109.565 90,105.409 90,100.283 C90,95.156 94.156,91 99.283,91 C104.409,91 108.565,95.156 108.565,100.283" id="Fill-543" fill="#FFFFFF"></path>
513
+ <path d="M105.5,98.985 L104,98.985 C104,94.582 107.581,91 111.983,91 C113.608,91 115.172,91.486 116.507,92.405 L115.656,93.64 C114.573,92.894 113.303,92.5 111.983,92.5 C108.408,92.5 105.5,95.409 105.5,98.985" id="Fill-544" fill="#0073AA"></path>
514
+ <path d="M154.109,103.905 L152.927,102.981 C153.429,102.339 153.72,101.568 153.769,100.751 C153.903,98.539 152.211,96.631 150,96.497 L150.09,95 C153.127,95.183 155.449,97.804 155.267,100.841 C155.198,101.963 154.798,103.022 154.109,103.905" id="Fill-545" fill="#0073AA"></path>
515
+ <path d="M89,100.033 C89,94.5 93.501,90 99.033,90 C102.414,90 105.546,91.686 107.41,94.511 L106.158,95.337 C104.572,92.934 101.909,91.5 99.033,91.5 C94.328,91.5 90.5,95.328 90.5,100.033 C90.5,104.738 92.9743652,108.234863 98.5073242,108.234863 L99.2976074,109.354492 C93.7656074,109.354492 89,105.565 89,100.033 Z" id="Fill-546" fill="#0073AA"></path>
516
+ <polygon id="Fill-547" points="0 109.5 2.739 109.5 2.739 108 0 108"></polygon>
517
+ <polygon id="Fill-548" fill="#0073AA" points="168 109.5 174.049 109.5 174.049 108 168 108"></polygon>
518
+ <polygon id="Fill-549" fill="#0073AA" points="3 109.842041 166.823 109.5 166.823 108 3 108.284424"></polygon>
519
+ <polygon id="Path" fill="#0073AA" points="69 49.5 70.398 49.5 70.398 48 69 48"></polygon>
520
+ <polygon id="Path" fill="#0073AA" points="73 49.5 74.399 49.5 74.399 48 73 48"></polygon>
521
+ <polygon id="Path" fill="#0073AA" points="77 49.5 78.398 49.5 78.398 48 77 48"></polygon>
522
+ <path d="M113.541,26.747 L112.949,28.113 L114.125,28.113 L113.541,26.747 Z M114.96,30.049 L114.522,29.034 L112.552,29.034 L112.115,30.049 L111,30.049 L113.03,25.349 L114.044,25.349 L116.076,30.049 L114.96,30.049 L114.96,30.049 Z" id="Fill-375" fill="#0073AA"></path>
523
+ <path d="M118.049,29.161 L118.768,29.161 C119.068,29.161 119.294,29.124 119.444,29.051 C119.594,28.977 119.669,28.831 119.669,28.614 C119.669,28.396 119.59,28.253 119.43,28.183 C119.271,28.114 119.017,28.079 118.668,28.079 L118.049,28.079 L118.049,29.161 Z M118.049,27.252 L118.547,27.252 C118.838,27.252 119.053,27.221 119.195,27.158 C119.337,27.095 119.407,26.959 119.407,26.751 C119.407,26.543 119.341,26.405 119.212,26.338 C119.082,26.271 118.862,26.237 118.553,26.237 L118.049,26.237 L118.049,27.252 Z M119.057,30.049 L117,30.049 L117,25.349 L118.829,25.349 C119.147,25.349 119.422,25.387 119.652,25.463 C119.884,25.54 120.056,25.643 120.174,25.773 C120.384,26.015 120.489,26.288 120.489,26.593 C120.489,26.961 120.371,27.235 120.133,27.413 L119.965,27.532 L119.797,27.609 C120.088,27.671 120.32,27.802 120.493,28.002 C120.665,28.202 120.752,28.449 120.752,28.745 C120.752,29.072 120.639,29.361 120.416,29.612 C120.155,29.904 119.703,30.049 119.057,30.049 L119.057,30.049 Z" id="Fill-376" fill="#0073AA"></path>
524
+ <path d="M123.441,29.228 C123.956,29.228 124.377,29.024 124.705,28.616 L125.377,29.309 C124.844,29.91 124.215,30.21 123.491,30.21 C122.767,30.21 122.171,29.981 121.702,29.524 C121.235,29.067 121,28.49 121,27.793 C121,27.096 121.238,26.515 121.716,26.048 C122.194,25.582 122.778,25.349 123.468,25.349 C124.238,25.349 124.884,25.643 125.405,26.229 L124.752,26.97 C124.42,26.557 124.008,26.351 123.515,26.351 C123.12,26.351 122.784,26.479 122.503,26.737 C122.223,26.995 122.082,27.343 122.082,27.779 C122.082,28.217 122.215,28.567 122.48,28.832 C122.743,29.097 123.065,29.228 123.441,29.228" id="Fill-377" fill="#0073AA"></path>
525
+ <polygon id="Fill-378" fill="#0073AA" points="98 25.849 107.862 25.849 107.862 24.349 98 24.349"></polygon>
526
+ <polygon id="Fill-379" fill="#0073AA" points="94 28.849 108.16 28.849 108.16 27.349 94 27.349"></polygon>
527
+ <polygon id="Fill-380" fill="#0073AA" points="90 31.849 107.974 31.849 107.974 30.349 90 30.349"></polygon>
528
+ <g id="Fill-455" transform="translate(31.435000, 49.500000)">
529
+ <path d="M21.582,12.02 C21.582,12.019 21.582,12.016 21.582,12.014 C21.582,12.016 21.582,12.018 21.582,12.02 M21.582,11.98 C21.582,11.978 21.581,11.976 21.581,11.973 C21.581,11.976 21.582,11.978 21.582,11.98 M21.581,11.895 C21.581,11.892 21.581,11.889 21.581,11.886 C21.581,11.889 21.581,11.892 21.581,11.895 M21.581,11.856 C21.581,11.853 21.581,11.848 21.581,11.844 C21.581,11.849 21.581,11.852 21.581,11.856 M21.58,11.817 C21.58,11.813 21.58,11.81 21.58,11.806 C21.58,11.81 21.58,11.813 21.58,11.817 M21.58,11.767 C21.58,11.757 21.58,11.747 21.58,11.737 C21.58,11.747 21.58,11.757 21.58,11.767" fill="#98C7E1"></path>
530
+ <path d="M31.179,28.396 L31.248,28.291 C31.253,28.295 31.259,28.298 31.265,28.302 C31.236,28.333 31.208,28.365 31.179,28.396" id="Fill-459" fill="#0073AA"></path>
531
+ <path d="M35.184,9.973 L32.05,16.551 C32.343,18.381 32.275,20.299 31.764,22.206 C29.821,29.455 22.37,33.756 15.122,31.813 C7.873,29.87 3.572,22.419 5.515,15.17 C7.458,7.922 14.909,3.621 22.157,5.564 C24.717,6.25 26.898,7.632 28.577,9.441 L35.184,9.973" id="Fill-460" fill="#8AC4E6"></path>
532
+ <path d="M18.619,5.845 C16.394,5.845 14.2,6.428 12.221,7.57 C9.252,9.285 7.128,12.053 6.24,15.365 C5.352,18.677 5.807,22.136 7.521,25.106 C9.236,28.076 12.004,30.2 15.316,31.088 C18.629,31.977 22.088,31.521 25.057,29.807 C28.027,28.092 30.151,25.324 31.039,22.012 C31.507,20.268 31.598,18.471 31.31,16.669 L31.273,16.439 L34.039,10.633 L28.227,10.165 L28.028,9.951 C26.381,8.177 24.283,6.91 21.963,6.288 C20.857,5.992 19.734,5.845 18.619,5.845 Z M18.663,33.032 C17.417,33.032 16.163,32.868 14.927,32.537 C11.228,31.545 8.136,29.173 6.222,25.856 C4.307,22.539 3.799,18.675 4.791,14.976 C5.782,11.277 8.155,8.185 11.471,6.271 C14.788,4.356 18.65,3.848 22.352,4.839 C24.85,5.509 27.116,6.847 28.924,8.716 L36.33,9.313 L32.827,16.666 C33.104,18.599 32.991,20.527 32.488,22.401 C31.497,26.1 29.124,29.191 25.807,31.105 C23.598,32.381 21.147,33.032 18.663,33.032 L18.663,33.032 Z" id="Fill-461" fill="#0073AA"></path>
533
+ <path d="M27.49,21.061 C28.76,16.322 25.857,11.426 21.006,10.125 C16.154,8.825 11.191,11.612 9.921,16.351 C8.651,21.09 11.554,25.986 16.405,27.287 C21.257,28.587 26.22,25.8 27.49,21.061" id="Fill-462" fill="#FFFFFF"></path>
534
+ <polyline id="Fill-463" fill="#0073AA" points="16.535 24.278 11.858 19.602 14.686 16.773 16.535 18.622 17.4762865 17.6807135 22.046 13.111 24.874 15.939 16.535 24.278 20.3554688 19.3138021"></polyline>
535
+ <polygon id="Fill-464" fill="#0073AA" points="18.243 3.306 19.743 3.306 19.743 0 18.243 0"></polygon>
536
+ <polyline id="Fill-465" fill="#0073AA" points="2.721 28.434 1.973 27.133 4.84 25.485 5.588 26.786 2.721 28.434"></polyline>
537
+ <polyline id="Fill-466" fill="#0073AA" points="0.749 23.964 0.362 22.515 3.556 21.664 3.943 23.113 0.749 23.964"></polyline>
538
+ <polyline id="Fill-467" fill="#0073AA" points="3.305 19.141 0 19.135 0.002 17.635 3.307 17.641 3.305 19.141"></polyline>
539
+ <polyline id="Fill-468" fill="#0073AA" points="3.717 15.139 0.526 14.277 0.917 12.829 4.108 13.69 3.717 15.139"></polyline>
540
+ <polyline id="Fill-469" fill="#0073AA" points="5.152 11.38 2.293 9.721 3.045 8.423 5.904 10.082 5.152 11.38"></polyline>
541
+ <polyline id="Fill-470" fill="#0073AA" points="7.511 8.121 5.178 5.778 6.241 4.719 8.574 7.062 7.511 8.121"></polyline>
542
+ <polyline id="Fill-471" fill="#0073AA" points="10.633 5.583 8.987 2.716 10.288 1.969 11.934 4.836 10.633 5.583"></polyline>
543
+ <polyline id="Fill-472" fill="#0073AA" points="14.307 3.94 13.459 0.745 14.908 0.36 15.756 3.556 14.307 3.94"></polyline>
544
+ </g>
545
+ <path d="M44.98,20.5 C40.855,20.5 37.5,23.855 37.5,27.979 C37.5,32.103 40.855,35.459 44.98,35.459 C49.104,35.459 52.46,32.103 52.46,27.979 C52.46,23.855 49.104,20.5 44.98,20.5 Z M44.98,36.959 C40.028,36.959 36,32.931 36,27.979 C36,23.028 40.028,19 44.98,19 C49.932,19 53.96,23.028 53.96,27.979 C53.96,32.931 49.932,36.959 44.98,36.959 L44.98,36.959 Z" id="Fill-699" fill="#0073AA"></path>
546
+ <path d="M48.272,36.215 L47,35.42 C48.243,33.432 48.928,30.825 48.928,28.078 C48.928,25.355 48.255,22.766 47.034,20.788 L48.31,20 C49.676,22.211 50.428,25.08 50.428,28.078 C50.428,31.102 49.662,33.992 48.272,36.215" id="Fill-700" fill="#0073AA"></path>
547
+ <path d="M42.158,36.216 C40.767,33.992 40,31.102 40,28.078 C40,25.084 40.753,22.215 42.119,20 L43.396,20.788 C42.174,22.769 41.5,25.358 41.5,28.078 C41.5,30.824 42.186,33.431 43.43,35.42 L42.158,36.216" id="Fill-701" fill="#0073AA"></path>
548
+ <polygon id="Fill-702" fill="#0073AA" points="44 36.459 45.5 36.459 45.5 20 44 20"></polygon>
549
+ <polygon id="Fill-703" fill="#0073AA" points="37 28.5 53.46 28.5 53.46 27 37 27"></polygon>
550
+ <polygon id="Fill-704" fill="#0073AA" points="38 24.5 52.212 24.5 52.212 23 38 23"></polygon>
551
+ <polygon id="Fill-705" fill="#0073AA" points="38 32.5 52.34 32.5 52.34 31 38 31"></polygon>
552
+ </g>
553
+ </symbol>
554
+
555
+
556
+ <symbol id="icon-child" width="199px" height="100px" viewBox="0 0 199 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
557
+ <defs></defs>
558
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
559
+ <path d="M162.238416,41.0256956 L161.782416,38.7086956 C161.569416,37.0636956 160.061416,35.9026956 158.416416,36.1156956 L123.618416,40.6336956 C121.972416,40.8476956 120.811416,42.3546956 121.025416,43.9996956 L127.394416,93.0586956 L166.852416,80.9746956 L162.238416,41.0256956" id="Fill-261" fill="#FFFFFF"></path>
560
+ <path d="M161.071,41.9176994 L160.615,39.6016994 C160.53,38.9556994 160.224,38.4246994 159.748,38.0576994 C159.27,37.6906994 158.681,37.5276994 158.082,37.6086994 L134.193,40.7096994 L134,39.2216994 L157.888,36.1196994 C159.944,35.8646994 161.828,37.3076994 162.095,39.3606994 L162.543,41.6286994 L161.071,41.9176994" id="Fill-262" fill="#0073AA"></path>
561
+ <path d="M131.89,98.5695 L169.208,98.5695 C170.252,98.5695 171.099,97.7225 171.099,96.6785 L171.099,44.9815 C171.099,43.9375 170.252,43.0905 169.208,43.0905 L131.89,43.0905 C130.846,43.0905 130,43.9375 130,44.9815 L130,96.6785 C130,97.7225 130.846,98.5695 131.89,98.5695" id="Fill-263" fill="#8AC4E6"></path>
562
+ <path d="M167.689,99.0695 L167.689,97.5695 C169.105,97.5695 170.256,96.4165 170.256,95.0005 L170.256,46.1595 C170.256,44.7435 169.105,43.5905 167.689,43.5905 L142,43.5905 L142,42.0905 L167.689,42.0905 C169.932,42.0905 171.756,43.9165 171.756,46.1595 L171.756,95.0005 C171.756,97.2445 169.932,99.0695 167.689,99.0695" id="Fill-264" fill="#0073AA"></path>
563
+ <polygon id="Fill-265" fill="#0073AA" points="168 49.5905 175.601 49.5905 175.601 48.0905 168 48.0905"></polygon>
564
+ <polygon id="Fill-266" fill="#0073AA" points="168 55.5905 175.601 55.5905 175.601 54.0905 168 54.0905"></polygon>
565
+ <polygon id="Fill-267" fill="#0073AA" points="168 60.5905 175.601 60.5905 175.601 59.0905 168 59.0905"></polygon>
566
+ <polygon id="Fill-268" fill="#0073AA" points="168 65.5905 175.601 65.5905 175.601 64.0905 168 64.0905"></polygon>
567
+ <polygon id="Fill-269" fill="#0073AA" points="168 71.5905 175.601 71.5905 175.601 70.0905 168 70.0905"></polygon>
568
+ <polygon id="Fill-270" fill="#0073AA" points="168 76.5905 175.601 76.5905 175.601 75.0905 168 75.0905"></polygon>
569
+ <polygon id="Fill-271" fill="#0073AA" points="168 82.5905 175.391 82.5905 175.391 81.0905 168 81.0905"></polygon>
570
+ <polygon id="Fill-272" fill="#0073AA" points="168 87.5905 175.391 87.5905 175.391 86.0905 168 86.0905"></polygon>
571
+ <polygon id="Fill-273" fill="#0073AA" points="168 92.5905 175.391 92.5905 175.391 91.0905 168 91.0905"></polygon>
572
+ <path d="M142,65.0595 C142,70.0125 146.016,74.0285 150.969,74.0285 C155.922,74.0285 159.938,70.0125 159.938,65.0595 C159.938,60.1065 155.922,56.0905 150.969,56.0905 C146.016,56.0905 142,60.1065 142,65.0595" id="Fill-274" fill="#FFFFFF"></path>
573
+ <path d="M150.718,56.5905 C146.186,56.5905 142.5,60.2775 142.5,64.8095 C142.5,69.3415 146.186,73.0285 150.718,73.0285 C155.25,73.0285 158.937,69.3415 158.937,64.8095 C158.937,60.2775 155.25,56.5905 150.718,56.5905 Z M150.718,74.5285 C145.359,74.5285 141,70.1695 141,64.8095 C141,59.4505 145.359,55.0905 150.718,55.0905 C156.078,55.0905 160.437,59.4505 160.437,64.8095 C160.437,70.1695 156.078,74.5285 150.718,74.5285 L150.718,74.5285 Z" id="Fill-275" fill="#0073AA"></path>
574
+ <path d="M43.984,22.8825 L43.984,97.5515 C43.984,97.9885 43.63,98.3435 43.193,98.3435 L32.792,98.3435 C32.354,98.3435 32,97.9885 32,97.5515 L32,22.8825 C32,22.4455 32.354,22.0905 32.792,22.0905 L43.193,22.0905 C43.63,22.0905 43.984,22.4455 43.984,22.8825" id="Fill-276" fill="#8AC4E6"></path>
575
+ <path d="M32.687,98.3435 L36.932,98.3435 L36.932,22.0905 L32.687,22.0905 C32.308,22.0905 32,22.4355 32,22.8605 L32,97.5745 C32,97.9995 32.308,98.3435 32.687,98.3435" id="Fill-277" fill="#E7F7FF"></path>
576
+ <path d="M32.5,98.2565 L31,98.2565 L31,23.6765 C31,22.8025 31.712,22.0905 32.586,22.0905 L42.898,22.0905 C43.773,22.0905 44.485,22.8025 44.485,23.6765 L44.485,29.9295 L42.985,29.9295 L42.985,23.6765 L42.898,23.5905 L32.586,23.5905 L32.5,23.6765 L32.5,98.2565" id="Fill-278" fill="#0073AA"></path>
577
+ <polygon id="Fill-279" fill="#0073AA" points="32 93.5905 37.519 93.5905 37.519 92.0905 32 92.0905"></polygon>
578
+ <polygon id="Fill-280" fill="#0073AA" points="32 85.5905 37.519 85.5905 37.519 84.0905 32 84.0905"></polygon>
579
+ <polygon id="Fill-281" fill="#0073AA" points="32 77.5905 37.519 77.5905 37.519 76.0905 32 76.0905"></polygon>
580
+ <polygon id="Fill-282" fill="#0073AA" points="32 69.5905 37.519 69.5905 37.519 68.0905 32 68.0905"></polygon>
581
+ <polygon id="Fill-283" fill="#0073AA" points="32 61.5905 37.519 61.5905 37.519 60.0905 32 60.0905"></polygon>
582
+ <polygon id="Fill-284" fill="#0073AA" points="32 53.5905 37.519 53.5905 37.519 52.0905 32 52.0905"></polygon>
583
+ <polygon id="Fill-285" fill="#0073AA" points="32 45.5905 37.519 45.5905 37.519 44.0905 32 44.0905"></polygon>
584
+ <polygon id="Fill-286" fill="#0073AA" points="32 37.5905 37.519 37.5905 37.519 36.0905 32 36.0905"></polygon>
585
+ <polygon id="Fill-287" fill="#0073AA" points="32 29.5905 37.519 29.5905 37.519 28.0905 32 28.0905"></polygon>
586
+ <path d="M183.024,39.5905 L178.75,39.5905 C178.336,39.5905 178,39.2545 178,38.8405 C178,38.4265 178.336,38.0905 178.75,38.0905 L183.024,38.0905 C183.438,38.0905 183.774,38.4265 183.774,38.8405 C183.774,39.2545 183.438,39.5905 183.024,39.5905" id="Fill-288" fill="#0073AA"></path>
587
+ <path d="M180.75,41.8645 C180.336,41.8645 180,41.5285 180,41.1145 L180,36.8405 C180,36.4255 180.336,36.0905 180.75,36.0905 C181.164,36.0905 181.5,36.4255 181.5,36.8405 L181.5,41.1145 C181.5,41.5285 181.164,41.8645 180.75,41.8645" id="Fill-289" fill="#0073AA"></path>
588
+ <path d="M77.024,20.5905 L72.75,20.5905 C72.336,20.5905 72,20.2545 72,19.8405 C72,19.4265 72.336,19.0905 72.75,19.0905 L77.024,19.0905 C77.438,19.0905 77.774,19.4265 77.774,19.8405 C77.774,20.2545 77.438,20.5905 77.024,20.5905" id="Fill-290" fill="#0073AA"></path>
589
+ <path d="M74.75,21.8645 C74.336,21.8645 74,21.5285 74,21.1145 L74,16.8405 C74,16.4265 74.336,16.0905 74.75,16.0905 C75.164,16.0905 75.5,16.4265 75.5,16.8405 L75.5,21.1145 C75.5,21.5285 75.164,21.8645 74.75,21.8645" id="Fill-291" fill="#0073AA"></path>
590
+ <path d="M136.74975,9.61225064 C136.55775,9.61225064 136.36575,9.53925064 136.21975,9.39225064 C135.92675,9.09925064 135.92675,8.62525064 136.21975,8.33225064 L139.24175,5.31025064 C139.53575,5.01625064 140.01075,5.01825064 140.30275,5.31025064 C140.59575,5.60325064 140.59575,6.07825064 140.30275,6.37125064 L137.28075,9.39225064 C137.13375,9.53925064 136.94275,9.61225064 136.74975,9.61225064" id="Fill-292" fill="#0073AA"></path>
591
+ <path d="M139.77275,9.61225 C139.57975,9.61225 139.38875,9.53925 139.24175,9.39225 L136.21975,6.37125 C135.92675,6.07825 135.92675,5.60325 136.21975,5.31025 C136.51275,5.01725 136.98775,5.01725 137.28075,5.31025 L140.30275,8.33225 C140.59575,8.62525 140.59575,9.09925 140.30275,9.39225 C140.15575,9.53925 139.96475,9.61225 139.77275,9.61225" id="Fill-293" fill="#0073AA"></path>
592
+ <path d="M1.74975,35.61325 C1.55775,35.61325 1.36575,35.54025 1.21975,35.39325 C0.92675,35.10025 0.92675,34.62625 1.21975,34.33325 L4.24175,31.31025 C4.53475,31.01725 5.00975,31.01725 5.30275,31.31025 C5.59575,31.60325 5.59575,32.07825 5.30275,32.37125 L2.27975,35.39325 C2.13375,35.54025 1.94275,35.61325 1.74975,35.61325" id="Fill-294" fill="#0073AA"></path>
593
+ <path d="M4.77275,35.61325 C4.57975,35.61325 4.38875,35.54025 4.24175,35.39325 L1.21975,32.37125 C0.92675,32.07825 0.92675,31.60325 1.21975,31.31025 C1.51275,31.01725 1.98675,31.01725 2.27975,31.31025 L5.30275,34.33325 C5.59575,34.62625 5.59575,35.10025 5.30275,35.39325 C5.15575,35.54025 4.96475,35.61325 4.77275,35.61325" id="Fill-295" fill="#0073AA"></path>
594
+ <polygon id="Fill-296" fill="#0073AA" points="60 1.5905 89.39 1.5905 89.39 0.0905 60 0.0905"></polygon>
595
+ <polygon id="Fill-297" fill="#0073AA" points="112 23.5905 141.39 23.5905 141.39 22.0905 112 22.0905"></polygon>
596
+ <polygon id="Fill-298" fill="#0073AA" points="76 7.5905 130.342 7.5905 130.342 6.0905 76 6.0905"></polygon>
597
+ <polygon id="Fill-299" fill="#0073AA" points="0.557 45.5905 16.48 45.5905 16.48 44.0905 0.557 44.0905"></polygon>
598
+ <polygon id="Fill-300" fill="#0073AA" points="179 46.5905 198.352 46.5905 198.352 45.0905 179 45.0905"></polygon>
599
+ <polygon id="Fill-301" fill="#0073AA" points="91 1.5905 94.57 1.5905 94.57 0.0905 91 0.0905"></polygon>
600
+ <path d="M105.693,31.4375 C105.693,32.1815 105.09,32.7845 104.347,32.7845 C103.603,32.7845 103,32.1815 103,31.4375 C103,30.6935 103.603,30.0905 104.347,30.0905 C105.09,30.0905 105.693,30.6935 105.693,31.4375" id="Fill-302" fill="#0073AA"></path>
601
+ <path d="M17.52,67.8505 C17.52,68.8215 16.732,69.6095 15.76,69.6095 C14.788,69.6095 14,68.8215 14,67.8505 C14,66.8785 14.788,66.0905 15.76,66.0905 C16.732,66.0905 17.52,66.8785 17.52,67.8505" id="Fill-303" fill="#0073AA"></path>
602
+ <path d="M39.52,14.8495 C39.52,15.8215 38.732,16.6095 37.76,16.6095 C36.788,16.6095 36,15.8215 36,14.8495 C36,13.8785 36.788,13.0905 37.76,13.0905 C38.732,13.0905 39.52,13.8785 39.52,14.8495" id="Fill-304" fill="#0073AA"></path>
603
+ <path d="M184.519,82.8505 C184.519,83.8225 183.731,84.6105 182.759,84.6105 C181.788,84.6105 181,83.8225 181,82.8505 C181,81.8785 181.788,81.0905 182.759,81.0905 C183.731,81.0905 184.519,81.8785 184.519,82.8505" id="Fill-305" fill="#0073AA"></path>
604
+ <path d="M132.248,98.2755 L131.95,45.3365 C131.95,41.3345 128.303,38.0905 123.804,38.0905 L48,38.0905 L48.298,98.3365 L132.248,98.2755" id="Fill-306" fill="#FFFFFF"></path>
605
+ <path d="M131.498,99.0295 L131.2,46.0905 C131.2,42.5045 127.882,39.5905 123.803,39.5905 L48,39.5905 L48,38.0905 L123.803,38.0905 C128.709,38.0905 132.7,41.6775 132.7,46.0865 L132.998,99.0215 L131.498,99.0295" id="Fill-307" fill="#0073AA"></path>
606
+ <path d="M124,98.4195 L132.457,98.4195 L132.457,35.9435 C132.457,32.7115 129.551,30.0905 125.966,30.0905 L124,30.0905 L124,98.4195" id="Fill-308" fill="#0073AA"></path>
607
+ <path d="M124.5,99.1685 L123,99.1685 L123,30.0905 L125.716,30.0905 C129.709,30.0905 132.957,33.3385 132.957,37.3305 L132.957,45.1685 L131.457,45.1685 L131.457,37.3305 C131.457,34.1655 128.881,31.5905 125.716,31.5905 L124.5,31.5905 L124.5,99.1685" id="Fill-309" fill="#0073AA"></path>
608
+ <path d="M50.457,98.4185 L42,98.4185 L42,35.9425 C42,32.7105 44.906,30.0905 48.49,30.0905 L50.457,30.0905 L50.457,98.4185" id="Fill-310" fill="#0073AA"></path>
609
+ <path d="M51.957,99.1685 L50.457,99.1685 L50.457,31.5905 L49.24,31.5905 C46.075,31.5905 43.5,34.1655 43.5,37.3305 L43.5,99.1685 L42,99.1685 L42,37.3305 C42,33.3385 45.248,30.0905 49.24,30.0905 L51.957,30.0905 L51.957,99.1685" id="Fill-311" fill="#0073AA"></path>
610
+ <path d="M102.63975,55.48925 C108.50475,61.35425 108.50475,70.86425 102.63975,76.73025 C96.77375,82.59525 87.26475,82.59525 81.39875,76.73025 C75.53375,70.86425 75.53375,61.35425 81.39875,55.48925 C87.26475,49.62425 96.77375,49.62425 102.63975,55.48925" id="Fill-312" fill="#E7F7FF"></path>
611
+ <path d="M86.597,59.7075 C85.994,59.6295 85.379,59.5905 84.77,59.5905 L84.733,58.0905 L84.77,58.0905 C85.443,58.0905 86.123,58.1345 86.789,58.2185 L86.597,59.7075 M81.042,60.0845 L80.652,58.6345 C81.316,58.4565 81.996,58.3205 82.674,58.2305 L82.871,59.7165 C82.258,59.7985 81.643,59.9215 81.042,60.0845 M90.198,60.6585 C89.625,60.4235 89.03,60.2235 88.427,60.0635 L88.812,58.6145 C89.477,58.7905 90.134,59.0105 90.766,59.2695 L90.198,60.6585 M77.605,61.5145 L76.851,60.2175 C77.444,59.8735 78.066,59.5645 78.7,59.3015 L79.276,60.6855 C78.703,60.9235 78.141,61.2025 77.605,61.5145 M93.423,62.5105 C92.932,62.1345 92.411,61.7875 91.871,61.4775 L92.62,60.1765 C93.214,60.5185 93.792,60.9035 94.335,61.3195 L93.423,62.5105 M74.68,63.7685 L73.595,62.7325 L73.62,62.7085 C74.094,62.2325 74.606,61.7825 75.139,61.3705 L76.057,62.5555 C75.574,62.9295 75.111,63.3385 74.68,63.7685 M96.092,65.1715 C95.717,64.6835 95.302,64.2115 94.86,63.7685 L95.889,62.6765 L95.92,62.7085 C96.409,63.1965 96.867,63.7175 97.282,64.2575 L96.092,65.1715 M72.395,66.7495 L71.094,66.0015 C71.435,65.4085 71.82,64.8315 72.239,64.2865 L73.428,65.1985 C73.05,65.6915 72.703,66.2135 72.395,66.7495 M97.955,68.3955 C97.719,67.8235 97.441,67.2595 97.13,66.7215 L98.429,65.9715 C98.773,66.5665 99.079,67.1885 99.342,67.8215 L97.955,68.3955 M70.977,70.1915 L69.528,69.8065 C69.703,69.1455 69.923,68.4875 70.185,67.8525 L71.572,68.4235 C71.336,68.9975 71.136,69.5915 70.977,70.1915 M98.918,71.9915 C98.837,71.3735 98.715,70.7585 98.555,70.1625 L100.004,69.7735 C100.181,70.4335 100.316,71.1135 100.405,71.7965 L98.918,71.9915 M69,73.8865 L69,73.8595 C69,73.1815 69.044,72.4985 69.13,71.8305 L70.619,72.0215 C70.54,72.6275 70.5,73.2455 70.5,73.8595 L69,73.8865 M100.408,75.9125 L98.919,75.7175 C98.999,75.1055 99.041,74.4805 99.041,73.8585 L100.54,73.8545 L100.54,73.8585 C100.54,74.5455 100.496,75.2355 100.408,75.9125 M69.542,77.9665 C69.365,77.3065 69.228,76.6275 69.138,75.9445 L70.624,75.7475 C70.706,76.3645 70.83,76.9805 70.991,77.5765 L69.542,77.9665 M99.347,79.8865 L97.96,79.3165 C98.198,78.7395 98.399,78.1445 98.558,77.5485 L100.007,77.9345 C99.831,78.5925 99.61,79.2505 99.347,79.8865 M71.124,81.7665 C70.778,81.1705 70.469,80.5475 70.207,79.9185 L71.592,79.3415 C71.829,79.9125 72.108,80.4745 72.42,81.0145 L71.124,81.7665 M97.289,83.4515 L96.099,82.5375 C96.48,82.0425 96.829,81.5205 97.136,80.9875 L98.435,81.7375 C98.095,82.3275 97.709,82.9035 97.289,83.4515 M73.636,85.0265 L73.62,85.0095 C73.139,84.5295 72.687,84.0155 72.274,83.4805 L73.461,82.5645 C73.835,83.0475 74.246,83.5135 74.68,83.9495 L73.636,85.0265 M94.382,86.3625 L93.466,85.1745 C93.955,84.7975 94.423,84.3855 94.86,83.9495 L95.929,85.0015 L95.92,85.0095 C95.439,85.4915 94.921,85.9465 94.382,86.3625 M76.902,87.5295 C76.307,87.1865 75.731,86.8015 75.188,86.3845 L76.1,85.1955 C76.591,85.5715 77.114,85.9205 77.652,86.2305 L76.902,87.5295 M90.818,88.4265 L90.244,87.0425 C90.817,86.8035 91.379,86.5255 91.916,86.2155 L92.668,87.5115 C92.075,87.8565 91.453,88.1645 90.818,88.4265 M80.706,89.0985 C80.04,88.9215 79.382,88.6995 78.751,88.4395 L79.324,87.0525 C79.894,87.2885 80.489,87.4885 81.092,87.6495 L80.706,89.0985 M86.843,89.4925 L86.646,88.0055 C87.262,87.9235 87.878,87.8015 88.477,87.6405 L88.866,89.0905 C88.204,89.2665 87.523,89.4025 86.843,89.4925 M84.786,89.6295 L84.77,89.6295 C84.089,89.6295 83.403,89.5845 82.73,89.4975 L82.923,88.0085 C83.533,88.0885 84.155,88.1295 84.77,88.1295 L84.786,89.6295" id="Fill-313" fill="#0073AA"></path>
612
+ <polygon id="Fill-314" fill="#0073AA" points="13 99.5905 176.821 99.5905 176.821 98.0905 13 98.0905"></polygon>
613
+ <polygon id="Fill-315" fill="#0073AA" points="8 99.5905 10.739 99.5905 10.739 98.0905 8 98.0905"></polygon>
614
+ <polygon id="Fill-316" fill="#0073AA" points="178 99.5905 184.05 99.5905 184.05 98.0905 178 98.0905"></polygon>
615
+ <path d="M123.193,97.8505 L79,97.8505 C79.009,97.4835 79.156,97.1265 79.427,96.8555 L87.587,88.6955 C88.03,88.6165 88.47,88.5185 88.902,88.4035 L88.685,87.5975 L95.741,80.5415 C96.952,80.2295 98.133,79.7635 99.25,79.1455 L99.383,79.1995 C99.406,79.1435 99.429,79.0885 99.451,79.0315 C100.578,78.3855 101.639,77.5805 102.601,76.6185 C104.569,74.6505 105.876,72.2725 106.524,69.7595 L123.193,53.0905 L123.193,66.3225 L99.522,89.9935 L123.193,89.9935 L123.193,97.8505 M91.952,85.5285 C91.415,85.8385 90.853,86.1165 90.28,86.3555 L90.854,87.7395 C91.489,87.4775 92.111,87.1695 92.704,86.8245 L91.952,85.5285 M94.896,83.2625 C94.459,83.6985 93.991,84.1105 93.502,84.4875 L94.418,85.6755 C94.957,85.2595 95.475,84.8045 95.956,84.3225 L95.965,84.3145 L94.896,83.2625 M97.172,80.3005 C96.865,80.8335 96.516,81.3555 96.135,81.8505 L97.325,82.7645 C97.745,82.2165 98.131,81.6405 98.471,81.0505 L97.172,80.3005" id="Fill-317" fill="#B4D7E7"></path>
616
+ <polyline id="Fill-318" fill="#0073AA" points="133.246 97.7965 133 97.7965 133 54.0905 133 54.0945 133.246 97.7965"></polyline>
617
+ <polyline id="Fill-319" fill="#4B97C6" points="132.707 98.3405 125 98.3405 125 90.4835 129.48 90.4835 129.48 60.8315 125 65.3125 125 52.0805 131.99 45.0905 132.707 45.0905 132.707 98.3405"></polyline>
618
+ <path d="M123,97.8075 L124.5,97.8075 L124.5,89.9505 L123,89.9505 L123,97.8075 Z M123,66.2795 L123,53.0475 L124.5,51.5475 L124.5,64.7795 L123,66.2795 L123,66.2795 Z M132.957,44.5575 L131.49,44.5575 L132.957,43.0905 L132.957,44.5575 L132.957,44.5575 Z" id="Fill-320" fill="#0073AA"></path>
619
+ <path d="M96,80.8725 L98.472,78.4005 C98.404,78.5885 98.332,78.7755 98.255,78.9605 L99.509,79.4765 C98.392,80.0945 97.211,80.5605 96,80.8725 M99.71,79.3625 C99.943,78.7785 100.142,78.1795 100.302,77.5785 L99.506,77.3665 L106.783,70.0905 C106.135,72.6035 104.828,74.9815 102.86,76.9495 C101.898,77.9115 100.837,78.7165 99.71,79.3625" id="Fill-321" fill="#93C5E0"></path>
620
+ <path d="M88,88.7505 L89.098,87.6525 L89.315,88.4585 C88.883,88.5735 88.443,88.6715 88,88.7505 M91.267,87.7945 L90.693,86.4105 C91.266,86.1715 91.828,85.8935 92.365,85.5835 L93.117,86.8795 C92.524,87.2245 91.902,87.5325 91.267,87.7945 M94.831,85.7305 L93.915,84.5425 C94.404,84.1655 94.872,83.7535 95.309,83.3175 L96.378,84.3695 L96.369,84.3775 C95.888,84.8595 95.37,85.3145 94.831,85.7305 M97.738,82.8195 L96.548,81.9055 C96.929,81.4105 97.278,80.8885 97.585,80.3555 L98.884,81.1055 C98.544,81.6955 98.158,82.2715 97.738,82.8195 M99.796,79.2545 L99.663,79.2005 L98.409,78.6845 C98.486,78.4995 98.558,78.3125 98.626,78.1245 L99.66,77.0905 L100.456,77.3025 C100.296,77.9035 100.097,78.5025 99.864,79.0865 C99.842,79.1435 99.819,79.1985 99.796,79.2545" id="Fill-322" fill="#0073AA"></path>
621
+ <path d="M132.400456,98.8405 L123.193456,98.8405 L123.193456,98.7865 L79.1894564,98.8175 L79.1124564,98.6885 C79.0314564,98.4945 78.9954564,98.2915 79.0004564,98.0905 L132.646456,98.0905 L132.650456,98.7755 L132.400456,98.7775 L132.400456,98.8405" id="Fill-323" fill="#0073AA"></path>
622
+ <path d="M99.9627403,91.2652403 L132.17474,91.2652403 L132.17474,59.0532403 L99.9627403,91.2652403 Z M140.03174,99.1222403 L82.7137403,99.1222403 C82.0787403,99.1222403 81.7617403,98.3552403 82.2097403,97.9062403 L138.81674,41.3002403 C139.26474,40.8522403 140.03174,41.1692403 140.03174,41.8042403 L140.03174,99.1222403 L140.03174,99.1222403 Z" id="Fill-324" fill="#E7F7FF"></path>
623
+ <path d="M102.522778,90.2654277 L132.173778,90.2654277 L132.173778,60.6134277 L102.522778,90.2654277 Z M133.673778,91.7654277 L98.901778,91.7654277 L133.673778,56.9924277 L133.673778,91.7654277 Z M140.031778,41.5534277 L83.489778,98.1864277 L140.031778,98.1234277 L140.031778,41.5534277 Z M141.531778,99.6224277 L83.462778,99.6224277 C82.868778,99.6224277 82.339778,99.2684277 82.112778,98.7204277 C81.884778,98.1724277 82.008778,97.5474277 82.427778,97.1274277 L139.034778,40.5204277 C139.453778,40.1004277 140.079778,39.9744277 140.627778,40.2034277 C141.176778,40.4294277 141.531778,40.9604277 141.531778,41.5534277 L141.531778,99.6224277 L141.531778,99.6224277 Z" id="Fill-325" fill="#0073AA"></path>
624
+ <polygon id="Fill-326" fill="#0073AA" points="90 98.9135 91.5 98.9135 91.5 95.0905 90 95.0905"></polygon>
625
+ <polygon id="Fill-327" fill="#0073AA" points="96 98.9135 97.5 98.9135 97.5 95.0905 96 95.0905"></polygon>
626
+ <polygon id="Fill-328" fill="#0073AA" points="103 98.9135 104.5 98.9135 104.5 95.0905 103 95.0905"></polygon>
627
+ <polygon id="Fill-329" fill="#0073AA" points="109 98.9135 110.5 98.9135 110.5 95.0905 109 95.0905"></polygon>
628
+ <polygon id="Fill-330" fill="#0073AA" points="115 98.9135 116.5 98.9135 116.5 95.0905 115 95.0905"></polygon>
629
+ <polygon id="Fill-331" fill="#0073AA" points="121 98.9135 122.5 98.9135 122.5 95.0905 121 95.0905"></polygon>
630
+ <polygon id="Fill-332" fill="#0073AA" points="128 98.9135 129.5 98.9135 129.5 95.0905 128 95.0905"></polygon>
631
+ <polygon id="Fill-333" fill="#0073AA" points="134 98.9135 135.5 98.9135 135.5 95.0905 134 95.0905"></polygon>
632
+ <polygon id="Fill-334" fill="#0073AA" points="137 92.5905 140.823 92.5905 140.823 91.0905 137 91.0905"></polygon>
633
+ <polygon id="Fill-335" fill="#0073AA" points="137 86.5905 140.823 86.5905 140.823 85.0905 137 85.0905"></polygon>
634
+ <polygon id="Fill-336" fill="#0073AA" points="137 79.5905 140.823 79.5905 140.823 78.0905 137 78.0905"></polygon>
635
+ <polygon id="Fill-337" fill="#0073AA" points="137 73.5905 140.823 73.5905 140.823 72.0905 137 72.0905"></polygon>
636
+ <polygon id="Fill-338" fill="#0073AA" points="137 67.5905 140.823 67.5905 140.823 66.0905 137 66.0905"></polygon>
637
+ <polygon id="Fill-339" fill="#0073AA" points="137 61.5905 140.823 61.5905 140.823 60.0905 137 60.0905"></polygon>
638
+ <polygon id="Fill-340" fill="#0073AA" points="137 54.5905 140.823 54.5905 140.823 53.0905 137 53.0905"></polygon>
639
+ <polygon id="Fill-341" fill="#0073AA" points="137 48.5905 140.823 48.5905 140.823 47.0905 137 47.0905"></polygon>
640
+ <path d="M22.578,98.8455 L26.813,98.8455 C27.132,98.8455 27.391,98.5865 27.391,98.2675 L27.391,37.2565 L27.338,37.0145 L25.22,32.4265 C25.013,31.9785 24.377,31.9785 24.171,32.4265 L22.053,37.0145 L22,37.2565 L22,98.2675 C22,98.5865 22.258,98.8455 22.578,98.8455" id="Fill-342" fill="#FFFFFF"></path>
641
+ <polygon id="Fill-343" fill="#62A6CF" points="22 92.8925 27.391 92.8925 27.391 39.0905 22 39.0905"></polygon>
642
+ <path d="M22.5,98.1695 L26.39,98.1695 L26.39,37.3685 L24.445,33.1535 L22.5,37.3685 L22.5,98.1695 Z M27.89,99.6695 L21,99.6695 L21,37.0385 L23.453,31.7255 C23.633,31.3345 24.014,31.0905 24.446,31.0905 C24.877,31.0905 25.258,31.3345 25.438,31.7255 L27.89,37.0385 L27.89,99.6695 L27.89,99.6695 Z" id="Fill-344" fill="#0073AA"></path>
643
+ <polygon id="Fill-345" fill="#0073AA" points="22 39.5905 27.577 39.5905 27.577 38.0905 22 38.0905"></polygon>
644
+ <polygon id="Fill-346" fill="#0073AA" points="22 93.5905 28.195 93.5905 28.195 92.0905 22 92.0905"></polygon>
645
+ </g>
646
+ </symbol>
647
+
648
+ </svg>
admin_section/js/jquery.timepicker.js ADDED
@@ -0,0 +1,1386 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * jquery-timepicker v1.11.14 - A jQuery timepicker plugin inspired by Google Calendar. It supports both mouse and keyboard navigation.
3
+ * Copyright (c) 2015 Jon Thornton - http://jonthornton.github.com/jquery-timepicker/
4
+ * License: MIT
5
+ */
6
+
7
+ (function(factory) {
8
+ if (
9
+ typeof exports === "object" &&
10
+ exports &&
11
+ typeof module === "object" &&
12
+ module &&
13
+ module.exports === exports
14
+ ) {
15
+ // Browserify. Attach to jQuery module.
16
+ factory(require("jquery"));
17
+ } else if (typeof define === "function" && define.amd) {
18
+ // AMD. Register as an anonymous module.
19
+ define(["jquery"], factory);
20
+ } else {
21
+ // Browser globals
22
+ factory(jQuery);
23
+ }
24
+ })(function($) {
25
+ var _ONE_DAY = 86400;
26
+ var _lang = {
27
+ am: "am",
28
+ pm: "pm",
29
+ AM: "AM",
30
+ PM: "PM",
31
+ decimal: ".",
32
+ mins: "mins",
33
+ hr: "hr",
34
+ hrs: "hrs"
35
+ };
36
+
37
+ var _DEFAULTS = {
38
+ appendTo: "body",
39
+ className: null,
40
+ closeOnWindowScroll: false,
41
+ disableTextInput: false,
42
+ disableTimeRanges: [],
43
+ disableTouchKeyboard: false,
44
+ durationTime: null,
45
+ forceRoundTime: false,
46
+ maxTime: null,
47
+ minTime: null,
48
+ noneOption: false,
49
+ orientation: "l",
50
+ roundingFunction: function(seconds, settings) {
51
+ if (seconds === null) {
52
+ return null;
53
+ } else if (typeof settings.step !== "number") {
54
+ // TODO: nearest fit irregular steps
55
+ return seconds;
56
+ } else {
57
+ var offset = seconds % (settings.step * 60); // step is in minutes
58
+
59
+ var start = settings.minTime || 0;
60
+
61
+ // adjust offset by start mod step so that the offset is aligned not to 00:00 but to the start
62
+ offset -= start % (settings.step * 60);
63
+
64
+ if (offset >= settings.step * 30) {
65
+ // if offset is larger than a half step, round up
66
+ seconds += settings.step * 60 - offset;
67
+ } else {
68
+ // round down
69
+ seconds -= offset;
70
+ }
71
+
72
+ return _moduloSeconds(seconds, settings);
73
+ }
74
+ },
75
+ scrollDefault: null,
76
+ selectOnBlur: false,
77
+ show2400: false,
78
+ showDuration: false,
79
+ showOn: ["click", "focus"],
80
+ showOnFocus: true,
81
+ step: 30,
82
+ stopScrollPropagation: false,
83
+ timeFormat: "g:ia",
84
+ typeaheadHighlight: true,
85
+ useSelect: false,
86
+ wrapHours: true
87
+ };
88
+
89
+ var methods = {
90
+ init: function(options) {
91
+ return this.each(function() {
92
+ var self = $(this);
93
+
94
+ // pick up settings from data attributes
95
+ var attributeOptions = [];
96
+ for (var key in _DEFAULTS) {
97
+ if (self.data(key)) {
98
+ attributeOptions[key] = self.data(key);
99
+ }
100
+ }
101
+
102
+ var settings = $.extend({}, _DEFAULTS, options, attributeOptions);
103
+
104
+ if (settings.lang) {
105
+ _lang = $.extend(_lang, settings.lang);
106
+ }
107
+
108
+ settings = _parseSettings(settings);
109
+ self.data("timepicker-settings", settings);
110
+ self.addClass("ui-timepicker-input");
111
+
112
+ if (settings.useSelect) {
113
+ _render(self);
114
+ } else {
115
+ self.prop("autocomplete", "off");
116
+ if (settings.showOn) {
117
+ for (var i in settings.showOn) {
118
+ self.on(settings.showOn[i] + ".timepicker", methods.show);
119
+ }
120
+ }
121
+ self.on("change.timepicker", _formatValue);
122
+ self.on("keydown.timepicker", _keydownhandler);
123
+ self.on("keyup.timepicker", _keyuphandler);
124
+ if (settings.disableTextInput) {
125
+ self.on("keydown.timepicker", _disableTextInputHandler);
126
+ }
127
+ self.on("cut.timepicker", _keyuphandler);
128
+ self.on("paste.timepicker", _keyuphandler);
129
+
130
+ _formatValue.call(self.get(0), null, "initial");
131
+ }
132
+ });
133
+ },
134
+
135
+ show: function(e) {
136
+ var self = $(this);
137
+ var settings = self.data("timepicker-settings");
138
+
139
+ if (e) {
140
+ e.preventDefault();
141
+ }
142
+
143
+ if (settings.useSelect) {
144
+ self.data("timepicker-list").focus();
145
+ return;
146
+ }
147
+
148
+ if (_hideKeyboard(self)) {
149
+ // block the keyboard on mobile devices
150
+ self.blur();
151
+ }
152
+
153
+ var list = self.data("timepicker-list");
154
+
155
+ // check if input is readonly
156
+ if (self.prop("readonly")) {
157
+ return;
158
+ }
159
+
160
+ // check if list needs to be rendered
161
+ if (
162
+ !list ||
163
+ list.length === 0 ||
164
+ typeof settings.durationTime === "function"
165
+ ) {
166
+ _render(self);
167
+ list = self.data("timepicker-list");
168
+ }
169
+
170
+ if (_isVisible(list)) {
171
+ return;
172
+ }
173
+
174
+ self.data("ui-timepicker-value", self.val());
175
+ _setSelected(self, list);
176
+
177
+ // make sure other pickers are hidden
178
+ methods.hide();
179
+
180
+ // position the dropdown relative to the input
181
+ list.show();
182
+ var listOffset = {};
183
+
184
+ if (settings.orientation.match(/r/)) {
185
+ // right-align the dropdown
186
+ listOffset.left =
187
+ self.offset().left +
188
+ self.outerWidth() -
189
+ list.outerWidth() +
190
+ parseInt(list.css("marginLeft").replace("px", ""), 10);
191
+ } else {
192
+ // left-align the dropdown
193
+ listOffset.left =
194
+ self.offset().left +
195
+ parseInt(list.css("marginLeft").replace("px", ""), 10);
196
+ }
197
+
198
+ var verticalOrientation;
199
+ if (settings.orientation.match(/t/)) {
200
+ verticalOrientation = "t";
201
+ } else if (settings.orientation.match(/b/)) {
202
+ verticalOrientation = "b";
203
+ } else if (
204
+ self.offset().top + self.outerHeight(true) + list.outerHeight() >
205
+ $(window).height() + $(window).scrollTop()
206
+ ) {
207
+ verticalOrientation = "t";
208
+ } else {
209
+ verticalOrientation = "b";
210
+ }
211
+
212
+ if (verticalOrientation == "t") {
213
+ // position the dropdown on top
214
+ list.addClass("ui-timepicker-positioned-top");
215
+ listOffset.top =
216
+ self.offset().top -
217
+ list.outerHeight() +
218
+ parseInt(list.css("marginTop").replace("px", ""), 10);
219
+ } else {
220
+ // put it under the input
221
+ list.removeClass("ui-timepicker-positioned-top");
222
+ listOffset.top =
223
+ self.offset().top +
224
+ self.outerHeight() +
225
+ parseInt(list.css("marginTop").replace("px", ""), 10);
226
+ }
227
+
228
+ list.offset(listOffset);
229
+
230
+ // position scrolling
231
+ var selected = list.find(".ui-timepicker-selected");
232
+
233
+ if (!selected.length) {
234
+ var timeInt = _time2int(_getTimeValue(self));
235
+ if (timeInt !== null) {
236
+ selected = _findRow(self, list, timeInt);
237
+ } else if (settings.scrollDefault) {
238
+ selected = _findRow(self, list, settings.scrollDefault());
239
+ }
240
+ }
241
+
242
+ // if not found or disabled, intelligently find first selectable element
243
+ if (!selected.length || selected.hasClass("ui-timepicker-disabled")) {
244
+ selected = list.find("li:not(.ui-timepicker-disabled):first");
245
+ }
246
+
247
+ if (selected && selected.length) {
248
+ var topOffset =
249
+ list.scrollTop() + selected.position().top - selected.outerHeight();
250
+ list.scrollTop(topOffset);
251
+ } else {
252
+ list.scrollTop(0);
253
+ }
254
+
255
+ // prevent scroll propagation
256
+ if (settings.stopScrollPropagation) {
257
+ $(
258
+ document
259
+ ).on("wheel.ui-timepicker", ".ui-timepicker-wrapper", function(e) {
260
+ e.preventDefault();
261
+ var currentScroll = $(this).scrollTop();
262
+ $(this).scrollTop(currentScroll + e.originalEvent.deltaY);
263
+ });
264
+ }
265
+
266
+ // attach close handlers
267
+ $(document).on(
268
+ "touchstart.ui-timepicker mousedown.ui-timepicker",
269
+ _closeHandler
270
+ );
271
+ $(window).on("resize.ui-timepicker", _closeHandler);
272
+ if (settings.closeOnWindowScroll) {
273
+ $(document).on("scroll.ui-timepicker", _closeHandler);
274
+ }
275
+
276
+ self.trigger("showTimepicker");
277
+
278
+ return this;
279
+ },
280
+
281
+ hide: function(e) {
282
+ var self = $(this);
283
+ var settings = self.data("timepicker-settings");
284
+
285
+ if (settings && settings.useSelect) {
286
+ self.blur();
287
+ }
288
+
289
+ $(".ui-timepicker-wrapper").each(function() {
290
+ var list = $(this);
291
+ if (!_isVisible(list)) {
292
+ return;
293
+ }
294
+
295
+ var self = list.data("timepicker-input");
296
+ var settings = self.data("timepicker-settings");
297
+
298
+ if (settings && settings.selectOnBlur) {
299
+ _selectValue(self);
300
+ }
301
+
302
+ list.hide();
303
+ self.trigger("hideTimepicker");
304
+ });
305
+
306
+ return this;
307
+ },
308
+
309
+ option: function(key, value) {
310
+ if (typeof key == "string" && typeof value == "undefined") {
311
+ return $(this).data("timepicker-settings")[key];
312
+ }
313
+
314
+ return this.each(function() {
315
+ var self = $(this);
316
+ var settings = self.data("timepicker-settings");
317
+ var list = self.data("timepicker-list");
318
+
319
+ if (typeof key == "object") {
320
+ settings = $.extend(settings, key);
321
+ } else if (typeof key == "string") {
322
+ settings[key] = value;
323
+ }
324
+
325
+ settings = _parseSettings(settings);
326
+
327
+ self.data("timepicker-settings", settings);
328
+
329
+ _formatValue.call(self.get(0), { type: "change" }, "initial");
330
+
331
+ if (list) {
332
+ list.remove();
333
+ self.data("timepicker-list", false);
334
+ }
335
+
336
+ if (settings.useSelect) {
337
+ _render(self);
338
+ }
339
+ });
340
+ },
341
+
342
+ getSecondsFromMidnight: function() {
343
+ return _time2int(_getTimeValue(this));
344
+ },
345
+
346
+ getTime: function(relative_date) {
347
+ var self = this;
348
+
349
+ var time_string = _getTimeValue(self);
350
+ if (!time_string) {
351
+ return null;
352
+ }
353
+
354
+ var offset = _time2int(time_string);
355
+ if (offset === null) {
356
+ return null;
357
+ }
358
+
359
+ if (!relative_date) {
360
+ relative_date = new Date();
361
+ }
362
+
363
+ // construct a Date from relative date, and offset's time
364
+ var time = new Date(relative_date);
365
+ time.setHours(offset / 3600);
366
+ time.setMinutes((offset % 3600) / 60);
367
+ time.setSeconds(offset % 60);
368
+ time.setMilliseconds(0);
369
+
370
+ return time;
371
+ },
372
+
373
+ isVisible: function() {
374
+ var self = this;
375
+ var list = self.data("timepicker-list");
376
+ return !!(list && _isVisible(list));
377
+ },
378
+
379
+ setTime: function(value) {
380
+ var self = this;
381
+ var settings = self.data("timepicker-settings");
382
+
383
+ if (settings.forceRoundTime) {
384
+ var prettyTime = _roundAndFormatTime(_time2int(value), settings);
385
+ } else {
386
+ var prettyTime = _int2time(_time2int(value), settings);
387
+ }
388
+
389
+ if (value && prettyTime === null && settings.noneOption) {
390
+ prettyTime = value;
391
+ }
392
+
393
+ _setTimeValue(self, prettyTime, "initial");
394
+ _formatValue.call(self.get(0), { type: "change" }, "initial");
395
+
396
+ if (self.data("timepicker-list")) {
397
+ _setSelected(self, self.data("timepicker-list"));
398
+ }
399
+
400
+ return this;
401
+ },
402
+
403
+ remove: function() {
404
+ var self = this;
405
+
406
+ // check if this element is a timepicker
407
+ if (!self.hasClass("ui-timepicker-input")) {
408
+ return;
409
+ }
410
+
411
+ var settings = self.data("timepicker-settings");
412
+ self.removeAttr("autocomplete", "off");
413
+ self.removeClass("ui-timepicker-input");
414
+ self.removeData("timepicker-settings");
415
+ self.off(".timepicker");
416
+
417
+ // timepicker-list won't be present unless the user has interacted with this timepicker
418
+ if (self.data("timepicker-list")) {
419
+ self.data("timepicker-list").remove();
420
+ }
421
+
422
+ if (settings.useSelect) {
423
+ self.show();
424
+ }
425
+
426
+ self.removeData("timepicker-list");
427
+
428
+ return this;
429
+ }
430
+ };
431
+
432
+ // private methods
433
+
434
+ function _isVisible(elem) {
435
+ var el = elem[0];
436
+ return el.offsetWidth > 0 && el.offsetHeight > 0;
437
+ }
438
+
439
+ function _parseSettings(settings) {
440
+ if (settings.minTime) {
441
+ settings.minTime = _time2int(settings.minTime);
442
+ }
443
+
444
+ if (settings.maxTime) {
445
+ settings.maxTime = _time2int(settings.maxTime);
446
+ }
447
+
448
+ if (settings.durationTime && typeof settings.durationTime !== "function") {
449
+ settings.durationTime = _time2int(settings.durationTime);
450
+ }
451
+
452
+ if (settings.scrollDefault == "now") {
453
+ settings.scrollDefault = function() {
454
+ return settings.roundingFunction(_time2int(new Date()), settings);
455
+ };
456
+ } else if (
457
+ settings.scrollDefault &&
458
+ typeof settings.scrollDefault != "function"
459
+ ) {
460
+ var val = settings.scrollDefault;
461
+ settings.scrollDefault = function() {
462
+ return settings.roundingFunction(_time2int(val), settings);
463
+ };
464
+ } else if (settings.minTime) {
465
+ settings.scrollDefault = function() {
466
+ return settings.roundingFunction(settings.minTime, settings);
467
+ };
468
+ }
469
+
470
+ if (
471
+ $.type(settings.timeFormat) === "string" &&
472
+ settings.timeFormat.match(/[gh]/)
473
+ ) {
474
+ settings._twelveHourTime = true;
475
+ }
476
+
477
+ if (
478
+ settings.showOnFocus === false &&
479
+ settings.showOn.indexOf("focus") != -1
480
+ ) {
481
+ settings.showOn.splice(settings.showOn.indexOf("focus"), 1);
482
+ }
483
+
484
+ if (settings.disableTimeRanges.length > 0) {
485
+ // convert string times to integers
486
+ for (var i in settings.disableTimeRanges) {
487
+ settings.disableTimeRanges[i] = [
488
+ _time2int(settings.disableTimeRanges[i][0]),
489
+ _time2int(settings.disableTimeRanges[i][1])
490
+ ];
491
+ }
492
+
493
+ // sort by starting time
494
+ settings.disableTimeRanges = settings.disableTimeRanges.sort(function(
495
+ a,
496
+ b
497
+ ) {
498
+ return a[0] - b[0];
499
+ });
500
+
501
+ // merge any overlapping ranges
502
+ for (var i = settings.disableTimeRanges.length - 1; i > 0; i--) {
503
+ if (
504
+ settings.disableTimeRanges[i][0] <=
505
+ settings.disableTimeRanges[i - 1][1]
506
+ ) {
507
+ settings.disableTimeRanges[i - 1] = [
508
+ Math.min(
509
+ settings.disableTimeRanges[i][0],
510
+ settings.disableTimeRanges[i - 1][0]
511
+ ),
512
+ Math.max(
513
+ settings.disableTimeRanges[i][1],
514
+ settings.disableTimeRanges[i - 1][1]
515
+ )
516
+ ];
517
+ settings.disableTimeRanges.splice(i, 1);
518
+ }
519
+ }
520
+ }
521
+
522
+ return settings;
523
+ }
524
+
525
+ function _render(self) {
526
+ var settings = self.data("timepicker-settings");
527
+ var list = self.data("timepicker-list");
528
+
529
+ if (list && list.length) {
530
+ list.remove();
531
+ self.data("timepicker-list", false);
532
+ }
533
+
534
+ if (settings.useSelect) {
535
+ list = $("<select />", { class: "ui-timepicker-select" });
536
+ if (self.attr('name')) {
537
+ list.attr('name', 'ui-timepicker-' + self.attr('name'));
538
+ }
539
+ var wrapped_list = list;
540
+ } else {
541
+ list = $("<ul />", { class: "ui-timepicker-list" });
542
+
543
+ var wrapped_list = $("<div />", {
544
+ class: "ui-timepicker-wrapper",
545
+ tabindex: -1
546
+ });
547
+ wrapped_list.css({ display: "none", position: "absolute" }).append(list);
548
+ }
549
+
550
+ if (settings.noneOption) {
551
+ if (settings.noneOption === true) {
552
+ settings.noneOption = settings.useSelect ? "Time..." : "None";
553
+ }
554
+
555
+ if ($.isArray(settings.noneOption)) {
556
+ for (var i in settings.noneOption) {
557
+ if (parseInt(i, 10) == i) {
558
+ var noneElement = _generateNoneElement(
559
+ settings.noneOption[i],
560
+ settings.useSelect
561
+ );
562
+ list.append(noneElement);
563
+ }
564
+ }
565
+ } else {
566
+ var noneElement = _generateNoneElement(
567
+ settings.noneOption,
568
+ settings.useSelect
569
+ );
570
+ list.append(noneElement);
571
+ }
572
+ }
573
+
574
+ if (settings.className) {
575
+ wrapped_list.addClass(settings.className);
576
+ }
577
+
578
+ if (
579
+ (settings.minTime !== null || settings.durationTime !== null) &&
580
+ settings.showDuration
581
+ ) {
582
+ var stepval =
583
+ typeof settings.step == "function" ? "function" : settings.step;
584
+ wrapped_list.addClass("ui-timepicker-with-duration");
585
+ wrapped_list.addClass("ui-timepicker-step-" + settings.step);
586
+ }
587
+
588
+ var durStart = settings.minTime;
589
+ if (typeof settings.durationTime === "function") {
590
+ durStart = _time2int(settings.durationTime());
591
+ } else if (settings.durationTime !== null) {
592
+ durStart = settings.durationTime;
593
+ }
594
+ var start = settings.minTime !== null ? settings.minTime : 0;
595
+ var end =
596
+ settings.maxTime !== null ? settings.maxTime : start + _ONE_DAY - 1;
597
+
598
+ if (end < start) {
599
+ // make sure the end time is greater than start time, otherwise there will be no list to show
600
+ end += _ONE_DAY;
601
+ }
602
+
603
+ if (
604
+ end === _ONE_DAY - 1 &&
605
+ $.type(settings.timeFormat) === "string" &&
606
+ settings.show2400
607
+ ) {
608
+ // show a 24:00 option when using military time
609
+ end = _ONE_DAY;
610
+ }
611
+
612
+ var dr = settings.disableTimeRanges;
613
+ var drCur = 0;
614
+ var drLen = dr.length;
615
+
616
+ var stepFunc = settings.step;
617
+ if (typeof stepFunc != "function") {
618
+ stepFunc = function() {
619
+ return settings.step;
620
+ };
621
+ }
622
+
623
+ for (var i = start, j = 0; i <= end; j++, i += stepFunc(j) * 60) {
624
+ var timeInt = i;
625
+ var timeString = _int2time(timeInt, settings);
626
+
627
+ if (settings.useSelect) {
628
+ var row = $("<option />", { value: timeString });
629
+ row.text(timeString);
630
+ } else {
631
+ var row = $("<li />");
632
+ row.addClass(
633
+ timeInt % _ONE_DAY < _ONE_DAY / 2
634
+ ? "ui-timepicker-am"
635
+ : "ui-timepicker-pm"
636
+ );
637
+ row.data("time", _moduloSeconds(timeInt, settings));
638
+ row.text(timeString);
639
+ }
640
+
641
+ if (
642
+ (settings.minTime !== null || settings.durationTime !== null) &&
643
+ settings.showDuration
644
+ ) {
645
+ var durationString = _int2duration(i - durStart, settings.step);
646
+ if (settings.useSelect) {
647
+ row.text(row.text() + " (" + durationString + ")");
648
+ } else {
649
+ var duration = $("<span />", { class: "ui-timepicker-duration" });
650
+ duration.text(" (" + durationString + ")");
651
+ row.append(duration);
652
+ }
653
+ }
654
+
655
+ if (drCur < drLen) {
656
+ if (timeInt >= dr[drCur][1]) {
657
+ drCur += 1;
658
+ }
659
+
660
+ if (dr[drCur] && timeInt >= dr[drCur][0] && timeInt < dr[drCur][1]) {
661
+ if (settings.useSelect) {
662
+ row.prop("disabled", true);
663
+ } else {
664
+ row.addClass("ui-timepicker-disabled");
665
+ }
666
+ }
667
+ }
668
+
669
+ list.append(row);
670
+ }
671
+
672
+ wrapped_list.data("timepicker-input", self);
673
+ self.data("timepicker-list", wrapped_list);
674
+
675
+ if (settings.useSelect) {
676
+ if (self.val()) {
677
+ list.val(_roundAndFormatTime(_time2int(self.val()), settings));
678
+ }
679
+
680
+ list.on("focus", function() {
681
+ $(this)
682
+ .data("timepicker-input")
683
+ .trigger("showTimepicker");
684
+ });
685
+ list.on("blur", function() {
686
+ $(this)
687
+ .data("timepicker-input")
688
+ .trigger("hideTimepicker");
689
+ });
690
+ list.on("change", function() {
691
+ _setTimeValue(self, $(this).val(), "select");
692
+ });
693
+
694
+ _setTimeValue(self, list.val(), "initial");
695
+ self.hide().after(list);
696
+ } else {
697
+ var appendTo = settings.appendTo;
698
+ if (typeof appendTo === "string") {
699
+ appendTo = $(appendTo);
700
+ } else if (typeof appendTo === "function") {
701
+ appendTo = appendTo(self);
702
+ }
703
+ appendTo.append(wrapped_list);
704
+ _setSelected(self, list);
705
+
706
+ list.on("mousedown click", "li", function(e) {
707
+ // hack: temporarily disable the focus handler
708
+ // to deal with the fact that IE fires 'focus'
709
+ // events asynchronously
710
+ self.off("focus.timepicker");
711
+ self.on("focus.timepicker-ie-hack", function() {
712
+ self.off("focus.timepicker-ie-hack");
713
+ self.on("focus.timepicker", methods.show);
714
+ });
715
+
716
+ if (!_hideKeyboard(self)) {
717
+ self[0].focus();
718
+ }
719
+
720
+ // make sure only the clicked row is selected
721
+ list.find("li").removeClass("ui-timepicker-selected");
722
+ $(this).addClass("ui-timepicker-selected");
723
+
724
+ if (_selectValue(self)) {
725
+ self.trigger("hideTimepicker");
726
+
727
+ list.on("mouseup.timepicker click.timepicker", "li", function(e) {
728
+ list.off("mouseup.timepicker click.timepicker");
729
+ wrapped_list.hide();
730
+ });
731
+ }
732
+ });
733
+ }
734
+ }
735
+
736
+ function _generateNoneElement(optionValue, useSelect) {
737
+ var label, className, value;
738
+
739
+ if (typeof optionValue == "object") {
740
+ label = optionValue.label;
741
+ className = optionValue.className;
742
+ value = optionValue.value;
743
+ } else if (typeof optionValue == "string") {
744
+ label = optionValue;
745
+ value = '';
746
+ } else {
747
+ $.error("Invalid noneOption value");
748
+ }
749
+
750
+ if (useSelect) {
751
+ return $("<option />", {
752
+ value: value,
753
+ class: className,
754
+ text: label
755
+ });
756
+ } else {
757
+ return $("<li />", {
758
+ class: className,
759
+ text: label
760
+ }).data("time", String(value));
761
+ }
762
+ }
763
+
764
+ function _roundAndFormatTime(seconds, settings) {
765
+ seconds = settings.roundingFunction(seconds, settings);
766
+ if (seconds !== null) {
767
+ return _int2time(seconds, settings);
768
+ }
769
+ }
770
+
771
+ // event handler to decide whether to close timepicker
772
+ function _closeHandler(e) {
773
+ if (e.target == window) {
774
+ // mobile Chrome fires focus events against window for some reason
775
+ return;
776
+ }
777
+
778
+ var target = $(e.target);
779
+
780
+ if (
781
+ target.closest(".ui-timepicker-input").length ||
782
+ target.closest(".ui-timepicker-wrapper").length
783
+ ) {
784
+ // active timepicker was focused. ignore
785
+ return;
786
+ }
787
+
788
+ methods.hide();
789
+ $(document).unbind(".ui-timepicker");
790
+ $(window).unbind(".ui-timepicker");
791
+ }
792
+
793
+ function _hideKeyboard(self) {
794
+ var settings = self.data("timepicker-settings");
795
+ return (
796
+ (window.navigator.msMaxTouchPoints || "ontouchstart" in document) &&
797
+ settings.disableTouchKeyboard
798
+ );
799
+ }
800
+
801
+ function _findRow(self, list, value) {
802
+ if (!value && value !== 0) {
803
+ return false;
804
+ }
805
+
806
+ var settings = self.data("timepicker-settings");
807
+ var out = false;
808
+ var value = settings.roundingFunction(value, settings);
809
+
810
+ // loop through the menu items
811
+ list.find("li").each(function(i, obj) {
812
+ var jObj = $(obj);
813
+ if (typeof jObj.data("time") != "number") {
814
+ return;
815
+ }
816
+
817
+ if (jObj.data("time") == value) {
818
+ out = jObj;
819
+ return false;
820
+ }
821
+ });
822
+
823
+ return out;
824
+ }
825
+
826
+ function _setSelected(self, list) {
827
+ list.find("li").removeClass("ui-timepicker-selected");
828
+
829
+ var settings = self.data("timepicker-settings");
830
+ var timeValue = _time2int(_getTimeValue(self), settings);
831
+ if (timeValue === null) {
832
+ return;
833
+ }
834
+
835
+ var selected = _findRow(self, list, timeValue);
836
+ if (selected) {
837
+ var topDelta = selected.offset().top - list.offset().top;
838
+
839
+ if (
840
+ topDelta + selected.outerHeight() > list.outerHeight() ||
841
+ topDelta < 0
842
+ ) {
843
+ list.scrollTop(
844
+ list.scrollTop() + selected.position().top - selected.outerHeight()
845
+ );
846
+ }
847
+
848
+ if (settings.forceRoundTime || selected.data("time") === timeValue) {
849
+ selected.addClass("ui-timepicker-selected");
850
+ }
851
+ }
852
+ }
853
+
854
+ function _formatValue(e, origin) {
855
+ if (origin == "timepicker") {
856
+ return;
857
+ }
858
+
859
+ var self = $(this);
860
+
861
+ if (this.value === "") {
862
+ _setTimeValue(self, null, origin);
863
+ return;
864
+ }
865
+
866
+ if (self.is(":focus") && (!e || e.type != "change")) {
867
+ return;
868
+ }
869
+
870
+ var settings = self.data("timepicker-settings");
871
+ var seconds = _time2int(this.value, settings);
872
+
873
+ if (seconds === null) {
874
+ self.trigger("timeFormatError");
875
+ return;
876
+ }
877
+
878
+ var rangeError = false;
879
+ // check that the time in within bounds
880
+ if (
881
+ settings.minTime !== null &&
882
+ settings.maxTime !== null &&
883
+ (seconds < settings.minTime || seconds > settings.maxTime)
884
+ ) {
885
+ rangeError = true;
886
+ }
887
+
888
+ // check that time isn't within disabled time ranges
889
+ $.each(settings.disableTimeRanges, function() {
890
+ if (seconds >= this[0] && seconds < this[1]) {
891
+ rangeError = true;
892
+ return false;
893
+ }
894
+ });
895
+
896
+ if (settings.forceRoundTime) {
897
+ var roundSeconds = settings.roundingFunction(seconds, settings);
898
+ if (roundSeconds != seconds) {
899
+ seconds = roundSeconds;
900
+ origin = null;
901
+ }
902
+ }
903
+
904
+ var prettyTime = _int2time(seconds, settings);
905
+
906
+ if (rangeError) {
907
+ if (
908
+ _setTimeValue(self, prettyTime, "error") ||
909
+ (e && e.type == "change")
910
+ ) {
911
+ self.trigger("timeRangeError");
912
+ }
913
+ } else {
914
+ _setTimeValue(self, prettyTime, origin);
915
+ }
916
+ }
917
+
918
+ function _getTimeValue(self) {
919
+ if (self.is("input")) {
920
+ return self.val();
921
+ } else {
922
+ // use the element's data attributes to store values
923
+ return self.data("ui-timepicker-value");
924
+ }
925
+ }
926
+
927
+ function _setTimeValue(self, value, source) {
928
+ if (self.is("input")) {
929
+ self.val(value);
930
+
931
+ var settings = self.data("timepicker-settings");
932
+ if (settings.useSelect && source != "select" && self.data("timepicker-list")) {
933
+ self
934
+ .data("timepicker-list")
935
+ .val(_roundAndFormatTime(_time2int(value), settings));
936
+ }
937
+ }
938
+
939
+ if (self.data("ui-timepicker-value") != value) {
940
+ self.data("ui-timepicker-value", value);
941
+ if (source == "select") {
942
+ self
943
+ .trigger("selectTime")
944
+ .trigger("changeTime")
945
+ .trigger("change", "timepicker");
946
+ } else if (["error", "initial"].indexOf(source) == -1) {
947
+ self.trigger("changeTime");
948
+ }
949
+
950
+ return true;
951
+ } else {
952
+ if (["error", "initial"].indexOf(source) == -1) {
953
+ self.trigger("selectTime");
954
+ }
955
+ return false;
956
+ }
957
+ }
958
+
959
+ /*
960
+ * Filter freeform input
961
+ */
962
+ function _disableTextInputHandler(e) {
963
+ switch (e.keyCode) {
964
+ case 13: // return
965
+ case 9: //tab
966
+ return;
967
+
968
+ default:
969
+ e.preventDefault();
970
+ }
971
+ }
972
+
973
+ /*
974
+ * Keyboard navigation via arrow keys
975
+ */
976
+ function _keydownhandler(e) {
977
+ var self = $(this);
978
+ var list = self.data("timepicker-list");
979
+
980
+ if (!list || !_isVisible(list)) {
981
+ if (e.keyCode == 40) {
982
+ // show the list!
983
+ methods.show.call(self.get(0));
984
+ list = self.data("timepicker-list");
985
+ if (!_hideKeyboard(self)) {
986
+ self.focus();
987
+ }
988
+ } else {
989
+ return true;
990
+ }
991
+ }
992
+
993
+ switch (e.keyCode) {
994
+ case 13: // return
995
+ if (_selectValue(self)) {
996
+ _formatValue.call(self.get(0), { type: "change" });
997
+ methods.hide.apply(this);
998
+ }
999
+
1000
+ e.preventDefault();
1001
+ return false;
1002
+
1003
+ case 38: // up
1004
+ var selected = list.find(".ui-timepicker-selected");
1005
+
1006
+ if (!selected.length) {
1007
+ list.find("li").each(function(i, obj) {
1008
+ if ($(obj).position().top > 0) {
1009
+ selected = $(obj);
1010
+ return false;
1011
+ }
1012
+ });
1013
+ selected.addClass("ui-timepicker-selected");
1014
+ } else if (!selected.is(":first-child")) {
1015
+ selected.removeClass("ui-timepicker-selected");
1016
+ selected.prev().addClass("ui-timepicker-selected");
1017
+
1018
+ if (selected.prev().position().top < selected.outerHeight()) {
1019
+ list.scrollTop(list.scrollTop() - selected.outerHeight());
1020
+ }
1021
+ }
1022
+
1023
+ return false;
1024
+
1025
+ case 40: // down
1026
+ selected = list.find(".ui-timepicker-selected");
1027
+
1028
+ if (selected.length === 0) {
1029
+ list.find("li").each(function(i, obj) {
1030
+ if ($(obj).position().top > 0) {
1031
+ selected = $(obj);
1032
+ return false;
1033
+ }
1034
+ });
1035
+
1036
+ selected.addClass("ui-timepicker-selected");
1037
+ } else if (!selected.is(":last-child")) {
1038
+ selected.removeClass("ui-timepicker-selected");
1039
+ selected.next().addClass("ui-timepicker-selected");
1040
+
1041
+ if (
1042
+ selected.next().position().top + 2 * selected.outerHeight() >
1043
+ list.outerHeight()
1044
+ ) {
1045
+ list.scrollTop(list.scrollTop() + selected.outerHeight());
1046
+ }
1047
+ }
1048
+
1049
+ return false;
1050
+
1051
+ case 27: // escape
1052
+ list.find("li").removeClass("ui-timepicker-selected");
1053
+ methods.hide();
1054
+ break;
1055
+
1056
+ case 9: //tab
1057
+ methods.hide();
1058
+ break;
1059
+
1060
+ default:
1061
+ return true;
1062
+ }
1063
+ }
1064
+
1065
+ /*
1066
+ * Time typeahead
1067
+ */
1068
+ function _keyuphandler(e) {
1069
+ var self = $(this);
1070
+ var list = self.data("timepicker-list");
1071
+ var settings = self.data("timepicker-settings");
1072
+
1073
+ if (!list || !_isVisible(list) || settings.disableTextInput) {
1074
+ return true;
1075
+ }
1076
+
1077
+ if (e.type === "paste" || e.type === "cut") {
1078
+ setTimeout(function() {
1079
+ if (settings.typeaheadHighlight) {
1080
+ _setSelected(self, list);
1081
+ } else {
1082
+ list.hide();
1083
+ }
1084
+ }, 0);
1085
+ return;
1086
+ }
1087
+
1088
+ switch (e.keyCode) {
1089
+ case 96: // numpad numerals
1090
+ case 97:
1091
+ case 98:
1092
+ case 99:
1093
+ case 100:
1094
+ case 101:
1095
+ case 102:
1096
+ case 103:
1097
+ case 104:
1098
+ case 105:
1099
+ case 48: // numerals
1100
+ case 49:
1101
+ case 50:
1102
+ case 51:
1103
+ case 52:
1104
+ case 53:
1105
+ case 54:
1106
+ case 55:
1107
+ case 56:
1108
+ case 57:
1109
+ case 65: // a
1110
+ case 77: // m
1111
+ case 80: // p
1112
+ case 186: // colon
1113
+ case 8: // backspace
1114
+ case 46: // delete
1115
+ if (settings.typeaheadHighlight) {
1116
+ _setSelected(self, list);
1117
+ } else {
1118
+ list.hide();
1119
+ }
1120
+ break;
1121
+ }
1122
+ }
1123
+
1124
+ function _selectValue(self) {
1125
+ var settings = self.data("timepicker-settings");
1126
+ var list = self.data("timepicker-list");
1127
+ var timeValue = null;
1128
+
1129
+ var cursor = list.find(".ui-timepicker-selected");
1130
+
1131
+ if (cursor.hasClass("ui-timepicker-disabled")) {
1132
+ return false;
1133
+ }
1134
+
1135
+ if (cursor.length) {
1136
+ // selected value found
1137
+ timeValue = cursor.data("time");
1138
+ }
1139
+
1140
+ if (timeValue !== null) {
1141
+ if (typeof timeValue != "string") {
1142
+ timeValue = _int2time(timeValue, settings);
1143
+ }
1144
+
1145
+ _setTimeValue(self, timeValue, "select");
1146
+ }
1147
+
1148
+ return true;
1149
+ }
1150
+
1151
+ function _int2duration(seconds, step) {
1152
+ seconds = Math.abs(seconds);
1153
+ var minutes = Math.round(seconds / 60),
1154
+ duration = [],
1155
+ hours,
1156
+ mins;
1157
+
1158
+ if (minutes < 60) {
1159
+ // Only show (x mins) under 1 hour
1160
+ duration = [minutes, _lang.mins];
1161
+ } else {
1162
+ hours = Math.floor(minutes / 60);
1163
+ mins = minutes % 60;
1164
+
1165
+ // Show decimal notation (eg: 1.5 hrs) for 30 minute steps
1166
+ if (step == 30 && mins == 30) {
1167
+ hours += _lang.decimal + 5;
1168
+ }
1169
+
1170
+ duration.push(hours);
1171
+ duration.push(hours == 1 ? _lang.hr : _lang.hrs);
1172
+
1173
+ // Show remainder minutes notation (eg: 1 hr 15 mins) for non-30 minute steps
1174
+ // and only if there are remainder minutes to show
1175
+ if (step != 30 && mins) {
1176
+ duration.push(mins);
1177
+ duration.push(_lang.mins);
1178
+ }
1179
+ }
1180
+
1181
+ return duration.join(" ");
1182
+ }
1183
+
1184
+ function _int2time(timeInt, settings) {
1185
+ if (typeof timeInt != "number") {
1186
+ return null;
1187
+ }
1188
+
1189
+ var seconds = parseInt(timeInt % 60),
1190
+ minutes = parseInt((timeInt / 60) % 60),
1191
+ hours = parseInt((timeInt / (60 * 60)) % 24);
1192
+
1193
+ var time = new Date(1970, 0, 2, hours, minutes, seconds, 0);
1194
+
1195
+ if (isNaN(time.getTime())) {
1196
+ return null;
1197
+ }
1198
+
1199
+ if ($.type(settings.timeFormat) === "function") {
1200
+ return settings.timeFormat(time);
1201
+ }
1202
+
1203
+ var output = "";
1204
+ var hour, code;
1205
+ for (var i = 0; i < settings.timeFormat.length; i++) {
1206
+ code = settings.timeFormat.charAt(i);
1207
+ switch (code) {
1208
+ case "a":
1209
+ output += time.getHours() > 11 ? _lang.pm : _lang.am;
1210
+ break;
1211
+
1212
+ case "A":
1213
+ output += time.getHours() > 11 ? _lang.PM : _lang.AM;
1214
+ break;
1215
+
1216
+ case "g":
1217
+ hour = time.getHours() % 12;
1218
+ output += hour === 0 ? "12" : hour;
1219
+ break;
1220
+
1221
+ case "G":
1222
+ hour = time.getHours();
1223
+ if (timeInt === _ONE_DAY) hour = settings.show2400 ? 24 : 0;
1224
+ output += hour;
1225
+ break;
1226
+
1227
+ case "h":
1228
+ hour = time.getHours() % 12;
1229
+
1230
+ if (hour !== 0 && hour < 10) {
1231
+ hour = "0" + hour;
1232
+ }
1233
+
1234
+ output += hour === 0 ? "12" : hour;
1235
+ break;
1236
+
1237
+ case "H":
1238
+ hour = time.getHours();
1239
+ if (timeInt === _ONE_DAY) hour = settings.show2400 ? 24 : 0;
1240
+ output += hour > 9 ? hour : "0" + hour;
1241
+ break;
1242
+
1243
+ case "i":
1244
+ var minutes = time.getMinutes();
1245
+ output += minutes > 9 ? minutes : "0" + minutes;
1246
+ break;
1247
+
1248
+ case "s":
1249
+ seconds = time.getSeconds();
1250
+ output += seconds > 9 ? seconds : "0" + seconds;
1251
+ break;
1252
+
1253
+ case "\\":
1254
+ // escape character; add the next character and skip ahead
1255
+ i++;
1256
+ output += settings.timeFormat.charAt(i);
1257
+ break;
1258
+
1259
+ default:
1260
+ output += code;
1261
+ }
1262
+ }
1263
+
1264
+ return output;
1265
+ }
1266
+
1267
+ function _time2int(timeString, settings) {
1268
+ if (timeString === "" || timeString === null) return null;
1269
+ if (typeof timeString == "object") {
1270
+ return (
1271
+ timeString.getHours() * 3600 +
1272
+ timeString.getMinutes() * 60 +
1273
+ timeString.getSeconds()
1274
+ );
1275
+ }
1276
+ if (typeof timeString != "string") {
1277
+ return timeString;
1278
+ }
1279
+
1280
+ timeString = timeString.toLowerCase().replace(/[\s\.]/g, "");
1281
+
1282
+ // if the last character is an "a" or "p", add the "m"
1283
+ if (timeString.slice(-1) == "a" || timeString.slice(-1) == "p") {
1284
+ timeString += "m";
1285
+ }
1286
+
1287
+ var ampmRegex =
1288
+ "(" +
1289
+ _lang.am.replace(".", "") +
1290
+ "|" +
1291
+ _lang.pm.replace(".", "") +
1292
+ "|" +
1293
+ _lang.AM.replace(".", "") +
1294
+ "|" +
1295
+ _lang.PM.replace(".", "") +
1296
+ ")?";
1297
+
1298
+ // try to parse time input
1299
+ var pattern = new RegExp(
1300
+ "^" +
1301
+ ampmRegex +
1302
+ "([0-9]?[0-9])\\W?([0-5][0-9])?\\W?([0-5][0-9])?" +
1303
+ ampmRegex +
1304
+ "$"
1305
+ );
1306
+
1307
+ var time = timeString.match(pattern);
1308
+ if (!time) {
1309
+ return null;
1310
+ }
1311
+
1312
+ var hour = parseInt(time[2] * 1, 10);
1313
+ var ampm = time[1] || time[5];
1314
+ var hours = hour;
1315
+ var minutes = time[3] * 1 || 0;
1316
+ var seconds = time[4] * 1 || 0;
1317
+
1318
+ if (hour <= 12 && ampm) {
1319
+ var isPm = ampm == _lang.pm || ampm == _lang.PM;
1320
+
1321
+ if (hour == 12) {
1322
+ hours = isPm ? 12 : 0;
1323
+ } else {
1324
+ hours = hour + (isPm ? 12 : 0);
1325
+ }
1326
+ } else if (settings) {
1327
+ var t = hour * 3600 + minutes * 60 + seconds;
1328
+ if (t >= _ONE_DAY + (settings.show2400 ? 1 : 0)) {
1329
+ if (settings.wrapHours === false) {
1330
+ return null;
1331
+ }
1332
+
1333
+ hours = hour % 24;
1334
+ }
1335
+ }
1336
+
1337
+ var timeInt = hours * 3600 + minutes * 60 + seconds;
1338
+
1339
+ // if no am/pm provided, intelligently guess based on the scrollDefault
1340
+ if (
1341
+ hour < 12 &&
1342
+ !ampm &&
1343
+ settings &&
1344
+ settings._twelveHourTime &&
1345
+ settings.scrollDefault
1346
+ ) {
1347
+ var delta = timeInt - settings.scrollDefault();
1348
+ if (delta < 0 && delta >= _ONE_DAY / -2) {
1349
+ timeInt = (timeInt + _ONE_DAY / 2) % _ONE_DAY;
1350
+ }
1351
+ }
1352
+
1353
+ return timeInt;
1354
+ }
1355
+
1356
+ function _pad2(n) {
1357
+ return ("0" + n).slice(-2);
1358
+ }
1359
+
1360
+ function _moduloSeconds(seconds, settings) {
1361
+ if (seconds == _ONE_DAY && settings.show2400) {
1362
+ return seconds;
1363
+ }
1364
+
1365
+ return seconds % _ONE_DAY;
1366
+ }
1367
+
1368
+ // Plugin entry
1369
+ $.fn.timepicker = function(method) {
1370
+ if (!this.length) return this;
1371
+ if (methods[method]) {
1372
+ // check if this element is a timepicker
1373
+ if (!this.hasClass("ui-timepicker-input")) {
1374
+ return this;
1375
+ }
1376
+ return methods[method].apply(
1377
+ this,
1378
+ Array.prototype.slice.call(arguments, 1)
1379
+ );
1380
+ } else if (typeof method === "object" || !method) {
1381
+ return methods.init.apply(this, arguments);
1382
+ } else {
1383
+ $.error("Method " + method + " does not exist on jQuery.timepicker");
1384
+ }
1385
+ };
1386
+ });
admin_section/js/main-script.js CHANGED
@@ -1,224 +1,328 @@
1
- function getParameterByName(name, url) {
2
- if (!url){
3
- url = window.location.href;
4
- }
5
- name = name.replace(/[\[\]]/g, "\\$&");
6
- var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
7
- results = regex.exec(url);
8
- if (!results) return null;
9
- if (!results[2]) return "";
10
- return decodeURIComponent(results[2].replace(/\+/g, " "));
11
- }
12
- jQuery(document).ready(function($){
13
- $(".saswp-tabs a").click(function(e){
14
- var href = $(this).attr('href');
15
- var currentTab = getParameterByName('tab',href);
16
- if(!currentTab){
17
- currentTab = "general";
18
- }
19
- $(this).siblings().removeClass("nav-tab-active");
20
- $(this).addClass("nav-tab-active");
21
- $(".form-wrap").find(".saswp-"+currentTab).siblings().hide();
22
- $(".form-wrap .saswp-"+currentTab).show();
23
- window.history.pushState("", "", href);
24
- return false;
25
- });
26
- //Settings page jquery starts here
27
-
28
- $(".saswp-checkbox").change(function(){
29
- var id = $(this).attr("id");
30
- console.log(id);
31
- switch(id){
32
- case 'saswp-for-wordpress-checkbox':
33
-
34
- if ($(this).is(':checked')) {
35
- $("#saswp-for-wordpress").val(1);
36
- }else{
37
- $("#saswp-for-wordpress").val(0);
38
- }
39
- break;
40
- case 'saswp-facebook-enable-checkbox':
41
-
42
- if ($(this).is(':checked')) {
43
- $("#saswp-facebook-enable").val(1);
44
- $("#sd_facebook").show();
45
- }else{
46
- $("#saswp-facebook-enable").val(0);
47
- $("#sd_facebook").hide();
48
- }
49
- break;
50
- case 'saswp-twitter-enable-checkbox':
51
-
52
- if ($(this).is(':checked')) {
53
- $("#saswp-twitter-enable").val(1);
54
- $("#sd_twitter").show();
55
- }else{
56
- $("#saswp-twitter-enable").val(0);
57
- $("#sd_twitter").hide();
58
- }
59
- break;
60
- case 'saswp-google-plus-enable-checkbox':
61
-
62
- if ($(this).is(':checked')) {
63
- $("#saswp-google-plus-enable").val(1);
64
- $("#sd_google_plus").show();
65
- }else{
66
- $("#saswp-google-plus-enable").val(0);
67
- $("#sd_google_plus").hide();
68
- }
69
- break;
70
- case 'saswp-instagram-enable-checkbox':
71
-
72
- if ($(this).is(':checked')) {
73
- $("#saswp-instagram-enable").val(1);
74
- $("#sd_instagram").show();
75
- }else{
76
- $("#saswp-instagram-enable").val(0);
77
- $("#sd_instagram").hide();
78
- }
79
- break;
80
- case 'saswp-youtube-enable-checkbox':
81
-
82
- if ($(this).is(':checked')) {
83
- $("#sd_youtube").show();
84
- $("#saswp-youtube-enable").val(1);
85
- }else{
86
- $("#saswp-youtube-enable").val(0);
87
- $("#sd_youtube").hide();
88
- }
89
- break;
90
- case 'saswp-linkedin-enable-checkbox':
91
-
92
- if ($(this).is(':checked')) {
93
- $("#saswp-linkedin-enable").val(1);
94
- $("#sd_linkedin").show();
95
- }else{
96
- $("#saswp-linkedin-enable").val(0);
97
- $("#sd_linkedin").hide();
98
- }
99
- break;
100
- case 'saswp-pinterest-enable-checkbox':
101
-
102
- if ($(this).is(':checked')) {
103
- $("#saswp-pinterest-enable").val(1);
104
- $("#sd_pinterest").show();
105
- }else{
106
- $("#saswp-pinterest-enable").val(0);
107
- $("#sd_pinterest").hide();
108
- }
109
- break;
110
- case 'saswp-soundcloud-enable-checkbox':
111
-
112
- if ($(this).is(':checked')) {
113
- $("#saswp-soundcloud-enable").val(1);
114
- $("#sd_soundcloud").show();
115
- }else{
116
- $("#saswp-soundcloud-enable").val(0);
117
- $("#sd_soundcloud").hide();
118
- }
119
- break;
120
- case 'saswp-tumblr-enable-checkbox':
121
-
122
- if ($(this).is(':checked')) {
123
- $("#saswp-tumblr-enable").val(1);
124
- $("#sd_tumblr").show();
125
- }else{
126
- $("#saswp-tumblr-enable").val(0);
127
- $("#sd_tumblr").hide();
128
- }
129
- break;
130
- case 'saswp-for-amp-checkbox':
131
-
132
- if ($(this).is(':checked')) {
133
- $("#saswp-for-amp").val(1);
134
- }else{
135
- $("#saswp-for-amp").val(0);
136
- }
137
- break;
138
- case 'saswp_kb_contact_1_checkbox':
139
-
140
- if ($(this).is(':checked')) {
141
- $("#saswp_kb_contact_1").val(1);
142
- $("#saswp_kb_telephone, #saswp_contact_type").parent().parent('li').removeClass("saswp-display-none");
143
- }else{
144
- $("#saswp_kb_contact_1").val(0);
145
- $("#saswp_kb_telephone, #saswp_contact_type").parent().parent('li').addClass("saswp-display-none");
146
- }
147
- break;
148
- case 'saswp-logo-dimensions-check':
149
-
150
- if ($(this).is(':checked')) {
151
- $("#saswp-logo-dimensions").val(1);
152
- $("#saswp-logo-width, #saswp-logo-height").parent().parent('li').show();
153
- }else{
154
- $("#saswp-logo-dimensions").val(0);
155
- $("#saswp-logo-width, #saswp-logo-height").parent().parent('li').hide();
156
- }
157
- break;
158
- case 'saswp_archive_schema_checkbox':
159
-
160
- if ($(this).is(':checked')) {
161
- $("#saswp_archive_schema").val(1);
162
- }else{
163
- $("#saswp_archive_schema").val(0);
164
- }
165
- break;
166
- case 'saswp_breadcrumb_schema_checkbox':
167
-
168
- if ($(this).is(':checked')) {
169
- $("#saswp_breadcrumb_schema").val(1);
170
- }else{
171
- $("#saswp_breadcrumb_schema").val(0);
172
- }
173
- break;
174
- default:
175
- break;
176
- }
177
-
178
- }).change();
179
-
180
- $("#saswp_kb_type").change(function(){
181
- var datatype = $(this).val();
182
- for(var i=1;i<=12;i++){
183
- if(datatype ==="Person"){
184
- if(i<8){
185
- $( ".saswp-knowledge-base li:eq('"+i+"')" ).hide();
186
- }else{
187
- $( ".saswp-knowledge-base li:eq('"+i+"')" ).show();
188
- }
189
- }else if(datatype ==="Organization"){
190
- if(i<8){
191
- $( ".saswp-knowledge-base li:eq('"+i+"')" ).show();
192
- }else{
193
- $( ".saswp-knowledge-base li:eq('"+i+"')" ).hide();
194
- }
195
- }else{
196
- $( ".saswp-knowledge-base li:eq('"+i+"')" ).hide();
197
- }
198
-
199
- }
200
- }).change();
201
- $("input[data-id=media]").click(function(e) { // Application Icon upload
202
- e.preventDefault();
203
- var button = $(this);
204
- var id = button.attr('id').replace('_button', '');
205
- var saswpMediaUploader = wp.media({
206
- title: "Application Icon",
207
- button: {
208
- text: "Select Icon"
209
- },
210
- multiple: false // Set this to true to allow multiple files to be selected
211
- })
212
- .on("select", function() {
213
- var attachment = saswpMediaUploader.state().get('selection').first().toJSON();
214
-
215
- $("#"+id).val(attachment.url);
216
- $("input[data-id='"+id+"_id']").val(attachment.id);
217
- $("input[data-id='"+id+"_height']").val(attachment.height);
218
- $("input[data-id='"+id+"_width']").val(attachment.width);
219
- $("input[data-id='"+id+"_thumbnail']").val(attachment.url);
220
- })
221
- .open();
222
- });
223
- //Settings page jquery ends here
224
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function getParameterByName(name, url) {
2
+ if (!url){
3
+ url = window.location.href;
4
+ }
5
+ name = name.replace(/[\[\]]/g, "\\$&");
6
+ var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
7
+ results = regex.exec(url);
8
+ if (!results) return null;
9
+ if (!results[2]) return "";
10
+ return decodeURIComponent(results[2].replace(/\+/g, " "));
11
+ }
12
+ jQuery(document).ready(function($){
13
+ $(".saswp-tabs a").click(function(e){
14
+ var href = $(this).attr('href');
15
+ var currentTab = getParameterByName('tab',href);
16
+ if(!currentTab){
17
+ currentTab = "general";
18
+ }
19
+ if(currentTab == 'support' || currentTab == 'tools'){
20
+ $(".saswp-settings-form #submit").hide();
21
+ }else{
22
+ $(".saswp-settings-form #submit").show();
23
+ }
24
+ $(this).siblings().removeClass("nav-tab-active");
25
+ $(this).addClass("nav-tab-active");
26
+ $(".form-wrap").find(".saswp-"+currentTab).siblings().hide();
27
+ $(".form-wrap .saswp-"+currentTab).show();
28
+ window.history.pushState("", "", href);
29
+ return false;
30
+ });
31
+
32
+ $(".saswp-schame-type-select").change(function(){
33
+ var schematype = $ (this).val();
34
+
35
+ $(".saswp-option-table-class tr").each(function(index,value){
36
+ if(index>0){
37
+ $(this).hide();
38
+ $(this).find('select').attr('disabled', true);
39
+ }
40
+ });
41
+ if(schematype == 'local_business'){
42
+ $(".saswp-option-table-class tr").eq(1).show();
43
+ $(".saswp-business-text-field-tr").show();
44
+ $(".saswp-option-table-class tr").find('select').attr('disabled', false);
45
+ $("#saswp_dayofweek").attr('disabled', false);
46
+ $('.select-post-type').val('show_globally').trigger('change');
47
+ }
48
+ });
49
+
50
+ $("#saswp_business_type").change(function(){
51
+ var businesstype = $ (this).val();
52
+ var schematype = $(".saswp-schame-type-select").val();
53
+
54
+ $(".saswp-option-table-class tr").each(function(index,value){
55
+ if(index>1){
56
+ $(this).hide();
57
+ $(this).find('select').attr('disabled', true);
58
+ }
59
+ });
60
+ if(schematype == 'local_business'){
61
+ $(".saswp-"+businesstype+'-tr').show();
62
+ $(".saswp-business-text-field-tr").show();
63
+ $(".saswp-"+businesstype+'-tr').find('select').attr('disabled', false);
64
+ $("#saswp_dayofweek").attr('disabled', false);
65
+ }
66
+
67
+ }).change();
68
+
69
+
70
+ //Settings page jquery starts here
71
+
72
+ $(".saswp-checkbox").change(function(){
73
+ var id = $(this).attr("id");
74
+ switch(id){
75
+ case 'saswp-for-wordpress-checkbox':
76
+
77
+ if ($(this).is(':checked')) {
78
+ $("#saswp-for-wordpress").val(1);
79
+ }else{
80
+ $("#saswp-for-wordpress").val(0);
81
+ }
82
+ break;
83
+ case 'saswp-facebook-enable-checkbox':
84
+
85
+ if ($(this).is(':checked')) {
86
+ $("#saswp-facebook-enable").val(1);
87
+ $("#sd_facebook").show();
88
+ }else{
89
+ $("#saswp-facebook-enable").val(0);
90
+ $("#sd_facebook").hide();
91
+ }
92
+ break;
93
+ case 'saswp-twitter-enable-checkbox':
94
+
95
+ if ($(this).is(':checked')) {
96
+ $("#saswp-twitter-enable").val(1);
97
+ $("#sd_twitter").show();
98
+ }else{
99
+ $("#saswp-twitter-enable").val(0);
100
+ $("#sd_twitter").hide();
101
+ }
102
+ break;
103
+ case 'saswp-google-plus-enable-checkbox':
104
+
105
+ if ($(this).is(':checked')) {
106
+ $("#saswp-google-plus-enable").val(1);
107
+ $("#sd_google_plus").show();
108
+ }else{
109
+ $("#saswp-google-plus-enable").val(0);
110
+ $("#sd_google_plus").hide();
111
+ }
112
+ break;
113
+ case 'saswp-instagram-enable-checkbox':
114
+
115
+ if ($(this).is(':checked')) {
116
+ $("#saswp-instagram-enable").val(1);
117
+ $("#sd_instagram").show();
118
+ }else{
119
+ $("#saswp-instagram-enable").val(0);
120
+ $("#sd_instagram").hide();
121
+ }
122
+ break;
123
+ case 'saswp-youtube-enable-checkbox':
124
+
125
+ if ($(this).is(':checked')) {
126
+ $("#sd_youtube").show();
127
+ $("#saswp-youtube-enable").val(1);
128
+ }else{
129
+ $("#saswp-youtube-enable").val(0);
130
+ $("#sd_youtube").hide();
131
+ }
132
+ break;
133
+ case 'saswp-linkedin-enable-checkbox':
134
+
135
+ if ($(this).is(':checked')) {
136
+ $("#saswp-linkedin-enable").val(1);
137
+ $("#sd_linkedin").show();
138
+ }else{
139
+ $("#saswp-linkedin-enable").val(0);
140
+ $("#sd_linkedin").hide();
141
+ }
142
+ break;
143
+ case 'saswp-pinterest-enable-checkbox':
144
+
145
+ if ($(this).is(':checked')) {
146
+ $("#saswp-pinterest-enable").val(1);
147
+ $("#sd_pinterest").show();
148
+ }else{
149
+ $("#saswp-pinterest-enable").val(0);
150
+ $("#sd_pinterest").hide();
151
+ }
152
+ break;
153
+ case 'saswp-soundcloud-enable-checkbox':
154
+
155
+ if ($(this).is(':checked')) {
156
+ $("#saswp-soundcloud-enable").val(1);
157
+ $("#sd_soundcloud").show();
158
+ }else{
159
+ $("#saswp-soundcloud-enable").val(0);
160
+ $("#sd_soundcloud").hide();
161
+ }
162
+ break;
163
+ case 'saswp-tumblr-enable-checkbox':
164
+
165
+ if ($(this).is(':checked')) {
166
+ $("#saswp-tumblr-enable").val(1);
167
+ $("#sd_tumblr").show();
168
+ }else{
169
+ $("#saswp-tumblr-enable").val(0);
170
+ $("#sd_tumblr").hide();
171
+ }
172
+ break;
173
+ case 'saswp-for-amp-checkbox':
174
+
175
+ if ($(this).is(':checked')) {
176
+ $("#saswp-for-amp").val(1);
177
+ }else{
178
+ $("#saswp-for-amp").val(0);
179
+ }
180
+ break;
181
+ case 'saswp_kb_contact_1_checkbox':
182
+
183
+ if ($(this).is(':checked')) {
184
+ $("#saswp_kb_contact_1").val(1);
185
+ $("#saswp_kb_telephone, #saswp_contact_type").parent().parent('li').removeClass("saswp-display-none");
186
+ }else{
187
+ $("#saswp_kb_contact_1").val(0);
188
+ $("#saswp_kb_telephone, #saswp_contact_type").parent().parent('li').addClass("saswp-display-none");
189
+ }
190
+ break;
191
+ case 'saswp-logo-dimensions-check':
192
+
193
+ if ($(this).is(':checked')) {
194
+ $("#saswp-logo-dimensions").val(1);
195
+ $("#saswp-logo-width, #saswp-logo-height").parent().parent('li').show();
196
+ }else{
197
+ $("#saswp-logo-dimensions").val(0);
198
+ $("#saswp-logo-width, #saswp-logo-height").parent().parent('li').hide();
199
+ }
200
+ break;
201
+ case 'saswp_archive_schema_checkbox':
202
+
203
+ if ($(this).is(':checked')) {
204
+ $("#saswp_archive_schema").val(1);
205
+ }else{
206
+ $("#saswp_archive_schema").val(0);
207
+ }
208
+ break;
209
+ case 'saswp_breadcrumb_schema_checkbox':
210
+
211
+ if ($(this).is(':checked')) {
212
+ $("#saswp_breadcrumb_schema").val(1);
213
+ }else{
214
+ $("#saswp_breadcrumb_schema").val(0);
215
+ }
216
+ break;
217
+ default:
218
+ break;
219
+ }
220
+
221
+ }).change();
222
+
223
+ $("#saswp_kb_type").change(function(){
224
+ var datatype = $(this).val();
225
+ for(var i=1;i<=11;i++){
226
+ if(datatype ==="Person"){
227
+ if(i<7){
228
+ $( ".saswp-knowledge-base li:eq('"+i+"')" ).hide();
229
+ }else{
230
+ $( ".saswp-knowledge-base li:eq('"+i+"')" ).show();
231
+ }
232
+ }else if(datatype ==="Organization"){
233
+ if(i<7){
234
+ $( ".saswp-knowledge-base li:eq('"+i+"')" ).show();
235
+ }else{
236
+ $( ".saswp-knowledge-base li:eq('"+i+"')" ).hide();
237
+ }
238
+ }else{
239
+ $( ".saswp-knowledge-base li:eq('"+i+"')" ).hide();
240
+ }
241
+
242
+ }
243
+ }).change();
244
+ $("input[data-id=media]").click(function(e) { // Application Icon upload
245
+ e.preventDefault();
246
+ var button = $(this);
247
+ var id = button.attr('id').replace('_button', '');
248
+ var saswpMediaUploader = wp.media({
249
+ title: "Application Icon",
250
+ button: {
251
+ text: "Select Icon"
252
+ },
253
+ multiple: false // Set this to true to allow multiple files to be selected
254
+ })
255
+ .on("select", function() {
256
+ var attachment = saswpMediaUploader.state().get('selection').first().toJSON();
257
+
258
+ $("#"+id).val(attachment.url);
259
+ $("input[data-id='"+id+"_id']").val(attachment.id);
260
+ $("input[data-id='"+id+"_height']").val(attachment.height);
261
+ $("input[data-id='"+id+"_width']").val(attachment.width);
262
+ $("input[data-id='"+id+"_thumbnail']").val(attachment.url);
263
+ })
264
+ .open();
265
+ });
266
+ //Settings page jquery ends here
267
+
268
+ //query form send starts here
269
+
270
+ $(".saswp-send-query").on("click", function(e){
271
+ e.preventDefault();
272
+ var message = $("#saswp_query_message").val();
273
+ $.ajax({
274
+ type: "POST",
275
+ url:ajaxurl,
276
+ dataType: "json",
277
+ data:{action:"saswp_send_query_message", message:message},
278
+ success:function(response){
279
+ if(response['status'] =='t'){
280
+ $(".saswp-query-success").show();
281
+ $(".saswp-query-error").hide();
282
+ }else{
283
+ console.log('dd');
284
+ $(".saswp-query-success").hide();
285
+ $(".saswp-query-error").show();
286
+ }
287
+ },
288
+ error: function(response){
289
+ console.log(response);
290
+ }
291
+ });
292
+
293
+ });
294
+
295
+ //Importer from schema plugin starts here
296
+
297
+ $(".saswp-import-plugins").on("click", function(e){
298
+ e.preventDefault();
299
+ var plugin_name = $(this).attr('data-id');
300
+ $.get(ajaxurl,
301
+ { action:"saswp_import_plugin_data", plugin_name:plugin_name},
302
+ function(response){
303
+ if(response['status'] =='t'){
304
+ $(".saswp-imported-message").text(response['message']);
305
+ $(".saswp-imported-message").removeClass('saswp-error');
306
+ setTimeout(function(){ location.reload(); }, 2000);
307
+ }else{
308
+ $(".saswp-imported-message").addClass('saswp-error');
309
+ $(".saswp-imported-message").text(response['message']);
310
+ }
311
+ },'json');
312
+ });
313
+
314
+
315
+ $(".saswp-feedback-no-thanks").on("click", function(e){
316
+ e.preventDefault();
317
+ $.get(ajaxurl,
318
+ { action:"saswp_feeback_no_thanks"},
319
+ function(response){
320
+ if(response['status'] =='t'){
321
+ $(".saswp-feedback-notice").hide();
322
+ }
323
+ },'json');
324
+ });
325
+
326
+ //Importer from schema plugin ends here
327
+
328
+ });
admin_section/js/saswp-add-new.js ADDED
@@ -0,0 +1,315 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ var Merlin = (function($){
3
+
4
+ var t;
5
+
6
+ // callbacks from form button clicks.
7
+ var callbacks = {
8
+ save_logo: function(btn){
9
+ var logosave = new saveLogo(btn);
10
+ logosave.init(btn);
11
+ },
12
+ install_child: function(btn) {
13
+ var installer = new ChildTheme();
14
+ installer.init(btn);
15
+ },
16
+ activate_license: function(btn) {
17
+ var license = new ActivateLicense();
18
+ license.init(btn);
19
+ },
20
+ install_plugins: function(btn){
21
+ var plugins = new PluginManager();
22
+ plugins.init(btn);
23
+ },
24
+ install_content: function(btn){
25
+ var content = new ContentManager();
26
+ content.init(btn);
27
+ }
28
+ };
29
+
30
+ function window_loaded(){
31
+
32
+ var
33
+ body = $('.merlin__body'),
34
+ body_loading = $('.merlin__body--loading'),
35
+ body_exiting = $('.merlin__body--exiting'),
36
+ drawer_trigger = $('#merlin__drawer-trigger'),
37
+ drawer_opening = 'merlin__drawer--opening';
38
+ drawer_opened = 'merlin__drawer--open';
39
+
40
+ setTimeout(function(){
41
+ body.addClass('loaded');
42
+ },100);
43
+
44
+ drawer_trigger.on('click', function(){
45
+ body.toggleClass( drawer_opened );
46
+ });
47
+
48
+ $('.merlin__button--proceed:not(.merlin__button--closer)').click(function (e) {
49
+ e.preventDefault();
50
+ var goTo = this.getAttribute("href");
51
+
52
+ body.addClass('exiting');
53
+
54
+ setTimeout(function(){
55
+ window.location = goTo;
56
+ },400);
57
+ });
58
+
59
+ $(".merlin__button--closer").on('click', function(e){
60
+
61
+ body.removeClass( drawer_opened );
62
+
63
+ e.preventDefault();
64
+ var goTo = this.getAttribute("href");
65
+
66
+ setTimeout(function(){
67
+ body.addClass('exiting');
68
+ },600);
69
+
70
+ setTimeout(function(){
71
+ window.location = goTo;
72
+ },1100);
73
+ });
74
+
75
+ $(".button-next").on( "click", function(e) {
76
+ e.preventDefault();
77
+ var loading_button = merlin_loading_button(this);
78
+ if ( ! loading_button ) {
79
+ return false;
80
+ }
81
+ var data_callback = $(this).data("callback");
82
+ if( data_callback && typeof callbacks[data_callback] !== "undefined"){
83
+ // We have to process a callback before continue with form submission.
84
+ callbacks[data_callback](this);
85
+ $(".saswp_branding").hide();
86
+ return false;
87
+ } else {
88
+ return true;
89
+ }
90
+ });
91
+ }
92
+
93
+ function saveLogo() {
94
+ var body = $('.merlin__body');
95
+ var complete, notice = $("#child-theme-text");
96
+
97
+ function ajax_callback(r) {
98
+
99
+ if (typeof r.done !== "undefined") {
100
+ setTimeout(function(){
101
+ notice.addClass("lead");
102
+ },0);
103
+ setTimeout(function(){
104
+ notice.addClass("success");
105
+ notice.html(r.message);
106
+ },600);
107
+
108
+
109
+ complete();
110
+ } else {
111
+ notice.addClass("lead error");
112
+ notice.html(r.error);
113
+ }
114
+ }
115
+
116
+ function do_ajax() {
117
+ var params = {
118
+ action: "saswp_add_new_save_steps_data",
119
+ wpnonce: saswp_add_new_params.wpnonce,
120
+ }
121
+ jQuery('ul.merlin__drawer--import-content').find('input, select').each(function(key, fields){
122
+
123
+ switch(jQuery(this).attr('type')){
124
+ case 'text':
125
+ case 'hidden':
126
+ params[jQuery(this).attr('name')] = jQuery(this).val();
127
+ break;
128
+ case 'checkbox':
129
+ if(jQuery(this).prop('checked')==true){
130
+ params[jQuery(this).attr('name')] = 1;
131
+ }else{
132
+ params[jQuery(this).attr('name')] = 0;
133
+ }
134
+ break;
135
+ default:
136
+ params[jQuery(this).attr('name')] = jQuery(this).val();
137
+ break;
138
+ }
139
+ });
140
+ jQuery.post(saswp_add_new_params.ajaxurl, params, ajax_callback).fail(ajax_callback);
141
+ }
142
+
143
+ return {
144
+ init: function(btn) {
145
+ complete = function() {
146
+
147
+ setTimeout(function(){
148
+ $(".merlin__body").addClass('js--finished');
149
+ },1500);
150
+
151
+ body.removeClass( drawer_opened );
152
+
153
+ setTimeout(function(){
154
+ $('.merlin__body').addClass('exiting');
155
+ },3500);
156
+
157
+ setTimeout(function(){
158
+ window.location.href=btn.href;
159
+ },4000);
160
+
161
+ };
162
+ do_ajax();
163
+ }
164
+ }
165
+ }
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ function merlin_loading_button( btn ){
177
+
178
+ var $button = jQuery(btn);
179
+
180
+ if ( $button.data( "done-loading" ) == "yes" ) {
181
+ return false;
182
+ }
183
+
184
+ var completed = false;
185
+
186
+ var _modifier = $button.is("input") || $button.is("button") ? "val" : "text";
187
+
188
+ $button.data("done-loading","yes");
189
+
190
+ $button.addClass("merlin__button--loading");
191
+
192
+ return {
193
+ done: function(){
194
+ completed = true;
195
+ $button.attr("disabled",false);
196
+ }
197
+ }
198
+
199
+ }
200
+
201
+ return {
202
+ init: function(){
203
+ t = this;
204
+ $(window_loaded);
205
+ },
206
+ callback: function(func){
207
+ console.log(func);
208
+ console.log(this);
209
+ }
210
+ }
211
+
212
+ })(jQuery);
213
+
214
+ Merlin.init();
215
+
216
+
217
+ jQuery(document).ready(function($) {
218
+ $(".social-fields input[type=checkbox]").change(function(){
219
+ socialFields($(this));
220
+ })
221
+ $(".social-fields input[type=checkbox]").each(function(){
222
+ socialFields($(this));
223
+ })
224
+ function socialFields(self){
225
+ if(self.prop('checked')){
226
+ var field_name = self.attr('name');
227
+ field_name = field_name.replace("_checkbox",'');
228
+ self.parent('.social-fields').find('input[type=text]').show();
229
+ }else{
230
+ self.parent('.social-fields').find('input[type=text]').val('').hide();
231
+ }
232
+ }
233
+
234
+
235
+ $(".post-type-fields input[type=checkbox]").change(function(){
236
+ var self = $(this);
237
+ if(self.prop('checked')){
238
+ var field_name = self.attr('name');
239
+ field_name = field_name.replace("_checkbox",'');
240
+ self.parent('.post-type-fields').find('select#schema_type').show();
241
+ }else{
242
+ self.parent('.post-type-fields').find('select#schema_type').val('').hide();
243
+ }
244
+ });
245
+ $('.post-type-fields').each(function(){
246
+ $(this).find('select#schema_type').val('').hide();
247
+ });
248
+
249
+
250
+ $(".saswp-schame-type-select").change(function(){
251
+ var schematype = $ (this).val();
252
+
253
+ $(".saswp-option-table-class tr").each(function(index,value){
254
+ if(index>0){
255
+ $(this).hide();
256
+ $(this).find('select').attr('disabled', true);
257
+ }
258
+ });
259
+ if(schematype == 'local_business'){
260
+ $(".saswp-option-table-class tr").eq(1).show();
261
+ $(".saswp-business-text-field-tr").show();
262
+ $(".saswp-option-table-class tr").find('select').attr('disabled', false);
263
+ $("#saswp_dayofweek").attr('disabled', false);
264
+ $('.select-post-type').val('show_globally').trigger('change');
265
+ }
266
+
267
+ }).change();
268
+
269
+ $("#saswp_business_type").change(function(){
270
+ var businesstype = $ (this).val();
271
+ var schematype = $(".saswp-schame-type-select").val();
272
+
273
+ $(".saswp-option-table-class tr").each(function(index,value){
274
+ if(index>1){
275
+ $(this).hide();
276
+ $(this).find('select').attr('disabled', true);
277
+ }
278
+ });
279
+ if(schematype == 'local_business'){
280
+ $(".saswp-"+businesstype+'-tr').show();
281
+ $(".saswp-business-text-field-tr").show();
282
+ $(".saswp-"+businesstype+'-tr').find('select').attr('disabled', false);
283
+ $("#saswp_dayofweek").attr('disabled', false);
284
+ }
285
+
286
+ }).change();
287
+
288
+ $("input[data-id=media]").click(function(e) { // Application Icon upload
289
+ e.preventDefault();
290
+ var button = $(this);
291
+ var id = button.attr('id').replace('_button', '');
292
+ var saswpMediaUploader = wp.media({
293
+ title: "Application Icon",
294
+ button: {
295
+ text: "Select Icon"
296
+ },
297
+ multiple: false // Set this to true to allow multiple files to be selected
298
+ })
299
+ .on("select", function() {
300
+ var attachment = saswpMediaUploader.state().get('selection').first().toJSON();
301
+
302
+ $("#"+id).val(attachment.url);
303
+ $("input[data-id='"+id+"_id']").val(attachment.id);
304
+ $("input[data-id='"+id+"_height']").val(attachment.height);
305
+ $("input[data-id='"+id+"_width']").val(attachment.width);
306
+ $("input[data-id='"+id+"_thumbnail']").val(attachment.url);
307
+ })
308
+ .open();
309
+ });
310
+
311
+ $('#saswp-dayofweek-opens-time').timepicker({ 'timeFormat': 'H:i:s'});
312
+ $('#saswp-dayofweek-closes-time').timepicker({ 'timeFormat': 'H:i:s'});
313
+
314
+
315
+ });
admin_section/js/saswp-install.js ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ var Merlin = (function($){
3
+
4
+ var t;
5
+
6
+ // callbacks from form button clicks.
7
+ var callbacks = {
8
+ save_logo: function(btn){
9
+ var logosave = new saveLogo(btn);
10
+ logosave.init(btn);
11
+ },
12
+ install_child: function(btn) {
13
+ var installer = new ChildTheme();
14
+ installer.init(btn);
15
+ },
16
+ activate_license: function(btn) {
17
+ var license = new ActivateLicense();
18
+ license.init(btn);
19
+ },
20
+ install_plugins: function(btn){
21
+ var plugins = new PluginManager();
22
+ plugins.init(btn);
23
+ },
24
+ install_content: function(btn){
25
+ var content = new ContentManager();
26
+ content.init(btn);
27
+ }
28
+ };
29
+
30
+ function window_loaded(){
31
+
32
+ var
33
+ body = $('.merlin__body'),
34
+ body_loading = $('.merlin__body--loading'),
35
+ body_exiting = $('.merlin__body--exiting'),
36
+ drawer_trigger = $('#merlin__drawer-trigger'),
37
+ drawer_opening = 'merlin__drawer--opening';
38
+ drawer_opened = 'merlin__drawer--open';
39
+
40
+ setTimeout(function(){
41
+ body.addClass('loaded');
42
+ },100);
43
+
44
+ drawer_trigger.on('click', function(){
45
+ body.toggleClass( drawer_opened );
46
+ });
47
+
48
+ $('.merlin__button--proceed:not(.merlin__button--closer)').click(function (e) {
49
+ e.preventDefault();
50
+ var goTo = this.getAttribute("href");
51
+
52
+ body.addClass('exiting');
53
+
54
+ setTimeout(function(){
55
+ window.location = goTo;
56
+ },400);
57
+ });
58
+
59
+ $(".merlin__button--closer").on('click', function(e){
60
+
61
+ body.removeClass( drawer_opened );
62
+
63
+ e.preventDefault();
64
+ var goTo = this.getAttribute("href");
65
+
66
+ setTimeout(function(){
67
+ body.addClass('exiting');
68
+ },600);
69
+
70
+ setTimeout(function(){
71
+ window.location = goTo;
72
+ },1100);
73
+ });
74
+
75
+ $(".button-next").on( "click", function(e) {
76
+ e.preventDefault();
77
+ var loading_button = merlin_loading_button(this);
78
+ if ( ! loading_button ) {
79
+ return false;
80
+ }
81
+ var data_callback = $(this).data("callback");
82
+ if( data_callback && typeof callbacks[data_callback] !== "undefined"){
83
+ // We have to process a callback before continue with form submission.
84
+ callbacks[data_callback](this);
85
+ $(".saswp_branding").hide();
86
+ return false;
87
+ } else {
88
+ return true;
89
+ }
90
+ });
91
+ }
92
+
93
+ function saveLogo() {
94
+ var body = $('.merlin__body');
95
+ var complete, notice = $("#child-theme-text");
96
+
97
+ function ajax_callback(r) {
98
+
99
+ if (typeof r.done !== "undefined") {
100
+ setTimeout(function(){
101
+ notice.addClass("lead");
102
+ },0);
103
+ setTimeout(function(){
104
+ notice.addClass("success");
105
+ notice.html(r.message);
106
+ },600);
107
+
108
+
109
+ complete();
110
+ } else {
111
+ notice.addClass("lead error");
112
+ notice.html(r.error);
113
+ }
114
+ }
115
+
116
+ function do_ajax() {
117
+ var params = {
118
+ action: "saswp_save_installer",
119
+ wpnonce: saswp_install_params.wpnonce,
120
+ }
121
+ jQuery('ul.merlin__drawer--import-content').find('input, select').each(function(key, fields){
122
+
123
+ switch(jQuery(this).attr('type')){
124
+ case 'text':
125
+ case 'hidden':
126
+ params[jQuery(this).attr('name')] = jQuery(this).val();
127
+ break;
128
+ case 'checkbox':
129
+ if(jQuery(this).prop('checked')==true){
130
+ params[jQuery(this).attr('name')] = 1;
131
+ }else{
132
+ params[jQuery(this).attr('name')] = 0;
133
+ }
134
+ break;
135
+ default:
136
+ params[jQuery(this).attr('name')] = jQuery(this).val();
137
+ break;
138
+ }
139
+ });
140
+ jQuery.post(saswp_install_params.ajaxurl, params, ajax_callback).fail(ajax_callback);
141
+ }
142
+
143
+ return {
144
+ init: function(btn) {
145
+ complete = function() {
146
+
147
+ setTimeout(function(){
148
+ $(".merlin__body").addClass('js--finished');
149
+ },1500);
150
+
151
+ body.removeClass( drawer_opened );
152
+
153
+ setTimeout(function(){
154
+ $('.merlin__body').addClass('exiting');
155
+ },3500);
156
+
157
+ setTimeout(function(){
158
+ window.location.href=btn.href;
159
+ },4000);
160
+
161
+ };
162
+ do_ajax();
163
+ }
164
+ }
165
+ }
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ function merlin_loading_button( btn ){
177
+
178
+ var $button = jQuery(btn);
179
+
180
+ if ( $button.data( "done-loading" ) == "yes" ) {
181
+ return false;
182
+ }
183
+
184
+ var completed = false;
185
+
186
+ var _modifier = $button.is("input") || $button.is("button") ? "val" : "text";
187
+
188
+ $button.data("done-loading","yes");
189
+
190
+ $button.addClass("merlin__button--loading");
191
+
192
+ return {
193
+ done: function(){
194
+ completed = true;
195
+ $button.attr("disabled",false);
196
+ }
197
+ }
198
+
199
+ }
200
+
201
+ return {
202
+ init: function(){
203
+ t = this;
204
+ $(window_loaded);
205
+ },
206
+ callback: function(func){
207
+ console.log(func);
208
+ console.log(this);
209
+ }
210
+ }
211
+
212
+ })(jQuery);
213
+
214
+ Merlin.init();
215
+
216
+
217
+ jQuery(document).ready(function($) {
218
+ $(".saswp-social-fields input[type=checkbox]").change(function(){
219
+ socialFields($(this));
220
+ })
221
+ $(".saswp-social-fields input[type=checkbox]").each(function(){
222
+ socialFields($(this));
223
+ })
224
+ function socialFields(self){
225
+ if(self.prop('checked')){
226
+ var field_name = self.attr('name');
227
+ field_name = field_name.replace("_checkbox",'');
228
+ self.parent('.saswp-social-fields').find('input[type=text]').show();
229
+ }else{
230
+ self.parent('.saswp-social-fields').find('input[type=text]').val('').hide();
231
+ }
232
+ }
233
+
234
+
235
+ $(".post-type-fields input[type=checkbox]").change(function(){
236
+ var self = $(this);
237
+ if(self.prop('checked')){
238
+ var field_name = self.attr('name');
239
+ field_name = field_name.replace("_checkbox",'');
240
+ self.parent('.post-type-fields').find('select#schema_type').show();
241
+ }else{
242
+ self.parent('.post-type-fields').find('select#schema_type').val('').hide();
243
+ }
244
+ });
245
+ $('.post-type-fields').each(function(){
246
+ $(this).find('select#schema_type').val('').hide();
247
+ });
248
+ });
admin_section/js/structure_admin.js CHANGED
@@ -1,113 +1,176 @@
1
- var clone = function(){
2
- jQuery(".structured-clone").off("click").click(function(){
3
- var selectrow = jQuery(document).find("#call_html_template_sdwp").html();
4
- nextId = jQuery(this).parents("tbody").find("tr").length;
5
- selectrow = selectrow.replace(/\[0\]/g, "["+nextId+"]");
6
- console.log(selectrow);
7
- jQuery(this).parents("tr").after(selectrow);removeHtml();clone();
8
- });
9
- }
10
- var removeHtml = function(){
11
- jQuery(".structured-delete").off("click").click(function(){
12
- if(jQuery(this).parents("tbody").find("tr").length>1){
13
- jQuery(this).parents("tr").remove();
14
- }
15
- });
16
- }
17
- jQuery(document).ready(function($){
18
- var selectrow = $("#amp_sdwp_select").find("table.widefat tr").html();
19
- $("body").append("<script type='template/html' id='call_html_template_sdwp'><tr class='toclone cloneya'>"+selectrow+"</tr>");
20
- clone();
21
- removeHtml();
22
- $(document).on("change", ".select-post-type", function(){
23
- var parent = $(this).parents('tr').find(".insert-ajax-select");
24
- var selectedValue = $(this).val();
25
- var currentFiledNumber = $(this).attr("class").split(" ")[2];
26
- var saswp_call_nonce = $("#saswp_select_name_nonce").val();
27
-
28
- parent.find(".ajax-output").remove();
29
- parent.find(".ajax-output-child").remove();
30
- parent.find(".spinner").attr("style","visibility:visible");
31
- parent.children(".spinner").addClass("show");
32
- var ajaxURL = amp_sdwp_field_data.ajax_url;
33
- //ajax call
34
- $.ajax({
35
- url : ajaxURL,
36
- method : "POST",
37
- data: {
38
- action: "create_ajax_select_sdwp",
39
- id: selectedValue,
40
- number : currentFiledNumber,
41
- saswp_call_nonce : saswp_call_nonce
42
- },
43
- beforeSend: function(){
44
- },
45
- success: function(data){
46
- // This code is added twice " withThis.find('.ajax-output').remove(); "
47
- parent.find(".ajax-output").remove();
48
- parent.children(".spinner").removeClass("show");
49
- parent.find(".spinner").attr("style","visibility:hidden").hide();
50
- parent.append(data);
51
- taxonomyDataCall();
52
- },
53
- error: function(data){
54
- console.log("Failed Ajax Request");
55
- console.log(data);
56
- }
57
- });
58
- });
59
- taxonomyDataCall();
60
- $("#notAccessibleForFree").click(function(){
61
- if($(this).is(':checked')){
62
- $("#paywall_class_name").parents("tr").show();
63
- $("#isAccessibleForFree").parents("tr").show();
64
- }else{
65
- $("#paywall_class_name").parents("tr").hide();
66
- $("#isAccessibleForFree").parents("tr").hide();
67
- }
68
- })
69
-
70
- });//jQuery(document) closed
71
- function taxonomyDataCall(){
72
- jQuery('select.ajax-output').change(function(){
73
- var mainSelectedValue = jQuery(".select-post-type").val();
74
- if(mainSelectedValue=="ef_taxonomy"){
75
- parentSelector = jQuery(this).parents("td").find(".insert-ajax-select");
76
- var selectedValue = jQuery(this).val();
77
- var currentFiledNumber = jQuery(this).attr("name").split("[")[1].replace("]",'');
78
- var saswp_call_nonce = $("#saswp_select_name_nonce").val();
79
-
80
- parentSelector.find(".ajax-output-child").remove();
81
- parentSelector.find(".spinner").attr("style","visibility:visible");
82
- parentSelector.children(".spinner").addClass("show");
83
-
84
- var ajaxURL = amp_sdwp_field_data.ajax_url;
85
- //ajax call
86
- jQuery.ajax({
87
- url : ajaxURL,
88
- method : "POST",
89
- data: {
90
- action: "create_ajax_select_sdwp_taxonomy",
91
- id: selectedValue,
92
- number : currentFiledNumber,
93
- saswp_call_nonce: saswp_call_nonce
94
- },
95
- beforeSend: function(){
96
- },
97
- success: function(data){
98
- // This code is added twice " withThis.find('.ajax-output').remove(); "
99
- parentSelector.find(".ajax-output-child").remove();
100
- parentSelector.children(".spinner").removeClass("show");
101
- parentSelector.find(".spinner").attr("style","visibility:hidden").hide();
102
- parentSelector.append(data);
103
- taxonomyDataCall();
104
- },
105
- error: function(data){
106
- console.log("Failed Ajax Request");
107
- console.log(data);
108
- }
109
- });
110
- }
111
- });
112
- }
113
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var clone = function(){
2
+ jQuery(".structured-clone").off("click").click(function(){
3
+ var group_index = jQuery(this).closest(".saswp-placement-group").attr('data-id');
4
+ var selectrow = jQuery(document).find("#call_html_template_sdwp").html();
5
+ nextId = jQuery(this).parents("tbody").find("tr").length;
6
+ selectrow = selectrow.replace(/\[0\]/g, "["+nextId+"]");
7
+ selectrow = selectrow.replace(/\[group-0\]/g, "[group-"+group_index+"]");
8
+ jQuery(this).parents("tr").after(selectrow);removeHtml();clone();
9
+ });
10
+ }
11
+ var removeHtml = function(){
12
+ jQuery(".structured-delete").off("click").click(function(){
13
+ var class_count = jQuery(".saswp-placement-group").length;
14
+
15
+ if(class_count==1){
16
+ if(jQuery(this).parents("tbody").find("tr").length>1){
17
+ jQuery(this).parents("tr").remove();
18
+ }
19
+ }else{
20
+ if(jQuery(this).parents("tbody").find("tr").length == 1){
21
+ jQuery(this).parents(".saswp-placement-group").remove();
22
+ } else{
23
+ jQuery(this).parents("tr").remove();
24
+ }
25
+ }
26
+
27
+ });
28
+ }
29
+ jQuery(document).ready(function($){
30
+ if(saswp_app_object.post_type ==='saswp' && saswp_app_object.post_found_status ==='not_found'){
31
+ var html = '<div>';
32
+ html += '<p><span class="dashicons dashicons-thumbs-up"></span>'+saswp_app_object.thankyou+' <a href="'+saswp_app_object.wizard_url+'">'+saswp_app_object.quicksetup+'</a></p>';
33
+ html += '</div>';
34
+ $(".wp-list-table .colspanchange").html(html);
35
+ }
36
+ $('#saswp-dayofweek-opens-time').timepicker({ 'timeFormat': 'H:i:s'});
37
+ $('#saswp-dayofweek-closes-time').timepicker({ 'timeFormat': 'H:i:s'});
38
+
39
+ $(".saswp-placement-or-group").on("click", function(e){
40
+ e.preventDefault();
41
+ var group_index ='';
42
+ var group_index = $(".saswp-placement-group").length;
43
+
44
+ var selectrow = jQuery(document).find("#call_html_template_sdwp").html();
45
+ selectrow = selectrow.replace(/\[group-0\]/g, "[group-"+group_index+"]");
46
+ var placement_group_html = '';
47
+ placement_group_html +='<table class="widefat saswp-placement-table" style="border:0px;">';
48
+ placement_group_html += selectrow;
49
+ placement_group_html +='</table>';
50
+
51
+ var html='';
52
+ html +='<div class="saswp-placement-group" name="data_group_array['+group_index+']" data-id="'+group_index+'">';
53
+ html +='<span style="margin-left:10px;font-weight:600">Or</span>';
54
+ html +=placement_group_html;
55
+ html +='</div>';
56
+ $(".saswp-placement-group[data-id="+(group_index-1)+"]").after(html);
57
+ group_index++;
58
+ clone();
59
+ removeHtml();
60
+ });
61
+
62
+ var selectrow = $("#saswp_amp_select").find("table.widefat tr").html();
63
+ $("body").append("<script type='template/html' id='call_html_template_sdwp'><tr class='toclone cloneya'>"+selectrow+"</tr>");
64
+ clone();
65
+ removeHtml();
66
+ $(document).on("change", ".select-post-type", function(){
67
+ var current_change = $(this);
68
+ var parent = $(this).parents('tr').find(".insert-ajax-select");
69
+ var selectedValue = $(this).val();
70
+ var tdindex = [1,2,3,4];
71
+ if(selectedValue !='show_globally'){
72
+
73
+ $.each(tdindex, function(i,e){
74
+ $(current_change).closest('tr').find('td').eq(e).show();
75
+ });
76
+
77
+ var currentFiledNumber = $(this).attr("class").split(" ")[2];
78
+ var saswp_call_nonce = $("#saswp_select_name_nonce").val();
79
+
80
+ parent.find(".ajax-output").remove();
81
+ parent.find(".ajax-output-child").remove();
82
+ parent.find(".spinner").attr("style","visibility:visible");
83
+ parent.children(".spinner").addClass("show");
84
+ var ajaxURL = saswp_app_object.ajax_url;
85
+ var group_index = jQuery(this).closest(".saswp-placement-group").attr('data-id');
86
+ //ajax call
87
+ $.ajax({
88
+ url : ajaxURL,
89
+ method : "POST",
90
+ data: {
91
+ action: "create_ajax_select_sdwp",
92
+ id: selectedValue,
93
+ number : currentFiledNumber,
94
+ group_number : group_index,
95
+ saswp_call_nonce : saswp_call_nonce
96
+ },
97
+ beforeSend: function(){
98
+ },
99
+ success: function(data){
100
+ // This code is added twice " withThis.find('.ajax-output').remove(); "
101
+ parent.find(".ajax-output").remove();
102
+ parent.children(".spinner").removeClass("show");
103
+ parent.find(".spinner").attr("style","visibility:hidden").hide();
104
+ parent.append(data);
105
+ taxonomyDataCall();
106
+ },
107
+ error: function(data){
108
+ console.log("Failed Ajax Request");
109
+ console.log(data);
110
+ }
111
+ });
112
+ }else{
113
+ $.each(tdindex, function(i,e){
114
+ $(current_change).closest('tr').find('td').eq(e).hide();
115
+
116
+
117
+ });
118
+ }
119
+ });
120
+ taxonomyDataCall();
121
+ $("#notAccessibleForFree").click(function(){
122
+ if($(this).is(':checked')){
123
+ $("#paywall_class_name").parents("tr").show();
124
+ $("#isAccessibleForFree").parents("tr").show();
125
+ }else{
126
+ $("#paywall_class_name").parents("tr").hide();
127
+ $("#isAccessibleForFree").parents("tr").hide();
128
+ }
129
+ })
130
+
131
+ });//jQuery(document) closed
132
+ function taxonomyDataCall(){
133
+ jQuery('select.ajax-output').change(function(){
134
+ var mainSelectedValue = jQuery(".select-post-type").val();
135
+ if(mainSelectedValue=="ef_taxonomy"){
136
+ parentSelector = jQuery(this).parents("td").find(".insert-ajax-select");
137
+ var selectedValue = jQuery(this).val();
138
+ var currentFiledNumber = jQuery(this).attr("name").split("[")[1].replace("]",'');
139
+ var saswp_call_nonce = $("#saswp_select_name_nonce").val();
140
+
141
+ parentSelector.find(".ajax-output-child").remove();
142
+ parentSelector.find(".spinner").attr("style","visibility:visible");
143
+ parentSelector.children(".spinner").addClass("show");
144
+
145
+ var ajaxURL = saswp_app_object.ajax_url;
146
+ var group_index = jQuery(this).closest(".saswp-placement-group").attr('data-id');
147
+ //ajax call
148
+ jQuery.ajax({
149
+ url : ajaxURL,
150
+ method : "POST",
151
+ data: {
152
+ action: "create_ajax_select_sdwp_taxonomy",
153
+ id: selectedValue,
154
+ number : currentFiledNumber,
155
+ group_number : group_index,
156
+ saswp_call_nonce: saswp_call_nonce
157
+ },
158
+ beforeSend: function(){
159
+ },
160
+ success: function(data){
161
+ // This code is added twice " withThis.find('.ajax-output').remove(); "
162
+ parentSelector.find(".ajax-output-child").remove();
163
+ parentSelector.children(".spinner").removeClass("show");
164
+ parentSelector.find(".spinner").attr("style","visibility:hidden").hide();
165
+ parentSelector.append(data);
166
+ taxonomyDataCall();
167
+ },
168
+ error: function(data){
169
+ console.log("Failed Ajax Request");
170
+ console.log(data);
171
+ }
172
+ });
173
+ }
174
+ });
175
+ }
176
+
admin_section/newsletter.php CHANGED
@@ -1,131 +1,131 @@
1
- <?php class saswp_newsletter {
2
- const DISPLAY_VERSION = 'v1.0';
3
- function __construct () {
4
- add_action('admin_enqueue_scripts', array($this, 'saswp_admin_enqueue_scripts'));
5
- }
6
- function saswp_admin_enqueue_scripts () {
7
- $dismissed = explode (',', get_user_meta (wp_get_current_user ()->ID, 'dismissed_wp_pointers', true));
8
- $do_tour = !in_array ('saswp_subscribe_pointer', $dismissed);
9
- if ($do_tour) {
10
- wp_enqueue_style ('wp-pointer');
11
- wp_enqueue_script ('wp-pointer');
12
- add_action('admin_print_footer_scripts', array($this, 'saswp_admin_print_footer_scripts'));
13
- add_action('admin_head', array($this, 'saswp_admin_head')); // Hook to admin head
14
- }
15
- }
16
- function saswp_admin_head () {
17
- ?>
18
- <style type="text/css" media="screen"> #pointer-primary { margin: 0 5px 0 0; } </style>
19
- <?php }
20
- function saswp_admin_print_footer_scripts () {
21
-
22
- global $pagenow;
23
- global $current_user;
24
- $tour = array ();
25
- $tab = isset($_GET['tab']) ? $_GET['tab'] : '';
26
- $function = '';
27
- $button2 = '';
28
- $options = array ();
29
- $show_pointer = false;
30
-
31
- if (!array_key_exists($tab, $tour)) {
32
- $show_pointer = true;
33
- $displayID = '#menu-posts-saswp'; // Define ID used on page html element where we want to display pointer
34
- $content = '<h3>' . sprintf (__('Thanks for using Structured Data!', 'schema-and-structured-data-for-wp'), self::DISPLAY_VERSION) . '</h3>';
35
- $content .= __('<p>Do you want the latest on <b>Structured Data update</b> before others and some best resources on monetization in a single email? - Free just for users of Structured Data!</p>', 'schema-and-structured-data-for-wp');
36
- $content .= __('
37
- <style type="text/css">
38
- .wp-pointer-buttons{ padding:0; overflow: hidden; }
39
- .wp-pointer-content .button-secondary{ left: -25px;background: transparent;top: 5px; border: 0;position: relative; padding: 0; box-shadow: none;margin: 0;color: #0085ba;} .wp-pointer-content .button-primary{ display:none} #afw_mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
40
- </style>
41
- <div id="afw_mc_embed_signup">
42
- <form class="ml-block-form" action="https://app.mailerlite.com/webforms/submit/z7t4b8" data-code="z7t4b8" method="post" target="_blank">
43
- <div id="afw_mc_embed_signup_scroll">
44
- <div class="afw-mc-field-group" style=" margin-left: 15px; width: 195px; float: left;">
45
- <input type="text" name="fields[name]" class="form-control" placeholder="Name" hidden value="' . esc_attr( $current_user->display_name ) . '" style="display:none">
46
-
47
- <input type="text" value="' . esc_attr( $current_user->user_email ) . '" name="fields[email]" class="form-control" placeholder="Email*" style=" width: 180px; padding: 6px 5px;">
48
-
49
- <input type="text" name="fields[company]" class="form-control" placeholder="Website" hidden style=" display:none; width: 168px; padding: 6px 5px;" value="' . esc_attr( get_home_url() ) . '">
50
-
51
- <input type="hidden" name="ml-submit" value="1" />
52
- </div>
53
- <div id="mce-responses">
54
- <div class="response" id="mce-error-response" style="display:none"></div>
55
- <div class="response" id="mce-success-response" style="display:none"></div>
56
- </div>
57
- <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
58
- <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_a631df13442f19caede5a5baf_c9a71edce6" tabindex="-1" value=""></div>
59
- <input type="submit" value="Subscribe" name="subscribe" id="pointer-close" class="button mc-newsletter-sent" style=" background: #0085ba; border-color: #006799; padding: 0px 16px; text-shadow: 0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799; height: 30px; margin-top: 1px; color: #fff; box-shadow: 0 1px 0 #006799;">
60
- </div>
61
- </form>
62
- </div>','schema-and-structured-data-for-wp');
63
- $options = array (
64
- 'content' => $content,
65
- 'position' => array ('edge' => 'left', 'align' => 'left')
66
- );
67
- }
68
- if ($show_pointer) {
69
- $this->saswp_pointer_script ($displayID, $options, esc_html__('No Thanks', 'schema-and-structured-data-for-wp'), $button2, $function);
70
- }
71
- }
72
- function saswp_get_admin_url($page, $tab) {
73
- $url = admin_url();
74
- $url .= $page.'?tab='.$tab;
75
- return $url;
76
- }
77
- function saswp_pointer_script ($displayID, $options, $button1, $button2=false, $function='') {
78
- ?>
79
- <script type="text/javascript">
80
- (function ($) {
81
- var wp_pointers_tour_opts = <?php echo json_encode ($options); ?>, setup;
82
- wp_pointers_tour_opts = $.extend (wp_pointers_tour_opts, {
83
- buttons: function (event, t) {
84
- button= jQuery ('<a id="pointer-close" class="button-secondary">' + '<?php echo $button1; ?>' + '</a>');
85
- button_2= jQuery ('#pointer-close.button');
86
- button.bind ('click.pointer', function () {
87
- t.element.pointer ('close');
88
- });
89
- button_2.on('click', function() {
90
- t.element.pointer ('close');
91
- } );
92
- return button;
93
- },
94
- close: function () {
95
- $.post (ajaxurl, {
96
- pointer: 'saswp_subscribe_pointer',
97
- action: 'dismiss-wp-pointer'
98
- });
99
- },
100
- show: function(event, t){
101
- t.pointer.css({'left':'170px', 'top':'197px', 'position':'fixed'});
102
- }
103
- });
104
- setup = function () {
105
- $('<?php echo esc_attr($displayID); ?>').pointer(wp_pointers_tour_opts).pointer('open');
106
- <?php if ($button2) { ?>
107
- jQuery ('#pointer-close').after ('<a id="pointer-primary" class="button-primary">' + '<?php echo $button2; ?>' + '</a>');
108
- jQuery ('#pointer-primary').click (function () {
109
- <?php echo $function; ?>
110
- });
111
- jQuery ('#pointer-close').click (function () {
112
- $.post (ajaxurl, {
113
- pointer: 'saswp_subscribe_pointer',
114
- action: 'dismiss-wp-pointer'
115
- });
116
- })
117
- <?php } ?>
118
- };
119
- if (wp_pointers_tour_opts.position && wp_pointers_tour_opts.position.defer_loading) {
120
- $(window).bind('load.wp-pointers', setup);
121
- }
122
- else {
123
- setup ();
124
- }
125
- }) (jQuery);
126
- </script>
127
- <?php
128
- }
129
- }
130
- $saswp_newsletter = new saswp_newsletter();
131
  ?>
1
+ <?php class saswp_newsletter {
2
+ const DISPLAY_VERSION = 'v1.0';
3
+ function __construct () {
4
+ add_action('admin_enqueue_scripts', array($this, 'saswp_admin_enqueue_scripts'));
5
+ }
6
+ function saswp_admin_enqueue_scripts () {
7
+ $dismissed = explode (',', get_user_meta (wp_get_current_user ()->ID, 'dismissed_wp_pointers', true));
8
+ $do_tour = !in_array ('saswp_subscribe_pointer', $dismissed);
9
+ if ($do_tour) {
10
+ wp_enqueue_style ('wp-pointer');
11
+ wp_enqueue_script ('wp-pointer');
12
+ add_action('admin_print_footer_scripts', array($this, 'saswp_admin_print_footer_scripts'));
13
+ add_action('admin_head', array($this, 'saswp_admin_head')); // Hook to admin head
14
+ }
15
+ }
16
+ function saswp_admin_head () {
17
+ ?>
18
+ <style type="text/css" media="screen"> #pointer-primary { margin: 0 5px 0 0; } </style>
19
+ <?php }
20
+ function saswp_admin_print_footer_scripts () {
21
+
22
+ global $pagenow;
23
+ global $current_user;
24
+ $tour = array ();
25
+ $tab = isset($_GET['tab']) ? $_GET['tab'] : '';
26
+ $function = '';
27
+ $button2 = '';
28
+ $options = array ();
29
+ $show_pointer = false;
30
+
31
+ if (!array_key_exists($tab, $tour)) {
32
+ $show_pointer = true;
33
+ $displayID = '#menu-posts-saswp'; // Define ID used on page html element where we want to display pointer
34
+ $content = '<h3>' . sprintf (__('Thanks for using Structured Data!', 'schema-and-structured-data-for-wp'), self::DISPLAY_VERSION) . '</h3>';
35
+ $content .= __('<p>Do you want the latest on <b>Structured Data update</b> before others and some best resources on monetization in a single email? - Free just for users of Structured Data!</p>', 'schema-and-structured-data-for-wp');
36
+ $content .= __('
37
+ <style type="text/css">
38
+ .wp-pointer-buttons{ padding:0; overflow: hidden; }
39
+ .wp-pointer-content .button-secondary{ left: -25px;background: transparent;top: 5px; border: 0;position: relative; padding: 0; box-shadow: none;margin: 0;color: #0085ba;} .wp-pointer-content .button-primary{ display:none} #afw_mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
40
+ </style>
41
+ <div id="afw_mc_embed_signup">
42
+ <form class="ml-block-form" action="https://app.mailerlite.com/webforms/submit/z7t4b8" data-code="z7t4b8" method="post" target="_blank">
43
+ <div id="afw_mc_embed_signup_scroll">
44
+ <div class="afw-mc-field-group" style=" margin-left: 15px; width: 195px; float: left;">
45
+ <input type="text" name="fields[name]" class="form-control" placeholder="Name" hidden value="' . esc_attr( $current_user->display_name ) . '" style="display:none">
46
+
47
+ <input type="text" value="' . esc_attr( $current_user->user_email ) . '" name="fields[email]" class="form-control" placeholder="Email*" style=" width: 180px; padding: 6px 5px;">
48
+
49
+ <input type="text" name="fields[company]" class="form-control" placeholder="Website" hidden style=" display:none; width: 168px; padding: 6px 5px;" value="' . esc_attr( get_home_url() ) . '">
50
+
51
+ <input type="hidden" name="ml-submit" value="1" />
52
+ </div>
53
+ <div id="mce-responses">
54
+ <div class="response" id="mce-error-response" style="display:none"></div>
55
+ <div class="response" id="mce-success-response" style="display:none"></div>
56
+ </div>
57
+ <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
58
+ <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_a631df13442f19caede5a5baf_c9a71edce6" tabindex="-1" value=""></div>
59
+ <input type="submit" value="Subscribe" name="subscribe" id="pointer-close" class="button mc-newsletter-sent" style=" background: #0085ba; border-color: #006799; padding: 0px 16px; text-shadow: 0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799; height: 30px; margin-top: 1px; color: #fff; box-shadow: 0 1px 0 #006799;">
60
+ </div>
61
+ </form>
62
+ </div>','schema-and-structured-data-for-wp');
63
+ $options = array (
64
+ 'content' => $content,
65
+ 'position' => array ('edge' => 'left', 'align' => 'left')
66
+ );
67
+ }
68
+ if ($show_pointer) {
69
+ $this->saswp_pointer_script ($displayID, $options, esc_html__('No Thanks', 'schema-and-structured-data-for-wp'), $button2, $function);
70
+ }
71
+ }
72
+ function saswp_get_admin_url($page, $tab) {
73
+ $url = admin_url();
74
+ $url .= $page.'?tab='.$tab;
75
+ return $url;
76
+ }
77
+ function saswp_pointer_script ($displayID, $options, $button1, $button2=false, $function='') {
78
+ ?>
79
+ <script type="text/javascript">
80
+ (function ($) {
81
+ var wp_pointers_tour_opts = <?php echo json_encode ($options); ?>, setup;
82
+ wp_pointers_tour_opts = $.extend (wp_pointers_tour_opts, {
83
+ buttons: function (event, t) {
84
+ button= jQuery ('<a id="pointer-close" class="button-secondary">' + '<?php echo $button1; ?>' + '</a>');
85
+ button_2= jQuery ('#pointer-close.button');
86
+ button.bind ('click.pointer', function () {
87
+ t.element.pointer ('close');
88
+ });
89
+ button_2.on('click', function() {
90
+ t.element.pointer ('close');
91
+ } );
92
+ return button;
93
+ },
94
+ close: function () {
95
+ $.post (ajaxurl, {
96
+ pointer: 'saswp_subscribe_pointer',
97
+ action: 'dismiss-wp-pointer'
98
+ });
99
+ },
100
+ show: function(event, t){
101
+ t.pointer.css({'left':'170px', 'top':'197px', 'position':'fixed'});
102
+ }
103
+ });
104
+ setup = function () {
105
+ $('<?php echo esc_attr($displayID); ?>').pointer(wp_pointers_tour_opts).pointer('open');
106
+ <?php if ($button2) { ?>
107
+ jQuery ('#pointer-close').after ('<a id="pointer-primary" class="button-primary">' + '<?php echo $button2; ?>' + '</a>');
108
+ jQuery ('#pointer-primary').click (function () {
109
+ <?php echo $function; ?>
110
+ });
111
+ jQuery ('#pointer-close').click (function () {
112
+ $.post (ajaxurl, {
113
+ pointer: 'saswp_subscribe_pointer',
114
+ action: 'dismiss-wp-pointer'
115
+ });
116
+ })
117
+ <?php } ?>
118
+ };
119
+ if (wp_pointers_tour_opts.position && wp_pointers_tour_opts.position.defer_loading) {
120
+ $(window).bind('load.wp-pointers', setup);
121
+ }
122
+ else {
123
+ setup ();
124
+ }
125
+ }) (jQuery);
126
+ </script>
127
+ <?php
128
+ }
129
+ }
130
+ $saswp_newsletter = new saswp_newsletter();
131
  ?>
admin_section/plugin-installer/install.php ADDED
@@ -0,0 +1,734 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Merlin WP
4
+ * Better WordPress Theme Onboarding
5
+ *
6
+ * The following code is a derivative work from the
7
+ * Envato WordPress Theme Setup Wizard by David Baker.
8
+
9
+ * @link https://merlinwp.com/
10
+ * @author Richard Tabor, from ThemeBeans.com
11
+ * @copyright Copyright (c) 2017, Merlin WP of Inventionn LLC
12
+ * @license Licensed GPLv3 for open source use
13
+ */
14
+ $saswp_settings = saswp_defaultSettings();
15
+ $saswp_installer_config = array(
16
+ 'installer_dir' => 'plugin-installer',
17
+ 'plugin_title' => esc_html__( ucfirst( 'Schema & Structured Data for WP' ), 'schema-and-structured-data-for-wp'),
18
+ 'start_steps' => 1,
19
+ 'total_steps' => 5,
20
+ 'installerpage' => 'saswp-setup-wizard',
21
+ 'dev_mode' => false,
22
+ 'steps' => array(
23
+ 1=>array(
24
+ 'title'=>esc_html__('Welcome', 'schema-and-structured-data-for-wp'),
25
+ 'fields'=>'',
26
+ 'description'=>esc_html__('This wizard will set up AMP on your website, install plugin, and import content. It is optional & should take only a few minutes.','schema-and-structured-data-for-wp'),
27
+ ),
28
+ 2=>array(
29
+ 'title'=>esc_html__('General Settings', 'schema-and-structured-data-for-wp'),
30
+ 'description'=>esc_html__('', 'schema-and-structured-data-for-wp'),
31
+ 'fields'=>saswp_general_setting_fields_callback()
32
+ ),
33
+ 3=>array(
34
+ 'title'=>esc_html__('Social Profiles', 'schema-and-structured-data-for-wp'),
35
+ 'description'=>esc_html__('Would you like to setup Social Profiles?', 'schema-and-structured-data-for-wp'),
36
+ 'fields'=>saswp_social_profile_fields_callback(),
37
+ ),
38
+ 4=>array(
39
+ 'title'=>esc_html__('Select Schema', 'schema-and-structured-data-for-wp'),
40
+ 'description'=>esc_html__('Where would you like to enable the schema?', 'schema-and-structured-data-for-wp'),
41
+ 'fields'=>saswp_select_schema_fields_callback(),
42
+ ),
43
+ 5=>array(
44
+ 'title'=>esc_html__('Enjoy', 'schema-and-structured-data-for-wp'),
45
+ 'description'=>esc_html__('Navigate to ', 'schema-and-structured-data-for-wp'),
46
+ 'fields'=>'',
47
+ ),
48
+ ),
49
+ 'current_step'=>array(
50
+ 'title'=>'',
51
+ 'step_id'=>1
52
+ )
53
+ );
54
+ add_action( 'admin_menu', 'saswp_add_admin_menu' );
55
+ add_action( 'admin_init', 'saswp_installer_init');
56
+ add_action( 'admin_footer', 'saswp_svg_sprite');
57
+ add_action( 'wp_ajax_saswp_save_installer', 'saswp_save_steps_data', 10, 0 );
58
+ function saswp_add_admin_menu(){
59
+ global $saswp_installer_config;
60
+ saswp_installer_init();
61
+ }
62
+
63
+ function saswp_installer_init(){
64
+ // Exit if the user does not have proper permissions
65
+ if(! current_user_can( 'manage_options' ) ) {
66
+ return ;
67
+ }
68
+ global $saswp_installer_config;
69
+ saswp_steps_call();
70
+ }
71
+
72
+ function saswp_steps_call(){
73
+ global $saswp_installer_config;
74
+ if ( empty( $_GET['page'] ) || $saswp_installer_config['installerpage'] !== $_GET['page'] ) {
75
+ return;
76
+ }
77
+ if ( ob_get_length() ) {
78
+ ob_end_clean();
79
+ }
80
+ $step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : $saswp_installer_config['start_steps'];
81
+ $title = $saswp_installer_config['steps'][$step]['title'];
82
+ $saswp_installer_config['current_step']['step_id'] = $step;
83
+
84
+ // Use minified libraries if dev mode is turned on.
85
+ $suffix = '';
86
+ // Enqueue styles.
87
+ wp_enqueue_style( 'saswp_install', SASWP_PLUGIN_URL. '/admin_section/css/saswp-install' . $suffix . '.css' , array( 'wp-admin' ), SASWP_VERSION );
88
+ // Enqueue javascript.
89
+ wp_enqueue_script( 'saswp_install', SASWP_PLUGIN_URL. '/admin_section/js/saswp-install' . $suffix . '.js' , array( 'jquery-core' ), SASWP_VERSION );
90
+ //wp_enqueue_script( 'saswp_install_script', SASWP_PLUGIN_URL. '/admin_section/js/main-script.js' , array( 'jquery-core' ), '0.1' );
91
+
92
+ wp_localize_script( 'saswp_install', 'saswp_install_params', array(
93
+ 'ajaxurl' => admin_url( 'admin-ajax.php' ),
94
+ 'wpnonce' => wp_create_nonce( 'saswp_install_nonce' ),
95
+ 'pluginurl' => SASWP_DIR_URI,
96
+ ) );
97
+
98
+
99
+ ob_start();
100
+ saswp_install_header(); ?>
101
+ <div class="merlin__wrapper">
102
+ <div class="saswp_install_wizard"><?php esc_html_e('Schema and Structured Data Installation Wizard','schema-and-structured-data-for-wp'); ?></div>
103
+ <div class="merlin__content merlin__content--<?php echo esc_attr( strtolower( $title ) ); ?>">
104
+ <?php
105
+ // Content Handlers.
106
+ $show_content = true;
107
+
108
+ if ( ! empty( $_REQUEST['save_step'] ) && isset( $saswp_installer_config['current_step']['steps'] ) ) {
109
+ //saswp_save_steps_data();
110
+ }
111
+
112
+ if ( $show_content ) {
113
+ saswp_show_steps_body();
114
+ } ?>
115
+
116
+ <?php saswp_step_output_bottom_dots(); ?>
117
+
118
+ </div>
119
+
120
+ <?php echo sprintf( '<a class="return-to-dashboard" href="%s">%s</a>', esc_url( admin_url( 'admin.php?page=structured_data_options' ) ), esc_html( 'Return to dashboard' ) ); ?>
121
+
122
+ </div>
123
+
124
+ <?php saswp_install_footer();
125
+ exit;
126
+ }
127
+
128
+ function saswp_show_steps_body(){
129
+ global $saswp_installer_config;
130
+ if($saswp_installer_config['total_steps']==$saswp_installer_config['current_step']['step_id']){
131
+ call_user_func('saswp_finish_page');
132
+ }else{
133
+ if(function_exists('saswp_step'.$saswp_installer_config['current_step']['step_id'])){
134
+ call_user_func('saswp_step'.$saswp_installer_config['current_step']['step_id']);
135
+ }else{
136
+ call_user_func('saswp_finish_page');
137
+ }
138
+ }
139
+ }
140
+
141
+
142
+ function saswp_step1(){
143
+ global $saswp_installer_config;
144
+ $stepDetails = $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']];
145
+ ?>
146
+ <div class="merlin__content--transition">
147
+
148
+ <div class="saswp_branding"></div>
149
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
150
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
151
+ </svg>
152
+
153
+ <h1><?php echo $stepDetails['title']; ?></h1>
154
+
155
+ <p><?php echo esc_html( 'This Installation Wizard helps you to setup the necessary options for schema & structured data. It is optional & should take only a few minutes.' ); ?></p>
156
+
157
+ </div>
158
+
159
+ <footer class="merlin__content__footer">
160
+ <a href="<?php echo esc_url( admin_url( 'admin.php?page=structured_data_options' ) ); ?>" class="merlin__button merlin__button--skip"><?php echo esc_html( 'Cancel' ); ?></a>
161
+
162
+ <a href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--next merlin__button--proceed merlin__button--colorchange"><?php echo esc_html( 'Start' ); ?></a>
163
+ <?php wp_nonce_field( 'saswp_install_nonce' ); ?>
164
+ </footer>
165
+ <?php
166
+ }
167
+
168
+ function saswp_step2(){
169
+ global $saswp_installer_config;
170
+ $stepDetails = $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']];
171
+
172
+ ?>
173
+
174
+ <div class="merlin__content--transition">
175
+
176
+ <div class="saswp_branding"></div>
177
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
178
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
179
+ </svg>
180
+
181
+ <h1><?php echo $stepDetails['title']; ?></h1>
182
+
183
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
184
+
185
+ </div>
186
+ <form action="" method="post">
187
+
188
+ <ul class="merlin__drawer--import-content">
189
+
190
+ <?php
191
+ wp_enqueue_media ();
192
+ echo $stepDetails['fields'];
193
+ ?>
194
+
195
+ </ul>
196
+
197
+
198
+ <footer class="merlin__content__footer">
199
+ <?php saswp_skip_button(); ?>
200
+
201
+ <a id="skip" href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
202
+
203
+ <a href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
204
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_loading_spinner(); ?>
205
+ </a>
206
+
207
+ <?php wp_nonce_field( 'saswp_install_nonce' ); ?>
208
+ </footer>
209
+ </form>
210
+ <?php
211
+ }
212
+
213
+ function saswp_step3(){
214
+ global $saswp_installer_config;
215
+ $stepDetails = $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']];
216
+ ?>
217
+
218
+ <div class="merlin__content--transition">
219
+
220
+ <div class="saswp_branding"></div>
221
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
222
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
223
+ </svg>
224
+
225
+ <h1><?php echo $stepDetails['title']; ?></h1>
226
+
227
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
228
+
229
+
230
+ </div>
231
+ <form action="" method="post">
232
+
233
+ <ul class="merlin__drawer--import-content">
234
+ <?php
235
+ echo $stepDetails['fields'];
236
+ ?>
237
+
238
+ </ul>
239
+
240
+
241
+ <footer class="merlin__content__footer">
242
+ <?php saswp_skip_button(); ?>
243
+
244
+ <a id="skip" href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
245
+
246
+ <a href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
247
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_loading_spinner(); ?>
248
+ </a>
249
+
250
+
251
+ <?php wp_nonce_field( 'saswp_install_nonce' ); ?>
252
+ </footer>
253
+ </form>
254
+ <?php
255
+ }
256
+
257
+ function saswp_step4(){
258
+ global $saswp_installer_config;
259
+ $stepDetails = $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']];
260
+ ?>
261
+
262
+ <div class="merlin__content--transition">
263
+
264
+ <div class="saswp_branding"></div>
265
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
266
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
267
+ </svg>
268
+
269
+ <h1><?php echo $stepDetails['title']; ?></h1>
270
+
271
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
272
+ </div>
273
+ <form action="" method="post">
274
+
275
+ <ul class="merlin__drawer--import-content">
276
+ <li>
277
+ <?php
278
+ echo $stepDetails['fields'];
279
+ ?>
280
+ </li>
281
+ </ul>
282
+
283
+
284
+ <footer class="merlin__content__footer">
285
+ <?php saswp_skip_button(); ?>
286
+
287
+ <a id="skip" href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
288
+
289
+ <a href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
290
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_loading_spinner(); ?>
291
+ </a>
292
+
293
+
294
+ <?php wp_nonce_field( 'saswp_install_nonce' ); ?>
295
+ </footer>
296
+ </form>
297
+ <?php
298
+ }
299
+
300
+ function saswp_step5(){
301
+ global $saswp_installer_config;
302
+ $stepDetails = $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']];
303
+ ?>
304
+
305
+ <div class="merlin__content--transition">
306
+
307
+ <div class="saswp_branding"></div>
308
+ <svg class="icon icon--checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
309
+ <circle class="icon--checkmark__circle" cx="26" cy="26" r="25" fill="none"/><path class="icon--checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8"/>
310
+ </svg>
311
+
312
+ <h1><?php echo $stepDetails['title']; ?></h1>
313
+
314
+ <p><?php echo isset($stepDetails['description'])? $stepDetails['description'] : ''; ?></p>
315
+
316
+
317
+
318
+ </div>
319
+ <form action="" method="post">
320
+
321
+ <ul class="merlin__drawer--import-content">
322
+ <?php
323
+ echo $stepDetails['fields'];
324
+ ?>
325
+ </ul>
326
+
327
+
328
+ <footer class="merlin__content__footer">
329
+ <?php saswp_skip_button(); ?>
330
+
331
+ <a id="skip" href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--skip merlin__button--proceed"><?php echo esc_html( 'Skip' ); ?></a>
332
+
333
+ <a href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--next button-next" data-callback="save_logo">
334
+ <span class="merlin__button--loading__text"><?php echo esc_html( 'Next' ); ?></span><?php echo saswp_loading_spinner(); ?>
335
+ </a>
336
+
337
+ <?php wp_nonce_field( 'saswp_install_nonce' ); ?>
338
+ </footer>
339
+ </form>
340
+ <?php
341
+ }
342
+
343
+
344
+
345
+
346
+
347
+
348
+
349
+
350
+ function saswp_save_steps_data(){
351
+
352
+ if(isset($_POST['sd_data'])){
353
+ $pre_sd_data = get_option('sd_data');
354
+ $pre_sd_data['sd_initial_wizard_status'] =1;
355
+ $sd_data = $_POST['sd_data'];
356
+ if($pre_sd_data){
357
+ $sd_data = array_merge($pre_sd_data,$sd_data);
358
+ }
359
+ update_option('sd_data',$sd_data);
360
+ }
361
+
362
+ if(isset($_POST['sd_data_create__post_schema']) && isset($_POST['sd_data_create__post_schema_checkbox'])){
363
+ $checkbox = array_filter($_POST['sd_data_create__post_schema_checkbox']);
364
+ if(count($checkbox)>0){
365
+ foreach ($checkbox as $key => $value) {
366
+ $postType = $_POST['sd_data_create__post_schema'][$key]['posttype'];
367
+ $schemaType = $_POST['sd_data_create__post_schema'][$key]['schema_type'];
368
+
369
+ $postarr = array(
370
+ 'post_type'=>'saswp',
371
+ 'post_title'=> ucfirst($postType),
372
+ 'post_status'=>'publish',
373
+ );
374
+ $insertedPageId = wp_insert_post( $postarr );
375
+ if($insertedPageId){
376
+ $data_group_array = array();
377
+ $data_group_array['group-0'] =array(
378
+ 'data_array' => array(
379
+ array(
380
+ 'key_1' => 'post_type',
381
+ 'key_2' => 'equal',
382
+ 'key_3' => $postType,
383
+ )
384
+ )
385
+ );
386
+ $schema_options_array = array('isAccessibleForFree'=>False,'notAccessibleForFree'=>0,'paywall_class_name'=>'');
387
+ update_post_meta( $insertedPageId, 'data_group_array', $data_group_array);
388
+ update_post_meta( $insertedPageId, 'schema_type', $schemaType);
389
+ update_post_meta( $insertedPageId, 'schema_options', $schema_options_array);
390
+ }
391
+ }
392
+
393
+ }
394
+ /**/
395
+
396
+
397
+
398
+ }
399
+ wp_send_json(
400
+ array(
401
+ 'done' => 1,
402
+ 'message' => "Stored Successfully",
403
+ )
404
+ );
405
+ }
406
+
407
+
408
+ function saswp_skip_button(){
409
+ ?>
410
+ <a href="<?php echo esc_url( saswp_step_next_link() ); ?>" class="merlin__button merlin__button--skip"><?php echo esc_html( 'Skip' ); ?></a>
411
+ <?php
412
+ }
413
+ function saswp_finish_page() {
414
+ global $saswp_installer_config;
415
+ // Theme Name.
416
+ $plugin_title = $saswp_installer_config['plugin_title'];
417
+ // Strings passed in from the config file.
418
+ $strings = null;
419
+
420
+
421
+ $allowed_html_array = array(
422
+ 'a' => array(
423
+ 'href' => array(),
424
+ 'title' => array(),
425
+ 'target' => array(),
426
+ ),
427
+ );
428
+
429
+ update_option( 'saswp_installer_completed', time() ); ?>
430
+
431
+ <div class="merlin__content--transition">
432
+
433
+ <div class="saswp_branding"></div>
434
+
435
+ <h1><?php echo esc_html__( 'Setup Done. Have fun!', 'schema-and-structured-data-for-wp' ); ?></h1>
436
+
437
+ <p><?php echo esc_html__( 'Basic Setup has been done. Navigate to plugin options panel to access all the options.','schema-and-structured-data-for-wp' ); ?></p>
438
+
439
+ </div>
440
+
441
+ <footer class="merlin__content__footer merlin__content__footer--fullwidth">
442
+
443
+ <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=saswp&page=structured_data_options' ) ); ?>" class="merlin__button merlin__button--blue merlin__button--fullwidth merlin__button--popin"><?php echo esc_html( 'Let\'s Go' ); ?></a>
444
+
445
+ <ul class="merlin__drawer merlin__drawer--extras">
446
+
447
+ <li><?php //echo wp_kses( $link_1, $allowed_html_array ); ?></li>
448
+ <li><?php //echo wp_kses( $link_2, $allowed_html_array ); ?></li>
449
+ <li><?php //echo wp_kses( $link_3, $allowed_html_array ); ?></li>
450
+
451
+ </ul>
452
+
453
+ </footer>
454
+
455
+ <?php
456
+ }
457
+
458
+
459
+ function saswp_loading_spinner(){
460
+ global $saswp_installer_config;
461
+ $spinner = SASWP_DIR_NAME. $saswp_installer_config['installer_dir']. '/images/spinner.php';
462
+
463
+ // Retrieve the spinner.
464
+ get_template_part( $spinner );
465
+ }
466
+
467
+ function saswp_svg_sprite() {
468
+ global $saswp_installer_config;
469
+ // Define SVG sprite file.
470
+ $svg = SASWP_DIR_NAME. $saswp_installer_config['installer_dir'] . '/images/sprite.svg' ;
471
+
472
+ // If it exists, include it.
473
+ if ( file_exists( $svg ) ) {
474
+ require_once apply_filters( 'merlin_svg_sprite', $svg );
475
+ }
476
+ }
477
+ function saswp_step_next_link() {
478
+ global $saswp_installer_config;
479
+ $step = $saswp_installer_config['current_step']['step_id'] + 1;
480
+
481
+ return add_query_arg( 'step', $step );
482
+ }
483
+
484
+ function saswp_install_header() {
485
+ global $saswp_installer_config;
486
+
487
+ // Get the current step.
488
+ $current_step = strtolower( $saswp_installer_config['steps'][$saswp_installer_config['current_step']['step_id']]['title'] ); ?>
489
+
490
+ <!DOCTYPE html>
491
+ <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
492
+ <head>
493
+ <meta name="viewport" content="width=device-width"/>
494
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
495
+ <title><?php echo ucwords($current_step); ?></title>
496
+ <?php do_action( 'admin_print_styles' ); ?>
497
+ <?php do_action( 'admin_print_scripts' ); ?>
498
+ <?php do_action( 'admin_head' ); ?>
499
+ </head>
500
+ <body class="merlin__body merlin__body--<?php echo esc_attr( $current_step ); ?>">
501
+ <?php
502
+ }
503
+
504
+
505
+ function saswp_install_footer() {
506
+ ?>
507
+ </body>
508
+ <?php do_action( 'admin_footer' ); ?>
509
+ <?php do_action( 'admin_print_footer_scripts' ); ?>
510
+ </html>
511
+ <?php
512
+ }
513
+
514
+ function saswp_makesvg( $args = array() ){
515
+ // Make sure $args are an array.
516
+ if ( empty( $args ) ) {
517
+ return __( 'Please define default parameters in the form of an array.', 'accelerated-mobile-pages' );
518
+ }
519
+
520
+ // Define an icon.
521
+ if ( false === array_key_exists( 'icon', $args ) ) {
522
+ return __( 'Please define an SVG icon filename.', 'accelerated-mobile-pages' );
523
+ }
524
+
525
+ // Set defaults.
526
+ $defaults = array(
527
+ 'icon' => '',
528
+ 'title' => '',
529
+ 'desc' => '',
530
+ 'aria_hidden' => true, // Hide from screen readers.
531
+ 'fallback' => false,
532
+ );
533
+
534
+ // Parse args.
535
+ $args = wp_parse_args( $args, $defaults );
536
+
537
+ // Set aria hidden.
538
+ $aria_hidden = '';
539
+
540
+ if ( true === $args['aria_hidden'] ) {
541
+ $aria_hidden = ' aria-hidden="true"';
542
+ }
543
+
544
+ // Set ARIA.
545
+ $aria_labelledby = '';
546
+
547
+ if ( $args['title'] && $args['desc'] ) {
548
+ $aria_labelledby = ' aria-labelledby="title desc"';
549
+ }
550
+
551
+ // Begin SVG markup.
552
+ $svg = '<svg class="icon icon--' . esc_attr( $args['icon'] ) . '"' . $aria_hidden . $aria_labelledby . ' role="img">';
553
+
554
+ // If there is a title, display it.
555
+ if ( $args['title'] ) {
556
+ $svg .= '<title>' . esc_html( $args['title'] ) . '</title>';
557
+ }
558
+
559
+ // If there is a description, display it.
560
+ if ( $args['desc'] ) {
561
+ $svg .= '<desc>' . esc_html( $args['desc'] ) . '</desc>';
562
+ }
563
+
564
+ $svg .= '<use xlink:href="#icon-' . esc_html( $args['icon'] ) . '"></use>';
565
+
566
+ // Add some markup to use as a fallback for browsers that do not support SVGs.
567
+ if ( $args['fallback'] ) {
568
+ $svg .= '<span class="svg-fallback icon--' . esc_attr( $args['icon'] ) . '"></span>';
569
+ }
570
+
571
+ $svg .= '</svg>';
572
+
573
+ return $svg;
574
+
575
+ }
576
+
577
+ /**
578
+ * Adds data attributes to the body, based on Customizer entries.
579
+ */
580
+ function saswp_svg_allowed_html() {
581
+
582
+ $array = array(
583
+ 'svg' => array(
584
+ 'class' => array(),
585
+ 'aria-hidden' => array(),
586
+ 'role' => array(),
587
+ ),
588
+ 'use' => array(
589
+ 'xlink:href' => array(),
590
+ ),
591
+ );
592
+
593
+ return $array;
594
+
595
+ }
596
+
597
+ function saswp_step_output_bottom_dots(){
598
+ global $saswp_installer_config;
599
+ ?>
600
+ <ol class="dots">
601
+
602
+ <?php for( $i = 1; $i<$saswp_installer_config['total_steps']; $i++ ) :
603
+
604
+ $class_attr = '';
605
+ $show_link = false;
606
+
607
+ if ( $i === $saswp_installer_config['current_step']['step_id'] ) {
608
+ $class_attr = 'active';
609
+ } elseif ( $saswp_installer_config['current_step']['step_id'] > $i) {
610
+ $class_attr = 'done';
611
+ $show_link = true;
612
+ } ?>
613
+
614
+ <li class="<?php echo esc_attr( $class_attr ); ?>">
615
+ <a href="<?php echo esc_url( add_query_arg( 'step', $i ) ); ?>" title="<?php echo esc_attr( $saswp_installer_config['current_step']['title'] ); ?>"></a>
616
+ </li>
617
+
618
+ <?php endfor; ?>
619
+
620
+ </ol>
621
+ <?php
622
+ }
623
+
624
+
625
+ function saswp_general_setting_fields_callback(){
626
+ global $sd_data;
627
+ $settings = $sd_data;
628
+ $returnHtml = '<li class="saswp_fields">
629
+ <label>'.esc_html__('Data Type', 'schema-and-structured-data-for-wp').'</label>
630
+ <select name="sd_data[saswp_kb_type]">
631
+ <option value="Organization" '.($sd_data['saswp_kb_type']=='Organization'? 'selected' : '').'>'.esc_html__('Organization', 'schema-and-structured-data-for-wp').'</option>
632
+ <option value="Person" '.($sd_data['saswp_kb_type']=='Person'? 'selected' : '').'>'.esc_html__('Person', 'schema-and-structured-data-for-wp').'</option>
633
+ </select>
634
+ </li>
635
+ <li class="saswp_fields">
636
+ <label>'.esc_html__('About', 'schema-and-structured-data-for-wp').'</label>
637
+ '. wp_dropdown_pages( array(
638
+ 'name' => 'sd_data[sd_about_page]',
639
+ 'id' => 'sd_about_page',
640
+ 'echo' => 0,
641
+ 'show_option_none' => esc_attr( 'Select an item' ),
642
+ 'option_none_value' => '',
643
+ 'selected' => isset($settings['sd_about_page']) ? $settings['sd_about_page'] : '',
644
+ )).'
645
+ </li>
646
+ <li class="saswp_fields">
647
+ <label>'.esc_html__('Contact', 'schema-and-structured-data-for-wp').'</label>
648
+ '.wp_dropdown_pages( array(
649
+ 'name' => 'sd_data[sd_contact_page]',
650
+ 'id' => 'sd_contact_page-select',
651
+ 'echo' => 0,
652
+ 'show_option_none' => esc_attr( 'Select an item' ),
653
+ 'option_none_value' => '',
654
+ 'selected' => isset($settings['sd_contact_page']) ? $settings['sd_contact_page'] : '',
655
+ )).'
656
+ </li>';
657
+ return $returnHtml;
658
+ }
659
+
660
+ function saswp_social_profile_fields_callback(){
661
+ global $sd_data;
662
+ $settings = $sd_data;
663
+ $sd_facebook ='';
664
+ $sd_twitter ='';
665
+ $sd_linkedin ='';
666
+ $sd_instagram ='';
667
+
668
+ if(isset($settings['sd_facebook'])){
669
+ $sd_facebook = $settings['sd_facebook'];
670
+ }
671
+ if(isset($settings['sd_twitter'])){
672
+ $sd_twitter = $settings['sd_twitter'];
673
+ }
674
+ if(isset($settings['sd_linkedin'])){
675
+ $sd_linkedin = $settings['sd_linkedin'];
676
+ }
677
+ if(isset($settings['sd_instagram'])){
678
+ $sd_instagram = $settings['sd_instagram'];
679
+ }
680
+ $returnHtml = '
681
+ <li class="merlin__drawer--import-content__list-item status saswp-social-fields">
682
+ <input type="checkbox" name="sd_data[saswp-facebook-enable]" id="saswp-facebook-enable" class="checkbox" value="1" '.($sd_facebook!=''? 'checked': '').'>
683
+ <label for="saswp-facebook-enable"><i></i><span>'.esc_html__('Facebook', 'schema-and-structured-data-for-wp').'</span></label>
684
+ <input type="text" name="sd_data[sd_facebook]" value="'.$sd_facebook.'" placeholder="'.esc_html__('Enter Facebook Page UR', 'schema-and-structured-data-for-wp').'">
685
+ </li>
686
+ <li class="merlin__drawer--import-content__list-item status saswp-social-fields">
687
+ <input type="checkbox" name="sd_data[saswp-twitter-enable]" id="saswp-twitter-enable" class="checkbox" value="1" '.($sd_twitter!=''? 'checked': '').'>
688
+ <label for="saswp-twitter-enable"><i></i><span>'.esc_html__('Twitter', 'schema-and-structured-data-for-wp').'</span></label>
689
+ <input type="text" name="sd_data[sd_twitter]" value="'.$sd_twitter.'" placeholder="'.esc_html__('Enter Twitter Page UR', 'schema-and-structured-data-for-wp').'">
690
+ </li>
691
+ <li class="merlin__drawer--import-content__list-item status saswp-social-fields">
692
+ <input type="checkbox" name="sd_data[saswp-linkedin-enable]" id="saswp-linkedin-enable" class="checkbox" value="1" '.($sd_linkedin!=''? 'checked': '').'>
693
+ <label for="saswp-linkedin-enable"><i></i><span>'.esc_html__('Linkedin', 'schema-and-structured-data-for-wp').'</span></label>
694
+ <input type="text" name="sd_data[sd_linkedin]" value="'.$sd_linkedin.'" placeholder="'.esc_html__('Enter Linkedin Page UR', 'schema-and-structured-data-for-wp').'">
695
+ </li>
696
+ <li class="merlin__drawer--import-content__list-item status saswp-social-fields">
697
+ <input type="checkbox" name="sd_data[saswp-instagram-enable]" id="saswp-instagram-enable" class="checkbox" value="1" '.($sd_instagram!=''? 'checked': '').'>
698
+ <label for="saswp-instagram-enable"><i></i><span>'.esc_html__('Instagram', 'schema-and-structured-data-for-wp').'</span></label>
699
+ <input type="text" name="sd_data[sd_instagram]" value="'.$sd_instagram.'" placeholder="'.esc_html__('Enter Linkedin Page UR', 'schema-and-structured-data-for-wp').'">
700
+ </li>';
701
+ return $returnHtml;
702
+ }
703
+
704
+ function saswp_select_schema_fields_callback(){
705
+ global $sd_data;
706
+ $returnHtml = $post_types = '';
707
+ $post_types = get_post_types( array( 'public' => true ), 'names' );
708
+ // Remove Unsupported Post types
709
+ unset($post_types['attachment'], $post_types['amp_acf'], $post_types['saswp']);
710
+ $option = '';
711
+ if(count($post_types)>0){
712
+ foreach ($post_types as $key => $value) {
713
+ $returnHtml .= '<li class="merlin__drawer--import-content__list-item status post-type-fields">
714
+ <input type="checkbox" name="sd_data_create__post_schema_checkbox['.$key.']" id="sd_data_create__post_schema_'.$key.'" class="checkbox" value="1" >
715
+ <label for="sd_data_create__post_schema_'.$key.'"><i></i><span>'.ucfirst($value).'</span></label>
716
+ <input type="hidden" name="sd_data_create__post_schema['.$key.'][posttype]" class="checkbox" value="'.$key.'" >
717
+
718
+ <select id="schema_type" name="sd_data_create__post_schema['.$key.'][schema_type]">
719
+ <option value="">'.esc_html__('Select Schema Type', 'schema-and-structured-data-for-wp').'</option>
720
+ <option value="Blogposting">'.esc_html__('Blogposting', 'schema-and-structured-data-for-wp').'</option>
721
+ <option value="NewsArticle">'.esc_html__('NewsArticl', 'schema-and-structured-data-for-wp').'e</option>
722
+ <option value="WebPage">'.esc_html__('WebPage', 'schema-and-structured-data-for-wp').'</option>
723
+ <option value="Article">'.esc_html__('Article', 'schema-and-structured-data-for-wp').'</option>
724
+ <option value="Recipe">'.esc_html__('Recipe', 'schema-and-structured-data-for-wp').'</option>
725
+ <option value="Product">'.esc_html__('Product', 'schema-and-structured-data-for-wp').'</option>
726
+ <option value="VideoObject">'.esc_html__('VideoObject', 'schema-and-structured-data-for-wp').'</option>
727
+ </select>
728
+ </li>';
729
+ }
730
+ }
731
+
732
+ return $returnHtml;
733
+ }
734
+ ?>
admin_section/settings.php CHANGED
@@ -1,686 +1,760 @@
1
- <?php
2
- /**
3
- * Admin Settings
4
- * Function saswp_add_menu_links
5
- *
6
- */
7
- function saswp_add_menu_links() {
8
- // Settings page - Same as main menu page
9
- add_submenu_page( 'edit.php?post_type=saswp', esc_html__( 'Schema And Structured Data For Wp', 'schema-and-structured-data-for-wp' ), esc_html__( 'Settings', 'schema-and-structured-data-for-wp' ), 'manage_options', 'structured_data_options', 'saswp_admin_interface_render' );
10
-
11
- }
12
- add_action( 'admin_menu', 'saswp_add_menu_links' );
13
-
14
- function saswp_admin_interface_render(){
15
- // Authentication
16
- if ( ! current_user_can( 'manage_options' ) ) {
17
- return;
18
- }
19
- // Handing save settings
20
- if ( isset( $_GET['settings-updated'] ) ) {
21
- // Show Settings Saved Message
22
- settings_errors();
23
- }
24
- $is_amp =false;
25
- if ( is_plugin_active('accelerated-mobile-pages/accelerated-moblie-pages.php') || is_plugin_active('amp/amp.php') ) {
26
- $is_amp = true;
27
- }
28
- if($is_amp){
29
- $tab = saswp_get_tab('general', array('general','knowledge','schema','amp', 'help'));
30
- }else{
31
- $tab = saswp_get_tab('general', array('general','knowledge','schema', 'help'));
32
- }
33
-
34
- ?>
35
- <div class="wrap saswp-settings-form">
36
- <h1> <?php echo esc_html__( 'Schema And Structured Data For WP', 'schema-and-structured-data-for-wp' ); ?></h1>
37
- <h2 class="nav-tab-wrapper saswp-tabs">
38
- <?php
39
-
40
- echo '<a href="' . esc_url(saswp_admin_link('general')) . '" class="nav-tab ' . esc_attr( $tab == 'general' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-admin-generic"></span> ' . esc_html__('General','schema-and-structured-data-for-wp') . '</a>';
41
-
42
- echo '<a href="' . esc_url(saswp_admin_link('knowledge')) . '" class="nav-tab ' . esc_attr( $tab == 'knowledge' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-info"></span> ' . esc_html__('Knowledge Base','schema-and-structured-data-for-wp') . '</a>';
43
-
44
- echo '<a href="' . esc_url(saswp_admin_link('schema')) . '" class="nav-tab ' . esc_attr( $tab == 'schema' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-welcome-view-site"></span> ' . esc_html__('Schema Type','schema-and-structured-data-for-wp') . '</a>';
45
-
46
- if($is_amp){
47
- echo '<a href="' . esc_url(saswp_admin_link('amp')) . '" class="nav-tab ' . esc_attr( $tab == 'amp' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-welcome-view-site"></span> ' . esc_html__('AMP','schema-and-structured-data-for-wp') . '</a>';
48
- }
49
-
50
- echo '<a href="' . esc_url(saswp_admin_link('help')) . '" class="nav-tab ' . esc_attr( $tab == 'help' ? 'nav-tab-active' : '') . '"><span class="dashicons dashicons-dashboard"></span> ' . esc_html__('Help','schema-and-structured-data-for-wp') . '</a>';
51
- ?>
52
- </h2>
53
- <form action="options.php" method="post" enctype="multipart/form-data">
54
- <div class="form-wrap">
55
- <?php
56
- // Output nonce, action, and option_page fields for a settings page.
57
- settings_fields( 'sd_data_group' );
58
- echo "<div class='saswp-general' ".( $tab != 'general' ? 'style="display:none;"' : '').">";
59
- // general Application Settings
60
- do_settings_sections( 'saswp_general_section' ); // Page slug
61
- echo "</div>";
62
-
63
- echo "<div class='saswp-knowledge' ".( $tab != 'knowledge' ? 'style="display:none;"' : '').">";
64
- // knowledge Application Settings
65
- do_settings_sections( 'saswp_knowledge_section' ); // Page slug
66
- echo "</div>";
67
- echo "<div class='saswp-schema' ".( $tab != 'schema' ? 'style="display:none;"' : '').">";
68
- do_settings_sections( 'saswp_schema_section' ); // Page slug
69
- echo "</div>";
70
-
71
- echo "<div class='saswp-amp' ".( $tab != 'amp' ? 'style="display:none;"' : '').">";
72
- do_settings_sections( 'saswp_amp_section' ); // Page slug
73
- echo "</div>";
74
-
75
- echo "<div class='saswp-help' ".( $tab != 'help' ? 'style="display:none;"' : '').">";
76
- // Status
77
- do_settings_sections( 'saswp_help_section' ); // Page slug
78
- echo "</div>";
79
-
80
- ?>
81
- </div>
82
- <div class="button-wrapper">
83
- <?php
84
- // Output save settings button
85
- submit_button( esc_html__('Save Settings', 'schema-and-structured-data-for-wp') );
86
- ?>
87
- </div>
88
- </form>
89
- </div>
90
- <?php
91
- }
92
- /*
93
- WP Settings API
94
- */
95
- add_action('admin_init', 'saswp_settings_init');
96
-
97
- function saswp_settings_init(){
98
- register_setting( 'sd_data_group', 'sd_data' );
99
- add_settings_section('saswp_general_section', __return_false(), '__return_false', 'saswp_general_section');
100
-
101
- add_settings_field(
102
- 'general_settings', // ID
103
- '', // Title
104
- 'saswp_general_page_callback', // CB
105
- 'saswp_general_section', // Page slug
106
- 'saswp_general_section' // Settings Section ID
107
- );
108
-
109
- add_settings_section('saswp_knowledge_section', __return_false(), '__return_false', 'saswp_knowledge_section');
110
-
111
- add_settings_field(
112
- 'knowledge_settings', // ID
113
- '', // Title
114
- 'saswp_knowledge_page_callback', // CB
115
- 'saswp_knowledge_section', // Page slug
116
- 'saswp_knowledge_section' // Settings Section ID
117
- );
118
- add_settings_section('saswp_schema_section', __return_false(), '__return_false', 'saswp_schema_section');
119
-
120
- add_settings_field(
121
- 'saswp_schema_settings', // ID
122
- '', // Title
123
- 'saswp_schema_page_callback', // CB
124
- 'saswp_schema_section', // Page slug
125
- 'saswp_schema_section' // Settings Section ID
126
- );
127
-
128
- add_settings_section('saswp_amp_section', __return_false(), '__return_false', 'saswp_amp_section');
129
-
130
- add_settings_field(
131
- 'saswp_amp_settings', // ID
132
- '', // Title
133
- 'saswp_amp_page_callback', // CB
134
- 'saswp_amp_section', // Page slug
135
- 'saswp_amp_section' // Settings Section ID
136
- );
137
-
138
- add_settings_section('saswp_help_section', __return_false(), '__return_false', 'saswp_help_section');
139
-
140
- add_settings_field(
141
- 'saswp_help_settings', // ID
142
- '', // Title
143
- 'saswp_help_page_callback', // CB
144
- 'saswp_help_section', // Page slug
145
- 'saswp_help_section' // Settings Section ID
146
- );
147
- }
148
- function saswp_schema_page_callback(){
149
- // Get Settings
150
- $settings = saswp_defaultSettings();
151
- $field_objs = new saswp_fields_generator();
152
- $meta_fields_default = array(
153
- array(
154
- 'label' => 'Default Structured Data Logo',
155
- 'id' => 'sd-data-logo-ampforwp',
156
- 'name' => 'sd_data[sd-data-logo-ampforwp][url]',
157
- 'class' => 'saswp-logo-ampforwp regular-text',
158
- 'type' => 'media',
159
- ),
160
- array(
161
- 'label' => 'Custom Logo Size',
162
- 'id' => 'saswp-logo-dimensions-check',
163
- 'name' => 'sd_data[saswp-logo-dimensions]',
164
- 'type' => 'checkbox',
165
- 'class' => 'checkbox saswp-checkbox',
166
- 'hidden' => array(
167
- 'id' => 'saswp-logo-dimensions',
168
- 'name' => 'sd_data[saswp-logo-dimensions]',
169
- )
170
- ),
171
- array(
172
- 'label' => 'Logo Width',
173
- 'id' => 'saswp-logo-width',
174
- 'name' => 'sd_data[saswp-logo-width]',
175
- 'class' => 'regular-text',
176
- 'type' => 'text',
177
- 'note' => 'Default width is 600 pixels'
178
- ),
179
- array(
180
- 'label' => 'Logo Height',
181
- 'id' => 'saswp-logo-height',
182
- 'name' => 'sd_data[saswp-logo-height]',
183
- 'class' => 'regular-text',
184
- 'type' => 'text',
185
- 'note' => 'Default height is 60 pixels'
186
- ),
187
- array(
188
- 'label' => 'Default Image',
189
- 'id' => 'sd_default_image',
190
- 'name' => 'sd_data[sd_default_image][url]',
191
- 'class' => 'saswp-sd_default_image',
192
- 'type' => 'media',
193
- ),
194
- array(
195
- 'label' => 'Default Post Image Width',
196
- 'id' => 'sd_default_image_width',
197
- 'name' => 'sd_data[sd_default_image_width]',
198
- 'class' => 'regular-text',
199
- 'type' => 'text',
200
- ),
201
- array(
202
- 'label' => 'Default Post Image Height',
203
- 'id' => 'sd_default_image_height',
204
- 'name' => 'sd_data[sd_default_image_height]',
205
- 'class' => 'regular-text',
206
- 'type' => 'text',
207
- ),
208
- array(
209
- 'label' => 'Default Thumbnail for VideoObject',
210
- 'id' => 'sd_default_video_thumbnail',
211
- 'name' => 'sd_data[sd_default_video_thumbnail][url]',
212
- 'class' => 'saswp-sd_default_video_thumbnail',
213
- 'type' => 'media',
214
- ),
215
- array(
216
- 'label' => 'Archive',
217
- 'id' => 'saswp_archive_schema_checkbox',
218
- 'name' => 'saswp_archive_schema_checkbox',
219
- 'type' => 'checkbox',
220
- 'class' => 'checkbox saswp-checkbox',
221
- 'hidden' => array(
222
- 'id' => 'saswp_archive_schema',
223
- 'name' => 'sd_data[saswp_archive_schema]',
224
- )
225
- ),
226
- array(
227
- 'label' => 'BreadCrumbs',
228
- 'id' => 'saswp_breadcrumb_schema_checkbox',
229
- 'name' => 'saswp_breadcrumb_schema_checkbox',
230
- 'type' => 'checkbox',
231
- 'class' => 'checkbox saswp-checkbox',
232
- 'hidden' => array(
233
- 'id' => 'saswp_breadcrumb_schema',
234
- 'name' => 'sd_data[saswp_breadcrumb_schema]',
235
- )
236
- ),
237
- );
238
- echo '<h2>'.esc_html__('Default Values','schema-and-structured-data-for-wp').'</h2>';
239
- $field_objs->saswp_field_generator($meta_fields_default, $settings);
240
- ?>
241
-
242
- <?php
243
- }
244
-
245
- function saswp_amp_page_callback(){
246
- $settings = saswp_defaultSettings();
247
- $field_objs = new saswp_fields_generator();
248
- $meta_fields = array(
249
-
250
- array(
251
- 'label' => 'Structured Data for AMP',
252
- 'id' => 'saswp-for-amp-checkbox',
253
- 'name' => 'saswp-for-amp-checkbox',
254
- 'type' => 'checkbox',
255
- 'class' => 'checkbox saswp-checkbox',
256
- 'hidden' => array(
257
- 'id' => 'saswp-for-amp',
258
- 'name' => 'sd_data[saswp-for-amp]',
259
- )
260
- ),
261
- array(
262
- 'label' => 'Structured Data for Non AMP',
263
- 'id' => 'saswp-for-wordpress-checkbox',
264
- 'name' => 'saswp-for-wordpress-checkbox',
265
- 'type' => 'checkbox',
266
- 'class' => 'checkbox saswp-checkbox',
267
- 'note' => '',
268
- 'hidden' => array(
269
- 'id' => 'saswp-for-wordpress',
270
- 'name' => 'sd_data[saswp-for-wordpress]',
271
- )
272
- ),
273
- );
274
- echo '<h2>'.esc_html__('Set Up','schema-and-structured-data-for-wp').'</h2>';
275
- $field_objs->saswp_field_generator($meta_fields, $settings);
276
- }
277
-
278
- function saswp_general_page_callback(){
279
- $settings = saswp_defaultSettings();
280
- ?>
281
- <div class="saswp-settings-list">
282
- <h2><?php echo esc_html__('Page Schema','schema-and-structured-data-for-wp') ?></h2>
283
- <ul><li><div style="width:200px;float:left;clear: both;"><label>
284
- <?php echo esc_html__('About Us','schema-and-structured-data-for-wp') ?>
285
- </label>
286
- </div>
287
- <div style="width:85%">
288
- <div style="width:75%; float:right;">
289
-
290
- <label for="sd_about_page-select">
291
- <?php
292
- echo wp_dropdown_pages( array(
293
- 'name' => 'sd_data[sd_about_page]',
294
- 'id' => 'sd_about_page',
295
- 'echo' => 0,
296
- 'show_option_none' => esc_attr( 'Select an item' ),
297
- 'option_none_value' => '',
298
- 'selected' => isset($settings['sd_about_page']) ? $settings['sd_about_page'] : '',
299
- )); ?>
300
- </label>
301
- </div>
302
- </div>
303
- </li>
304
- <li><div style="width:200px;float:left;clear: both;">
305
- <label>
306
- <?php echo esc_html__('Contact Us','schema-and-structured-data-for-wp') ?>
307
- </label>
308
- </div>
309
- <div style="width:85%">
310
- <div style="width:75%; float:right;">
311
-
312
- <label for="sd_contact_page-select">
313
- <?php echo wp_dropdown_pages( array(
314
- 'name' => 'sd_data[sd_contact_page]',
315
- 'id' => 'sd_contact_page-select',
316
- 'echo' => 0,
317
- 'show_option_none' => esc_attr( 'Select an item' ),
318
- 'option_none_value' => '',
319
- 'selected' => isset($settings['sd_contact_page']) ? $settings['sd_contact_page'] : '',
320
- )); ?>
321
- </label>
322
- </div>
323
- </div>
324
- </li>
325
- </ul>
326
- </div>
327
- <?php
328
- }
329
- function saswp_knowledge_page_callback(){
330
- // Get Settings
331
- $settings = saswp_defaultSettings();
332
- $field_objs = new saswp_fields_generator();
333
- $meta_fields = array(
334
- array(
335
- 'label' => 'Data Type',
336
- 'id' => 'saswp_kb_type',
337
- 'name' => 'sd_data[saswp_kb_type]',
338
- 'type' => 'select',
339
- 'options' => array(
340
- ''=>'Select an item',
341
- 'Organization'=>'Organization',
342
- 'Person'=>'Person',
343
- )
344
- ),
345
-
346
- array(
347
- 'label' => 'Data Name',
348
- 'id' => 'sd_name',
349
- 'name' => 'sd_data[sd_name]',
350
- 'class' => 'regular-text',
351
- 'type' => 'text',
352
- ),
353
- array(
354
- 'label' => 'Alternative Name',
355
- 'id' => 'sd_alt_name',
356
- 'name' => 'sd_data[sd_alt_name]',
357
- 'class' => 'regular-text',
358
- 'type' => 'text',
359
- ),
360
- array(
361
- 'label' => 'Data url',
362
- 'id' => 'sd_url',
363
- 'name' => 'sd_data[sd_url]',
364
- 'class' => 'regular-text',
365
- 'type' => 'text',
366
- ),
367
- array(
368
- 'label' => 'Logo',
369
- 'id' => 'sd_logo',
370
- 'name' => 'sd_data[sd_logo][url]',
371
- 'class' => 'saswp-icon upload large-text',
372
- 'type' => 'media',
373
- ),
374
- array(
375
- 'label' => 'Contact details',
376
- 'id' => 'saswp_kb_contact_1_checkbox',
377
- 'name' => 'saswp_kb_contact_1_checkbox',
378
- 'type' => 'checkbox',
379
- 'class' => 'checkbox saswp-checkbox',
380
- 'hidden' => array(
381
- 'id' => 'saswp_kb_contact_1',
382
- 'name' => 'sd_data[saswp_kb_contact_1]'
383
- )
384
- ),
385
- array(
386
- 'label' => 'Telephone Number',
387
- 'id' => 'saswp_kb_telephone',
388
- 'name' => 'sd_data[saswp_kb_telephone]',
389
- 'class' => 'regular-text',
390
- 'type' => 'text',
391
- ),
392
- array(
393
- 'label' => 'Contact Type',
394
- 'id' => 'saswp_contact_type',
395
- 'name' => 'sd_data[saswp_contact_type]',
396
- 'class' => '',
397
- 'type' => 'select',
398
- 'options' => array(
399
- ''=>'Select an item',
400
- 'customer support'=>'Customer Support',
401
- 'technical support'=>'Technical Support',
402
- 'billing support'=>'Billing Support',
403
- 'bill payment'=>'Bill payment',
404
- 'sales'=>'Sales',
405
- 'reservations'=>'Reservations',
406
- 'credit card support'=>'Credit Card Support',
407
- 'emergency'=>'Emergency',
408
- 'baggage tracking'=>'Baggage Tracking',
409
- 'roadside assistance'=>'Roadside Assistance',
410
- 'package tracking'=>'Package Tracking',
411
- )
412
- ),
413
- array(
414
- 'label' => 'Name',
415
- 'id' => 'sd-person-name',
416
- 'name' => 'sd_data[sd-person-name]',
417
- 'class' => 'regular-text',
418
- 'type' => 'text',
419
- ),
420
- array(
421
- 'label' => 'Job Title',
422
- 'id' => 'sd-person-job-title',
423
- 'name' => 'sd_data[sd-person-job-title]',
424
- 'class' => 'regular-text',
425
- 'type' => 'text',
426
- ),
427
- array(
428
- 'label' => 'Image',
429
- 'id' => 'sd-person-image',
430
- 'name' => 'sd_data[sd-person-image][url]',
431
- 'class' => 'upload large-text',
432
- 'type' => 'media',
433
- ),
434
- array(
435
- 'label' => 'Phone Number',
436
- 'id' => 'sd-person-phone-number',
437
- 'name' => 'sd_data[sd-person-phone-number]',
438
- 'class' => 'regular-text',
439
- 'type' => 'text',
440
- ),
441
- array(
442
- 'label' => 'URL',
443
- 'id' => 'sd-person-url',
444
- 'name' => 'sd_data[sd-person-url]',
445
- 'class' => 'regular-text',
446
- 'type' => 'text',
447
- ),
448
-
449
- );
450
- echo '<h2>'.esc_html__('Knowledge Base','schema-and-structured-data-for-wp').'</h2>';
451
- echo '<div class="saswp-knowledge-base">';
452
- $field_objs->saswp_field_generator($meta_fields, $settings);
453
- echo '</div>';
454
-
455
- //social
456
- echo '<h2>'.esc_html__( 'Social Fields', 'schema-and-structured-data-for-wp' ).'</h2>';
457
- $social_meta_fields = array(
458
- array(
459
- 'label' => 'Facebook',
460
- 'id' => 'saswp-facebook-enable-checkbox',
461
- 'name' => 'saswp-facebook-enable-checkbox',
462
- 'type' => 'checkbox',
463
- 'class' => 'checkbox saswp-checkbox',
464
- 'hidden' => array(
465
- 'id' => 'saswp-facebook-enable',
466
- 'name' => 'sd_data[saswp-facebook-enable]',
467
- )
468
- ),
469
- array(
470
- 'label' => '',
471
- 'id' => 'sd_facebook',
472
- 'name' => 'sd_data[sd_facebook]',
473
- 'class' => 'regular-text',
474
- 'type' => 'text',
475
- 'attributes' => array(
476
- 'placeholder' => 'https://'
477
- )
478
- ),
479
- array(
480
- 'label' => 'Twitter',
481
- 'id' => 'saswp-twitter-enable-checkbox',
482
- 'name' => 'saswp-twitter-enable-checkbox',
483
- 'type' => 'checkbox',
484
- 'class' => 'checkbox saswp-checkbox',
485
- 'hidden' => array(
486
- 'id' => 'saswp-twitter-enable',
487
- 'name' => 'sd_data[saswp-twitter-enable]',
488
- )
489
- ),
490
- array(
491
- 'label' => '',
492
- 'id' => 'sd_twitter',
493
- 'name' => 'sd_data[sd_twitter]',
494
- 'class' => 'regular-text',
495
- 'type' => 'text',
496
- 'attributes' => array(
497
- 'placeholder' => 'https://'
498
- )
499
- ),
500
- array(
501
- 'label' => 'Google+',
502
- 'id' => 'saswp-google-plus-enable-checkbox',
503
- 'name' => 'saswp-google-plus-enable-checkbox',
504
- 'type' => 'checkbox',
505
- 'class' => 'checkbox saswp-checkbox',
506
- 'hidden' => array(
507
- 'id' => 'saswp-google-plus-enable',
508
- 'name' => 'sd_data[saswp-google-plus-enable]',
509
- )
510
- ),
511
- array(
512
- 'label' => '',
513
- 'id' => 'sd_google_plus',
514
- 'name' => 'sd_data[sd_google_plus]',
515
- 'class' => 'regular-text',
516
- 'type' => 'text',
517
- 'attributes' => array(
518
- 'placeholder' => 'https://'
519
- )
520
- ),
521
- array(
522
- 'label' => 'Instagram',
523
- 'id' => 'saswp-instagram-enable-checkbox',
524
- 'name' => 'saswp-instagram-enable-checkbox',
525
- 'type' => 'checkbox',
526
- 'class' => 'checkbox saswp-checkbox',
527
- 'hidden' => array(
528
- 'id' => 'saswp-instagram-enable',
529
- 'name' => 'sd_data[saswp-instagram-enable]',
530
- )
531
- ),
532
- array(
533
- 'label' => '',
534
- 'id' => 'sd_instagram',
535
- 'name' => 'sd_data[sd_instagram]',
536
- 'class' => 'regular-text',
537
- 'type' => 'text',
538
- 'attributes' => array(
539
- 'placeholder' => 'https://'
540
- )
541
- ),
542
- array(
543
- 'label' => 'Youtube',
544
- 'id' => 'saswp-youtube-enable-checkbox',
545
- 'name' => 'saswp-youtube-enable-checkbox',
546
- 'type' => 'checkbox',
547
- 'class' => 'checkbox saswp-checkbox',
548
- 'hidden' => array(
549
- 'id' => 'saswp-youtube-enable',
550
- 'name' => 'sd_data[saswp-youtube-enable]',
551
- )
552
- ),
553
- array(
554
- 'label' => '',
555
- 'id' => 'sd_youtube',
556
- 'name' => 'sd_data[sd_youtube]',
557
- 'class' => 'regular-text',
558
- 'type' => 'text',
559
- 'attributes' => array(
560
- 'placeholder' => 'https://'
561
- )
562
- ),
563
- array(
564
- 'label' => 'LinkedIn',
565
- 'id' => 'saswp-linkedin-enable-checkbox',
566
- 'name' => 'saswp-linkedin-enable-checkbox',
567
- 'type' => 'checkbox',
568
- 'class' => 'checkbox saswp-checkbox',
569
- 'hidden' => array(
570
- 'id' => 'saswp-linkedin-enable',
571
- 'name' => 'sd_data[saswp-linkedin-enable]',
572
- )
573
- ),
574
- array(
575
- 'label' => '',
576
- 'id' => 'sd_linkedin',
577
- 'name' => 'sd_data[sd_linkedin]',
578
- 'class' => 'regular-text',
579
- 'type' => 'text',
580
- 'attributes' => array(
581
- 'placeholder' => 'https://'
582
- )
583
- ),
584
- array(
585
- 'label' => 'Pinterest',
586
- 'id' => 'saswp-pinterest-enable-checkbox',
587
- 'name' => 'saswp-pinterest-enable-checkbox',
588
- 'type' => 'checkbox',
589
- 'class' => 'checkbox saswp-checkbox',
590
- 'hidden' => array(
591
- 'id' => 'saswp-pinterest-enable',
592
- 'name' => 'sd_data[saswp-pinterest-enable]',
593
- )
594
- ),
595
- array(
596
- 'label' => '',
597
- 'id' => 'sd_pinterest',
598
- 'name' => 'sd_data[sd_pinterest]',
599
- 'class' => 'regular-text',
600
- 'type' => 'text',
601
- 'attributes' => array(
602
- 'placeholder' => 'https://'
603
- )
604
- ),
605
- array(
606
- 'label' => 'SoundCloud',
607
- 'id' => 'saswp-soundcloud-enable-checkbox',
608
- 'name' => 'saswp-soundcloud-enable-checkbox',
609
- 'type' => 'checkbox',
610
- 'class' => 'checkbox saswp-checkbox',
611
- 'hidden' => array(
612
- 'id' => 'saswp-soundcloud-enable',
613
- 'name' => 'sd_data[saswp-soundcloud-enable]',
614
- )
615
- ),
616
- array(
617
- 'label' => '',
618
- 'id' => 'sd_soundcloud',
619
- 'name' => 'sd_data[sd_soundcloud]',
620
- 'class' => 'regular-text',
621
- 'type' => 'text',
622
- 'attributes' => array(
623
- 'placeholder' => 'https://'
624
- )
625
- ),
626
- array(
627
- 'label' => 'Tumblr',
628
- 'id' => 'saswp-tumblr-enable-checkbox',
629
- 'name' => 'saswp-tumblr-enable-checkbox',
630
- 'type' => 'checkbox',
631
- 'class' => 'checkbox saswp-checkbox',
632
- 'hidden' => array(
633
- 'id' => 'saswp-tumblr-enable',
634
- 'name' => 'sd_data[saswp-tumblr-enable]',
635
- )
636
- ),
637
- array(
638
- 'label' => '',
639
- 'id' => 'sd_tumblr',
640
- 'name' => 'sd_data[sd_tumblr]',
641
- 'class' => 'regular-text',
642
- 'type' => 'text',
643
- 'attributes' => array(
644
- 'placeholder' => 'https://'
645
- )
646
- ),
647
-
648
- );
649
- $field_objs->saswp_field_generator($social_meta_fields, $settings);
650
-
651
- ?>
652
- <?php
653
- }
654
- function saswp_help_page_callback(){
655
- echo '<h1>'.esc_html__( 'Here are some Q&A which helps you to understand and setup the Schema and Structured data for wp.', 'schema-and-structured-data-for-wp' ).'</h1>
656
- <br><br>
657
- <h3>1Q) '.esc_html__( 'How can I setup the Schema and Structured data for individual pages and posts?', 'schema-and-structured-data-for-wp' ).'</h3>
658
- <p class="saswp_qanda_p">A) '.esc_html__( 'Just with one click on the Structured data option, you will find an add new options window in the structured data option panel. Secondly, you need to write the name of the title where, if you would like to set the individual Page/Post then you can set the Page/Post type equal to the Page/Post(Name).', 'schema-and-structured-data-for-wp' ).'</p>
659
-
660
- <h3>2Q) '.esc_html__( 'How can I check the code whether the structured data is working or not?', 'schema-and-structured-data-for-wp' ).'</h3>
661
- <p class="saswp_qanda_p">A) To check the code, the first step we need to take is to copy the code of a page or post then visit the <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Structured data testing tool</a> by clicking on code snippet. Once we paste the snippet we can run the test.</p>
662
-
663
- <h3> 3Q) '.esc_html__( 'How can I check whether the pages or posts are valid or not?', 'schema-and-structured-data-for-wp' ).'</h3>
664
- <p class="saswp_qanda_p"> A) '.esc_html__( 'To check the page and post validation, please visit the', 'schema-and-structured-data-for-wp' ).' <a href="https://search.google.com/structured-data/testing-tool" target="_blank">'.esc_html__( 'Structured data testing tool', 'schema-and-structured-data-for-wp' ).'</a> '.esc_html__( 'and paste the link of your website.', 'schema-and-structured-data-for-wp' ).' '.esc_html__( 'Once we click on run test we can see the result whether the page or post is a valid one or not.', 'schema-and-structured-data-for-wp' ).'</p>
665
-
666
- <h3>4Q) '.esc_html__( 'Where should users contact if they faced any issues?', 'schema-and-structured-data-for-wp' ).'</h3>
667
- <p class="saswp_qanda_p">A) '.esc_html__( 'We always welcome all our users to share their issues and get them fixed just with one click to the link', 'schema-and-structured-data-for-wp' ).' team@magazine3.com or <a href="https://ampforwp.com/support/" target="_blank">'.esc_html__( 'Support link', 'schema-and-structured-data-for-wp' ).'</a></p><br>';
668
- }
669
- /**
670
- * Enqueue CSS and JS
671
- */
672
- function saswp_enqueue_style_js( $hook ) {
673
- if ( strpos( $hook, 'structured_data_options' ) === false ) {
674
- return;
675
- }
676
- // Color picker CSS
677
- // @refer https://make.wordpress.org/core/2012/11/30/new-color-picker-in-wp-3-5/
678
- wp_enqueue_style( 'wp-color-picker' );
679
- // Everything needed for media upload
680
- wp_enqueue_media();
681
- // Main JS
682
- wp_enqueue_script( 'saswp-main-js', SASWP_PLUGIN_URL . 'admin_section/js/main-script.js', array( 'wp-color-picker' ), SASWP_VERSION, true );
683
- //Main Css
684
- wp_enqueue_style( 'saswp-main-css', SASWP_PLUGIN_URL . 'admin_section/css/main-style.css', false , SASWP_VERSION );
685
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  add_action( 'admin_enqueue_scripts', 'saswp_enqueue_style_js' );
1
+ <?php
2
+ /**
3
+ * Admin Settings
4
+ * Function saswp_add_menu_links
5
+ *
6
+ */
7
+ add_action( 'plugin_action_links_' . plugin_basename( SASWP_DIR_NAME_FILE ), 'saswp_plugin_action_links' );
8
+ function saswp_plugin_action_links( $links ) {
9
+ $links[] = '<a href="' . esc_url( admin_url( 'edit.php?post_type=saswp&page=structured_data_options' ) ) . '">' . esc_html__( 'Settings', 'schema-and-structured-data-for-wp' ) . '</a>';
10
+ $links[] = '<a href="'. esc_url( admin_url( 'plugins.php?page=saswp-setup-wizard' ) ).'">' . esc_html__( 'Start setup wizard &raquo;', 'schema-and-structured-data-for-wp' ) . '</a>';
11
+ return $links;
12
+ }
13
+
14
+ function saswp_add_menu_links() {
15
+ // Settings page - Same as main menu page
16
+ add_submenu_page( 'edit.php?post_type=saswp', esc_html__( 'Schema & Structured Data For Wp', 'schema-and-structured-data-for-wp' ), esc_html__( 'Settings', 'schema-and-structured-data-for-wp' ), 'manage_options', 'structured_data_options', 'saswp_admin_interface_render' );
17
+
18
+ }
19
+ add_action( 'admin_menu', 'saswp_add_menu_links' );
20
+
21
+ function saswp_admin_interface_render(){
22
+ // Authentication
23
+ if ( ! current_user_can( 'manage_options' ) ) {
24
+ return;
25
+ }
26
+ // Handing save settings
27
+ if ( isset( $_GET['settings-updated'] ) ) {
28
+ settings_errors();
29
+ }
30
+ $is_amp =false;
31
+ if ( is_plugin_active('accelerated-mobile-pages/accelerated-moblie-pages.php') || is_plugin_active('amp/amp.php') ) {
32
+ $is_amp = true;
33
+ }
34
+ if($is_amp){
35
+ $tab = saswp_get_tab('general', array('general','knowledge','schema', 'tools', 'amp','support'));
36
+ }else{
37
+ $tab = saswp_get_tab('general', array('general','knowledge','schema','tools' ,'support'));
38
+ }
39
+
40
+ ?>
41
+ <div class="saswp-settings-container">
42
+ <div class="wrap saswp-settings-form saswp-settings-first-div">
43
+ <h1 class="wp-heading-inline"> <?php echo esc_html__( 'Schema & Structured Data For WP', 'schema-and-structured-data-for-wp' ); ?> <a href="<?php echo esc_url( admin_url( 'edit.php?post_type=saswp' ) ); ?>" class="page-title-action"><?php echo esc_html__( 'Schema Types', 'schema-and-structured-data-for-wp' ); ?></a></h1><br>
44
+ <div>
45
+ <h2 class="nav-tab-wrapper saswp-tabs">
46
+ <?php
47
+
48
+ echo '<a href="' . esc_url(saswp_admin_link('general')) . '" class="nav-tab ' . esc_attr( $tab == 'general' ? 'nav-tab-active' : '') . '"><span class=""></span> ' . esc_html__('General','schema-and-structured-data-for-wp') . '</a>';
49
+
50
+ echo '<a href="' . esc_url(saswp_admin_link('knowledge')) . '" class="nav-tab ' . esc_attr( $tab == 'knowledge' ? 'nav-tab-active' : '') . '"><span class=""></span> ' . esc_html__('Knowledge Graph','schema-and-structured-data-for-wp') . '</a>';
51
+
52
+ if($is_amp){
53
+ echo '<a href="' . esc_url(saswp_admin_link('amp')) . '" class="nav-tab ' . esc_attr( $tab == 'amp' ? 'nav-tab-active' : '') . '"><span class=""></span> ' . esc_html__('AMP','schema-and-structured-data-for-wp') . '</a>';
54
+ }
55
+ echo '<a href="' . esc_url(saswp_admin_link('tools')) . '" class="nav-tab ' . esc_attr( $tab == 'tools' ? 'nav-tab-active' : '') . '"><span class=""></span> ' . esc_html__('Tools','schema-and-structured-data-for-wp') . '</a>';
56
+
57
+ echo '<a href="' . esc_url(saswp_admin_link('schema')) . '" class="nav-tab ' . esc_attr( $tab == 'schema' ? 'nav-tab-active' : '') . '"><span class=""></span> ' . esc_html__('Misc','schema-and-structured-data-for-wp') . '</a>';
58
+
59
+ echo '<a href="' . esc_url(saswp_admin_link('support')) . '" class="nav-tab ' . esc_attr( $tab == 'support' ? 'nav-tab-active' : '') . '"><span class=""></span> ' . esc_html__('Support','schema-and-structured-data-for-wp') . '</a>';
60
+ ?>
61
+
62
+ </h2>
63
+ </div>
64
+ <form action="options.php" method="post" enctype="multipart/form-data" class="saswp-settings-form">
65
+ <div class="form-wrap saswp-settings-form-wrap">
66
+ <?php
67
+ // Output nonce, action, and option_page fields for a settings page.
68
+ settings_fields( 'sd_data_group' );
69
+ echo "<div class='saswp-general' ".( $tab != 'general' ? 'style="display:none;"' : '').">";
70
+ // general Application Settings
71
+ do_settings_sections( 'saswp_general_section' ); // Page slug
72
+ echo "</div>";
73
+
74
+ echo "<div class='saswp-knowledge' ".( $tab != 'knowledge' ? 'style="display:none;"' : '').">";
75
+ // knowledge Application Settings
76
+ do_settings_sections( 'saswp_knowledge_section' ); // Page slug
77
+ echo "</div>";
78
+ echo "<div class='saswp-schema' ".( $tab != 'schema' ? 'style="display:none;"' : '').">";
79
+ do_settings_sections( 'saswp_schema_section' ); // Page slug
80
+ echo "</div>";
81
+
82
+ echo "<div class='saswp-amp' ".( $tab != 'amp' ? 'style="display:none;"' : '').">";
83
+ do_settings_sections( 'saswp_amp_section' ); // Page slug
84
+ echo "</div>";
85
+
86
+ echo "<div class='saswp-tools' ".( $tab != 'tools' ? 'style="display:none;"' : '').">";
87
+ // Status
88
+ do_settings_sections( 'saswp_tools_section' ); // Page slug
89
+ echo "</div>";
90
+
91
+ echo "<div class='saswp-support' ".( $tab != 'support' ? 'style="display:none;"' : '').">";
92
+ // Status
93
+ do_settings_sections( 'saswp_support_section' ); // Page slug
94
+ echo "</div>";
95
+
96
+ ?>
97
+ </div>
98
+ <div class="button-wrapper">
99
+ <?php
100
+ // Output save settings button
101
+ submit_button( esc_html__('Save Settings', 'schema-and-structured-data-for-wp') );
102
+ ?>
103
+ </div>
104
+ <input type="hidden" name="sd_data[sd_initial_wizard_status]" value="1">
105
+ </form>
106
+ </div>
107
+ <div class="saswp-settings-second-div">
108
+ <p style="float:left;"><?php echo esc_html('Need Quick Setup?', 'schema-and-structured-data-for-wp'); ?></p><a href="<?php echo esc_url( admin_url( 'plugins.php?page=saswp-setup-wizard' ) ); ?>" class="page-title-action saswp-start-quck-setup button button-primary"><?php echo esc_html('Try Installation Wizard', 'schema-and-structured-data-for-wp'); ?></a>
109
+ <div class="saswp-feedback-panel">
110
+
111
+ <h2><?php echo esc_html__( 'Leave A Feedback', 'schema-and-structured-data-for-wp' ); ?></h2>
112
+
113
+ <ul>
114
+ <li><a target="_blanl" href="https://wordpress.org/support/plugin/schema-and-structured-data-for-wp/reviews/#new-post"><?php echo esc_html__( 'I would like to review this plugin', 'schema-and-structured-data-for-wp' ); ?></a></li>
115
+ <li><a target="_blanl" href="http://structured-data-for-wp.com/contact-us/"><?php echo esc_html__( 'I have ideas to improve this plugin', 'schema-and-structured-data-for-wp' ); ?></a></li>
116
+ <li><a href="<?php echo esc_url( admin_url( 'admin.php?page=structured_data_options&tab=support' ) ); ?>"><?php echo esc_html__( 'I need help this plugin', 'schema-and-structured-data-for-wp' ); ?></a></li>
117
+ </ul>
118
+ <div class="saswp-social-sharing-buttons">
119
+ <a class="saswp-facebook-share" href="https://www.facebook.com/sharer/sharer.php?u=http://structured-data-for-wp.com/" target="_blank">
120
+ <span class="dashicons dashicons-facebook"></span>
121
+ <?php echo esc_html__( 'Share', 'schema-and-structured-data-for-wp' ); ?>
122
+ </a>
123
+ <a target="_blank" class="twitter-share-button"
124
+ href="https://twitter.com/home?status=I'm%20using%20this%20Structured%20data%20WordPress%20plugin%20for%20implementing%20Schema%20on%20my%20site!%20http%3A//structured-data-for-wp.com/%20via%20%40WPF_community">
125
+ <span class="dashicons dashicons-twitter"></span>
126
+ <?php echo esc_html__( 'Tweet', 'schema-and-structured-data-for-wp' ); ?>
127
+ </a>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+
133
+ <?php
134
+ }
135
+ /*
136
+ WP Settings API
137
+ */
138
+ add_action('admin_init', 'saswp_settings_init');
139
+
140
+ function saswp_settings_init(){
141
+ register_setting( 'sd_data_group', 'sd_data' );
142
+ add_settings_section('saswp_general_section', __return_false(), '__return_false', 'saswp_general_section');
143
+
144
+ add_settings_field(
145
+ 'general_settings', // ID
146
+ '', // Title
147
+ 'saswp_general_page_callback', // CB
148
+ 'saswp_general_section', // Page slug
149
+ 'saswp_general_section' // Settings Section ID
150
+ );
151
+
152
+ add_settings_section('saswp_knowledge_section', __return_false(), '__return_false', 'saswp_knowledge_section');
153
+
154
+ add_settings_field(
155
+ 'knowledge_settings', // ID
156
+ '', // Title
157
+ 'saswp_knowledge_page_callback', // CB
158
+ 'saswp_knowledge_section', // Page slug
159
+ 'saswp_knowledge_section' // Settings Section ID
160
+ );
161
+ add_settings_section('saswp_schema_section', __return_false(), '__return_false', 'saswp_schema_section');
162
+
163
+ add_settings_field(
164
+ 'saswp_schema_settings', // ID
165
+ '', // Title
166
+ 'saswp_schema_page_callback', // CB
167
+ 'saswp_schema_section', // Page slug
168
+ 'saswp_schema_section' // Settings Section ID
169
+ );
170
+
171
+ add_settings_section('saswp_amp_section', __return_false(), '__return_false', 'saswp_amp_section');
172
+
173
+ add_settings_field(
174
+ 'saswp_amp_settings', // ID
175
+ '', // Title
176
+ 'saswp_amp_page_callback', // CB
177
+ 'saswp_amp_section', // Page slug
178
+ 'saswp_amp_section' // Settings Section ID
179
+ );
180
+
181
+ add_settings_section('saswp_support_section', __return_false(), '__return_false', 'saswp_support_section');
182
+
183
+ add_settings_field(
184
+ 'saswp_support_settings', // ID
185
+ '', // Title
186
+ 'saswp_support_page_callback', // CB
187
+ 'saswp_support_section', // Page slug
188
+ 'saswp_support_section' // Settings Section ID
189
+ );
190
+
191
+
192
+ add_settings_section('saswp_tools_section', __return_false(), '__return_false', 'saswp_tools_section');
193
+
194
+ // the meta_key 'diplay_on_homepage' with the meta_value 'true'
195
+ add_settings_field(
196
+ 'saswp_import_status', // ID
197
+ '', // Title
198
+ 'saswp_import_callback', // Callback
199
+ 'saswp_tools_section', // Page slug
200
+ 'saswp_tools_section' // Settings Section ID
201
+ );
202
+
203
+
204
+ }
205
+ function saswp_schema_page_callback(){
206
+ // Get Settings
207
+ $settings = saswp_defaultSettings();
208
+ $field_objs = new saswp_fields_generator();
209
+ $meta_fields_default = array(
210
+ array(
211
+ 'label' => 'Default Image',
212
+ 'id' => 'sd_default_image',
213
+ 'name' => 'sd_data[sd_default_image][url]',
214
+ 'class' => 'saswp-sd_default_image',
215
+ 'type' => 'media',
216
+ ),
217
+ array(
218
+ 'label' => 'Default Post Image Width',
219
+ 'id' => 'sd_default_image_width',
220
+ 'name' => 'sd_data[sd_default_image_width]',
221
+ 'class' => 'regular-text',
222
+ 'type' => 'text',
223
+ ),
224
+ array(
225
+ 'label' => 'Default Post Image Height',
226
+ 'id' => 'sd_default_image_height',
227
+ 'name' => 'sd_data[sd_default_image_height]',
228
+ 'class' => 'regular-text',
229
+ 'type' => 'text',
230
+ ),
231
+ array(
232
+ 'label' => 'Default Thumbnail for VideoObject',
233
+ 'id' => 'sd_default_video_thumbnail',
234
+ 'name' => 'sd_data[sd_default_video_thumbnail][url]',
235
+ 'class' => 'saswp-sd_default_video_thumbnail',
236
+ 'type' => 'media',
237
+ ),
238
+ );
239
+ echo '<h2>'.esc_html__('Default Values','schema-and-structured-data-for-wp').'</h2>';
240
+ echo '<div class="saswp-schema-type-fields">';
241
+ $field_objs->saswp_field_generator($meta_fields_default, $settings);
242
+ echo '</div>';
243
+ ?>
244
+
245
+ <?php
246
+ }
247
+
248
+ function saswp_amp_page_callback(){
249
+ $settings = saswp_defaultSettings();
250
+ $field_objs = new saswp_fields_generator();
251
+ $meta_fields = array(
252
+
253
+ array(
254
+ 'label' => 'Structured Data for AMP',
255
+ 'id' => 'saswp-for-amp-checkbox',
256
+ 'name' => 'saswp-for-amp-checkbox',
257
+ 'type' => 'checkbox',
258
+ 'class' => 'checkbox saswp-checkbox',
259
+ 'hidden' => array(
260
+ 'id' => 'saswp-for-amp',
261
+ 'name' => 'sd_data[saswp-for-amp]',
262
+ )
263
+ ),
264
+ array(
265
+ 'label' => 'Structured Data for Non AMP',
266
+ 'id' => 'saswp-for-wordpress-checkbox',
267
+ 'name' => 'saswp-for-wordpress-checkbox',
268
+ 'type' => 'checkbox',
269
+ 'class' => 'checkbox saswp-checkbox',
270
+ 'note' => '',
271
+ 'hidden' => array(
272
+ 'id' => 'saswp-for-wordpress',
273
+ 'name' => 'sd_data[saswp-for-wordpress]',
274
+ )
275
+ ),
276
+ );
277
+ echo '<h2>'.esc_html__('Set Up','schema-and-structured-data-for-wp').'</h2>';
278
+ $field_objs->saswp_field_generator($meta_fields, $settings);
279
+ }
280
+
281
+ function saswp_general_page_callback(){
282
+ $settings = saswp_defaultSettings();
283
+
284
+ $meta_fields_default = array(
285
+ array(
286
+ 'label' => 'Archive',
287
+ 'id' => 'saswp_archive_schema_checkbox',
288
+ 'name' => 'saswp_archive_schema_checkbox',
289
+ 'type' => 'checkbox',
290
+ 'class' => 'checkbox saswp-checkbox',
291
+ 'hidden' => array(
292
+ 'id' => 'saswp_archive_schema',
293
+ 'name' => 'sd_data[saswp_archive_schema]',
294
+ )
295
+ ),
296
+ array(
297
+ 'label' => 'BreadCrumbs',
298
+ 'id' => 'saswp_breadcrumb_schema_checkbox',
299
+ 'name' => 'saswp_breadcrumb_schema_checkbox',
300
+ 'type' => 'checkbox',
301
+ 'class' => 'checkbox saswp-checkbox',
302
+ 'hidden' => array(
303
+ 'id' => 'saswp_breadcrumb_schema',
304
+ 'name' => 'sd_data[saswp_breadcrumb_schema]',
305
+ )
306
+ ))
307
+
308
+ ?>
309
+ <div class="saswp-settings-list">
310
+ <h2><?php echo esc_html__('Page Schema','schema-and-structured-data-for-wp') ?></h2>
311
+ <ul><li><div style="float:left;clear: both;"><label class="saswp-tooltip">
312
+ <?php echo esc_html__('About','schema-and-structured-data-for-wp') ?>
313
+ <span class="saswp-tooltiptext"><?php echo esc_html__('Set the about page of of your website','schema-and-structured-data-for-wp') ?></span>
314
+ </label>
315
+ </div>
316
+ <div style="">
317
+ <div style="width:75%; float:right;">
318
+
319
+ <label for="sd_about_page-select">
320
+ <?php
321
+ echo wp_dropdown_pages( array(
322
+ 'name' => 'sd_data[sd_about_page]',
323
+ 'id' => 'sd_about_page',
324
+ 'echo' => 0,
325
+ 'show_option_none' => esc_attr( 'Select an item' ),
326
+ 'option_none_value' => '',
327
+ 'selected' => isset($settings['sd_about_page']) ? $settings['sd_about_page'] : '',
328
+ )); ?>
329
+ </label>
330
+ </div>
331
+ </div>
332
+ </li>
333
+ <li><div style="float:left;clear: both;">
334
+ <label class="saswp-tooltip">
335
+ <?php echo esc_html__('Contact','schema-and-structured-data-for-wp') ?>
336
+ <span class="saswp-tooltiptext"><?php echo esc_html__('Set the contact us page of your website','schema-and-structured-data-for-wp') ?></span>
337
+ </label>
338
+ </div>
339
+ <div style="">
340
+ <div style="width:75%; float:right;">
341
+ <label for="sd_contact_page-select">
342
+ <?php echo wp_dropdown_pages( array(
343
+ 'name' => 'sd_data[sd_contact_page]',
344
+ 'id' => 'sd_contact_page-select',
345
+ 'echo' => 0,
346
+ 'show_option_none' => esc_attr( 'Select an item' ),
347
+ 'option_none_value' => '',
348
+ 'selected' => isset($settings['sd_contact_page']) ? $settings['sd_contact_page'] : '',
349
+ )); ?>
350
+ </label>
351
+ </div>
352
+ </div>
353
+ </li>
354
+ </ul>
355
+ </div>
356
+ <?php
357
+ $field_objs = new saswp_fields_generator();
358
+ echo '<div class="saswp-archive-div">';
359
+ $field_objs->saswp_field_generator($meta_fields_default, $settings);
360
+ echo '</div>';
361
+ }
362
+ function saswp_knowledge_page_callback(){
363
+ $settings = saswp_defaultSettings();
364
+ $field_objs = new saswp_fields_generator();
365
+ $meta_fields = array(
366
+ array(
367
+ 'label' => 'Data Type',
368
+ 'id' => 'saswp_kb_type',
369
+ 'name' => 'sd_data[saswp_kb_type]',
370
+ 'type' => 'select',
371
+ 'options' => array(
372
+ ''=>'Select an item',
373
+ 'Organization'=>'Organization',
374
+ 'Person'=>'Person',
375
+ )
376
+ ),
377
+
378
+ array(
379
+ 'label' => 'Name',
380
+ 'id' => 'sd_name',
381
+ 'name' => 'sd_data[sd_name]',
382
+ 'class' => 'regular-text',
383
+ 'type' => 'text',
384
+ ),
385
+
386
+ array(
387
+ 'label' => 'Url',
388
+ 'id' => 'sd_url',
389
+ 'name' => 'sd_data[sd_url]',
390
+ 'class' => 'regular-text',
391
+ 'type' => 'text',
392
+ ),
393
+ array(
394
+ 'label' => 'Logo',
395
+ 'id' => 'sd_logo',
396
+ 'name' => 'sd_data[sd_logo][url]',
397
+ 'class' => 'saswp-icon upload large-text',
398
+ 'type' => 'media',
399
+ ),
400
+ array(
401
+ 'label' => 'Contact details',
402
+ 'id' => 'saswp_kb_contact_1_checkbox',
403
+ 'name' => 'saswp_kb_contact_1_checkbox',
404
+ 'type' => 'checkbox',
405
+ 'class' => 'checkbox saswp-checkbox',
406
+ 'hidden' => array(
407
+ 'id' => 'saswp_kb_contact_1',
408
+ 'name' => 'sd_data[saswp_kb_contact_1]'
409
+ )
410
+ ),
411
+ array(
412
+ 'label' => 'Telephone Number',
413
+ 'id' => 'saswp_kb_telephone',
414
+ 'name' => 'sd_data[saswp_kb_telephone]',
415
+ 'class' => 'regular-text',
416
+ 'type' => 'text',
417
+ ),
418
+ array(
419
+ 'label' => 'Contact Type',
420
+ 'id' => 'saswp_contact_type',
421
+ 'name' => 'sd_data[saswp_contact_type]',
422
+ 'class' => '',
423
+ 'type' => 'select',
424
+ 'options' => array(
425
+ ''=>'Select an item',
426
+ 'customer support'=>'Customer Support',
427
+ 'technical support'=>'Technical Support',
428
+ 'billing support'=>'Billing Support',
429
+ 'bill payment'=>'Bill payment',
430
+ 'sales'=>'Sales',
431
+ 'reservations'=>'Reservations',
432
+ 'credit card support'=>'Credit Card Support',
433
+ 'emergency'=>'Emergency',
434
+ 'baggage tracking'=>'Baggage Tracking',
435
+ 'roadside assistance'=>'Roadside Assistance',
436
+ 'package tracking'=>'Package Tracking',
437
+ )
438
+ ),
439
+ array(
440
+ 'label' => 'Name',
441
+ 'id' => 'sd-person-name',
442
+ 'name' => 'sd_data[sd-person-name]',
443
+ 'class' => 'regular-text',
444
+ 'type' => 'text',
445
+ ),
446
+ array(
447
+ 'label' => 'Job Title',
448
+ 'id' => 'sd-person-job-title',
449
+ 'name' => 'sd_data[sd-person-job-title]',
450
+ 'class' => 'regular-text',
451
+ 'type' => 'text',
452
+ ),
453
+ array(
454
+ 'label' => 'Image',
455
+ 'id' => 'sd-person-image',
456
+ 'name' => 'sd_data[sd-person-image][url]',
457
+ 'class' => 'upload large-text',
458
+ 'type' => 'media',
459
+ ),
460
+ array(
461
+ 'label' => 'Phone Number',
462
+ 'id' => 'sd-person-phone-number',
463
+ 'name' => 'sd_data[sd-person-phone-number]',
464
+ 'class' => 'regular-text',
465
+ 'type' => 'text',
466
+ ),
467
+ array(
468
+ 'label' => 'URL',
469
+ 'id' => 'sd-person-url',
470
+ 'name' => 'sd_data[sd-person-url]',
471
+ 'class' => 'regular-text',
472
+ 'type' => 'text',
473
+ ),
474
+
475
+ );
476
+ echo '<h2>'.esc_html__('Knowledge Base','schema-and-structured-data-for-wp').'</h2>';
477
+ echo '<div class="saswp-knowledge-base">';
478
+ $field_objs->saswp_field_generator($meta_fields, $settings);
479
+ echo '</div>';
480
+
481
+ //social
482
+ echo '<h2>'.esc_html__( 'Social Fields', 'schema-and-structured-data-for-wp' ).'</h2>';
483
+ $social_meta_fields = array(
484
+ array(
485
+ 'label' => 'Facebook',
486
+ 'id' => 'saswp-facebook-enable-checkbox',
487
+ 'name' => 'saswp-facebook-enable-checkbox',
488
+ 'type' => 'checkbox',
489
+ 'class' => 'checkbox saswp-checkbox',
490
+ 'hidden' => array(
491
+ 'id' => 'saswp-facebook-enable',
492
+ 'name' => 'sd_data[saswp-facebook-enable]',
493
+ )
494
+ ),
495
+ array(
496
+ 'label' => '',
497
+ 'id' => 'sd_facebook',
498
+ 'name' => 'sd_data[sd_facebook]',
499
+ 'class' => 'regular-text',
500
+ 'type' => 'text',
501
+ 'attributes' => array(
502
+ 'placeholder' => 'https://'
503
+ )
504
+ ),
505
+ array(
506
+ 'label' => 'Twitter',
507
+ 'id' => 'saswp-twitter-enable-checkbox',
508
+ 'name' => 'saswp-twitter-enable-checkbox',
509
+ 'type' => 'checkbox',
510
+ 'class' => 'checkbox saswp-checkbox',
511
+ 'hidden' => array(
512
+ 'id' => 'saswp-twitter-enable',
513
+ 'name' => 'sd_data[saswp-twitter-enable]',
514
+ )
515
+ ),
516
+ array(
517
+ 'label' => '',
518
+ 'id' => 'sd_twitter',
519
+ 'name' => 'sd_data[sd_twitter]',
520
+ 'class' => 'regular-text',
521
+ 'type' => 'text',
522
+ 'attributes' => array(
523
+ 'placeholder' => 'https://'
524
+ )
525
+ ),
526
+ array(
527
+ 'label' => 'Google+',
528
+ 'id' => 'saswp-google-plus-enable-checkbox',
529
+ 'name' => 'saswp-google-plus-enable-checkbox',
530
+ 'type' => 'checkbox',
531
+ 'class' => 'checkbox saswp-checkbox',
532
+ 'hidden' => array(
533
+ 'id' => 'saswp-google-plus-enable',
534
+ 'name' => 'sd_data[saswp-google-plus-enable]',
535
+ )
536
+ ),
537
+ array(
538
+ 'label' => '',
539
+ 'id' => 'sd_google_plus',
540
+ 'name' => 'sd_data[sd_google_plus]',
541
+ 'class' => 'regular-text',
542
+ 'type' => 'text',
543
+ 'attributes' => array(
544
+ 'placeholder' => 'https://'
545
+ )
546
+ ),
547
+ array(
548
+ 'label' => 'Instagram',
549
+ 'id' => 'saswp-instagram-enable-checkbox',
550
+ 'name' => 'saswp-instagram-enable-checkbox',
551
+ 'type' => 'checkbox',
552
+ 'class' => 'checkbox saswp-checkbox',
553
+ 'hidden' => array(
554
+ 'id' => 'saswp-instagram-enable',
555
+ 'name' => 'sd_data[saswp-instagram-enable]',
556
+ )
557
+ ),
558
+ array(
559
+ 'label' => '',
560
+ 'id' => 'sd_instagram',
561
+ 'name' => 'sd_data[sd_instagram]',
562
+ 'class' => 'regular-text',
563
+ 'type' => 'text',
564
+ 'attributes' => array(
565
+ 'placeholder' => 'https://'
566
+ )
567
+ ),
568
+ array(
569
+ 'label' => 'Youtube',
570
+ 'id' => 'saswp-youtube-enable-checkbox',
571
+ 'name' => 'saswp-youtube-enable-checkbox',
572
+ 'type' => 'checkbox',
573
+ 'class' => 'checkbox saswp-checkbox',
574
+ 'hidden' => array(
575
+ 'id' => 'saswp-youtube-enable',
576
+ 'name' => 'sd_data[saswp-youtube-enable]',
577
+ )
578
+ ),
579
+ array(
580
+ 'label' => '',
581
+ 'id' => 'sd_youtube',
582
+ 'name' => 'sd_data[sd_youtube]',
583
+ 'class' => 'regular-text',
584
+ 'type' => 'text',
585
+ 'attributes' => array(
586
+ 'placeholder' => 'https://'
587
+ )
588
+ ),
589
+ array(
590
+ 'label' => 'LinkedIn',
591
+ 'id' => 'saswp-linkedin-enable-checkbox',
592
+ 'name' => 'saswp-linkedin-enable-checkbox',
593
+ 'type' => 'checkbox',
594
+ 'class' => 'checkbox saswp-checkbox',
595
+ 'hidden' => array(
596
+ 'id' => 'saswp-linkedin-enable',
597
+ 'name' => 'sd_data[saswp-linkedin-enable]',
598
+ )
599
+ ),
600
+ array(
601
+ 'label' => '',
602
+ 'id' => 'sd_linkedin',
603
+ 'name' => 'sd_data[sd_linkedin]',
604
+ 'class' => 'regular-text',
605
+ 'type' => 'text',
606
+ 'attributes' => array(
607
+ 'placeholder' => 'https://'
608
+ )
609
+ ),
610
+ array(
611
+ 'label' => 'Pinterest',
612
+ 'id' => 'saswp-pinterest-enable-checkbox',
613
+ 'name' => 'saswp-pinterest-enable-checkbox',
614
+ 'type' => 'checkbox',
615
+ 'class' => 'checkbox saswp-checkbox',
616
+ 'hidden' => array(
617
+ 'id' => 'saswp-pinterest-enable',
618
+ 'name' => 'sd_data[saswp-pinterest-enable]',
619
+ )
620
+ ),
621
+ array(
622
+ 'label' => '',
623
+ 'id' => 'sd_pinterest',
624
+ 'name' => 'sd_data[sd_pinterest]',
625
+ 'class' => 'regular-text',
626
+ 'type' => 'text',
627
+ 'attributes' => array(
628
+ 'placeholder' => 'https://'
629
+ )
630
+ ),
631
+ array(
632
+ 'label' => 'SoundCloud',
633
+ 'id' => 'saswp-soundcloud-enable-checkbox',
634
+ 'name' => 'saswp-soundcloud-enable-checkbox',
635
+ 'type' => 'checkbox',
636
+ 'class' => 'checkbox saswp-checkbox',
637
+ 'hidden' => array(
638
+ 'id' => 'saswp-soundcloud-enable',
639
+ 'name' => 'sd_data[saswp-soundcloud-enable]',
640
+ )
641
+ ),
642
+ array(
643
+ 'label' => '',
644
+ 'id' => 'sd_soundcloud',
645
+ 'name' => 'sd_data[sd_soundcloud]',
646
+ 'class' => 'regular-text',
647
+ 'type' => 'text',
648
+ 'attributes' => array(
649
+ 'placeholder' => 'https://'
650
+ )
651
+ ),
652
+ array(
653
+ 'label' => 'Tumblr',
654
+ 'id' => 'saswp-tumblr-enable-checkbox',
655
+ 'name' => 'saswp-tumblr-enable-checkbox',
656
+ 'type' => 'checkbox',
657
+ 'class' => 'checkbox saswp-checkbox',
658
+ 'hidden' => array(
659
+ 'id' => 'saswp-tumblr-enable',
660
+ 'name' => 'sd_data[saswp-tumblr-enable]',
661
+ )
662
+ ),
663
+ array(
664
+ 'label' => '',
665
+ 'id' => 'sd_tumblr',
666
+ 'name' => 'sd_data[sd_tumblr]',
667
+ 'class' => 'regular-text',
668
+ 'type' => 'text',
669
+ 'attributes' => array(
670
+ 'placeholder' => 'https://'
671
+ )
672
+ ),
673
+
674
+ );
675
+ echo '<div class="saswp-social-fileds">';
676
+ $field_objs->saswp_field_generator($social_meta_fields, $settings);
677
+ echo '</div>';
678
+ ?>
679
+ <?php
680
+ }
681
+
682
+ function saswp_import_callback(){
683
+ $import_message = '';
684
+ $cc_args = array(
685
+ 'posts_per_page' => -1,
686
+ 'post_type' => 'saswp',
687
+ 'meta_key' => 'imported_from',
688
+ 'meta_value' => 'schema',
689
+ );
690
+ $imported_from = new WP_Query( $cc_args );
691
+ if($imported_from->post_count !=0){
692
+ $import_message ='<p>'.esc_html__('This plugin\'s data already has been imported. Do you want to import again?. click on button','schema-and-structured-data-for-wp').'</p>';
693
+ }
694
+ echo '<h2>'.esc_html__('Migration','schema-and-structured-data-for-wp').'</h2>';
695
+ ?>
696
+ <ul>
697
+ <li><div class="saswp-tools-field-title"><div class="saswp-tooltip"><span class="saswp-tooltiptext"><?php echo esc_html__('All the settings and data you can import from this plugin when you click start importing','schema-and-structured-data-for-wp') ?></span><strong><?php echo esc_html__('Schema Plugin','schema-and-structured-data-for-wp'); ?></strong></div><button data-id="schema" class="button saswp-import-plugins"><?php echo esc_html__('Start Importing','schema-and-structured-data-for-wp'); ?></button>
698
+ <p class="saswp-imported-message"></p>
699
+ <?php echo $import_message; ?>
700
+ </div>
701
+ </li>
702
+ </ul>
703
+ <?php
704
+ }
705
+
706
+ function saswp_imported_callback(){
707
+ $settings = saswp_defaultSettings();
708
+ ?>
709
+ <?php
710
+ }
711
+ function saswp_support_page_callback(){
712
+
713
+ ?>
714
+ <div class="saswp_support_div">
715
+ <strong><?php echo esc_html__('If you have any query, please write the query in below box or email us at', 'schema-and-structured-data-for-wp') ?> <a href="mailto:team@magazine3.com">team@magazine3.com</a>. <?php echo esc_html__('We will reply to your email address shortly', 'schema-and-structured-data-for-wp') ?></strong>
716
+
717
+ <ul>
718
+ <li>
719
+ <textarea rows="5" cols="60" id="saswp_query_message" name="saswp_query_message"> </textarea>
720
+ <br>
721
+ <span class="saswp-query-success saswp_hide"><?php echo esc_html__('Message sent successfully, Please wait we will get back to you shortly', 'schema-and-structured-data-for-wp'); ?></span>
722
+ <span class="saswp-query-error saswp_hide"><?php echo esc_html__('Message not sent. please check your network connection', 'schema-and-structured-data-for-wp'); ?></span>
723
+ </li>
724
+ <li><button class="button saswp-send-query"><?php echo esc_html('Send Message', 'schema-and-structured-data-for-wp'); ?></button></li>
725
+ </ul>
726
+
727
+ </div>
728
+ <?php
729
+
730
+ echo '<h1>'.esc_html__( 'Frequently Asked Questions.', 'schema-and-structured-data-for-wp' ).'</h1>
731
+ <br><br>
732
+ <h3>1Q) '.esc_html__( 'How can I setup the Schema and Structured data for individual pages and posts?', 'schema-and-structured-data-for-wp' ).'</h3>
733
+ <p class="saswp_qanda_p">A) '.esc_html__( 'Just with one click on the Structured data option, you will find an add new options window in the structured data option panel. Secondly, you need to write the name of the title where, if you would like to set the individual Page/Post then you can set the Page/Post type equal to the Page/Post(Name).', 'schema-and-structured-data-for-wp' ).'</p>
734
+
735
+ <h3>2Q) '.esc_html__( 'How can I check the code whether the structured data is working or not?', 'schema-and-structured-data-for-wp' ).'</h3>
736
+ <p class="saswp_qanda_p">A) To check the code, the first step we need to take is to copy the code of a page or post then visit the <a href="https://search.google.com/structured-data/testing-tool" target="_blank">Structured data testing tool</a> by clicking on code snippet. Once we paste the snippet we can run the test.</p>
737
+
738
+ <h3> 3Q) '.esc_html__( 'How can I check whether the pages or posts are valid or not?', 'schema-and-structured-data-for-wp' ).'</h3>
739
+ <p class="saswp_qanda_p"> A) '.esc_html__( 'To check the page and post validation, please visit the', 'schema-and-structured-data-for-wp' ).' <a href="https://search.google.com/structured-data/testing-tool" target="_blank">'.esc_html__( 'Structured data testing tool', 'schema-and-structured-data-for-wp' ).'</a> '.esc_html__( 'and paste the link of your website.', 'schema-and-structured-data-for-wp' ).' '.esc_html__( 'Once we click on run test we can see the result whether the page or post is a valid one or not.', 'schema-and-structured-data-for-wp' ).'</p>
740
+
741
+ <h3>4Q) '.esc_html__( 'Where should users contact if they faced any issues?', 'schema-and-structured-data-for-wp' ).'</h3>
742
+ <p class="saswp_qanda_p">A) '.esc_html__( 'We always welcome all our users to share their issues and get them fixed just with one click to the link', 'schema-and-structured-data-for-wp' ).' team@magazine3.com or <a href="https://ampforwp.com/support/" target="_blank">'.esc_html__( 'Support link', 'schema-and-structured-data-for-wp' ).'</a></p><br>';
743
+ }
744
+
745
+ /**
746
+ * Enqueue CSS and JS
747
+ */
748
+ function saswp_enqueue_style_js( $hook ) {
749
+
750
+ // Color picker CSS
751
+ // @refer https://make.wordpress.org/core/2012/11/30/new-color-picker-in-wp-3-5/
752
+ wp_enqueue_style( 'wp-color-picker' );
753
+ // Everything needed for media upload
754
+ wp_enqueue_media();
755
+ // Main JS
756
+ wp_enqueue_script( 'saswp-main-js', SASWP_PLUGIN_URL . 'admin_section/js/main-script.js', array( 'wp-color-picker' ), SASWP_VERSION, true );
757
+ //Main Css
758
+ wp_enqueue_style( 'saswp-main-css', SASWP_PLUGIN_URL . 'admin_section/css/main-style.css', false , SASWP_VERSION );
759
+ }
760
  add_action( 'admin_enqueue_scripts', 'saswp_enqueue_style_js' );
admin_section/structure_admin.php CHANGED
@@ -1,801 +1,894 @@
1
- <?php
2
- //FrontEnd
3
- function saswp_get_all_schema_posts(){
4
- $post_idArray = array();
5
- $query = new WP_Query(
6
- array(
7
- 'post_type' => 'saswp',
8
- 'post_status' => 'publish',
9
- 'posts_per_page' => -1,
10
- ));
11
- while ($query->have_posts()) {
12
- $query->the_post();
13
- $post_idArray[] = get_the_ID();
14
- }
15
- wp_reset_query();
16
- wp_reset_postdata();
17
-
18
- if(count($post_idArray)>0){
19
- $returnData = array();
20
- foreach ($post_idArray as $key => $post_id)
21
- {
22
- $data = saswp_generate_field_data( $post_id );
23
- $data = array_filter($data);
24
- $number_of_fields = count($data);
25
- $unique_checker = 0;
26
- // Check if we have more then 1 fields.
27
- if ( $number_of_fields > 0 ) {
28
- // Check if all the arrays have TRUE setup, then send the value 1, if all the
29
- // values are same.
30
- $unique_checker = count( array_unique($data) );
31
- // Check and make sure only all TRUE values only passed on, if all values are FALSE,
32
- // then making sure all FALSE are converting to 0, and returing false.
33
- // Code will not run.
34
- $array_is_false = in_array(false, $data);
35
- if ( $array_is_false ) {
36
- $unique_checker = 0;
37
- }
38
- }
39
-
40
- if ( $unique_checker === 1 || $unique_checker === true) {
41
- $conditions = get_post_meta( $post_id, 'data_array', true);
42
- $conditions = $conditions[0];
43
- $returnData[] = array(
44
- 'schema_type' => get_post_meta( $post_id, 'schema_type', true),
45
- 'schema_options' => get_post_meta( $post_id, 'schema_options', true),
46
- 'conditions' => $conditions,
47
- );
48
- }
49
- }//foreach closed post_idArray
50
- //Prioritize
51
- if(count($returnData)>0){
52
- $priority = array(
53
- 'post_type'=>1,
54
- 'user_type'=>2,
55
- 'post'=> 3 ,
56
- 'post_category'=> 4,
57
- 'post_format'=> 5,
58
- 'Page'=> 6,
59
- 'page_template'=>7,
60
- 'ef_taxonomy'=>8
61
- );
62
- $actualReturnData = array();
63
- foreach ($returnData as $key => $value) {
64
- $actualReturnData[$priority[$value['conditions']['key_1']]] = $value;
65
- }
66
- $maxs = array_keys($actualReturnData, max($actualReturnData));
67
- return $actualReturnData[$maxs[0]];
68
- }
69
- }//iF Closed post_idArray
70
- return false;
71
- }
72
-
73
- function saswp_generate_field_data( $post_id ){
74
- $conditions = get_post_meta( $post_id, 'data_array', true);
75
-
76
- $output = array();
77
- if ( $conditions ) {
78
- $output = array_map('saswp_comparison_logic_checker', $conditions);
79
- }
80
- return $output;
81
- }
82
-
83
- function saswp_comparison_logic_checker($input){
84
- global $post;
85
- $type = $input['key_1'];
86
- $comparison = $input['key_2'];
87
- $data = $input['key_3'];
88
- $result = '';
89
-
90
- // Get all the users registered
91
- $user = wp_get_current_user();
92
-
93
- switch ($type) {
94
- // Basic Controls ------------
95
- // Posts Type
96
- case 'post_type':
97
- $current_post_type = $post->post_type;
98
- if ( $comparison == 'equal' ) {
99
- if ( $current_post_type == $data ) {
100
- $result = true;
101
- }
102
- }
103
- if ( $comparison == 'not_equal') {
104
- if ( $current_post_type != $data ) {
105
- $result = true;
106
- }
107
- }
108
- break;
109
-
110
- // Logged in User Type
111
- case 'user_type':
112
- if ( $comparison == 'equal') {
113
- if ( in_array( $data, (array) $user->roles ) ) {
114
- $result = true;
115
- }
116
- }
117
- if ( $comparison == 'not_equal') {
118
- require_once ABSPATH . 'wp-admin/includes/user.php';
119
- // Get all the registered user roles
120
- $roles = get_editable_roles();
121
- $all_user_types = array();
122
- foreach ($roles as $key => $value) {
123
- $all_user_types[] = $key;
124
- }
125
- // Flip the array so we can remove the user that is selected from the dropdown
126
- $all_user_types = array_flip( $all_user_types );
127
-
128
- // User Removed
129
- unset( $all_user_types[$data] );
130
-
131
- // Check and make the result true that user is not found
132
- if ( in_array( $data, (array) $all_user_types ) ) {
133
- $result = true;
134
- }
135
- }
136
-
137
- break;
138
-
139
- // Post Controls ------------
140
- // Posts
141
- case 'post':
142
- $current_post = $post->ID;
143
- if ( $comparison == 'equal' ) {
144
- if ( $current_post == $data ) {
145
- $result = true;
146
- }
147
- }
148
- if ( $comparison == 'not_equal') {
149
- if ( $current_post != $data ) {
150
- $result = true;
151
- }
152
- }
153
-
154
- break;
155
-
156
- // Post Category
157
- case 'post_category':
158
- $postcat = get_the_category( $post->ID );
159
- $current_category = $postcat[0]->cat_ID;
160
-
161
- if ( $comparison == 'equal') {
162
- if ( $data == $current_category ) {
163
- $result = true;
164
- }
165
- }
166
- if ( $comparison == 'not_equal') {
167
- if ( $data != $current_category ) {
168
- $result = true;
169
- }
170
- }
171
- break;
172
- // Post Format
173
- case 'post_format':
174
- $current_post_format = get_post_format( $post->ID );
175
- if ( $current_post_format === false ) {
176
- $current_post_format = 'standard';
177
- }
178
- if ( $comparison == 'equal') {
179
- if ( $data == $current_post_format ) {
180
- $result = true;
181
- }
182
- }
183
- if ( $comparison == 'not_equal') {
184
- if ( $data != $current_post_format ) {
185
- $result = true;
186
- }
187
- }
188
- break;
189
-
190
- // Page Controls ----------------
191
- // Page
192
- case 'page':
193
- global $redux_builder_amp;
194
- if(function_exists('ampforwp_is_front_page')){
195
- if(ampforwp_is_front_page()){
196
- $current_post = $redux_builder_amp['amp-frontpage-select-option-pages'];
197
- } else{
198
- $current_post = $post->ID;
199
- }
200
- }else{
201
- $current_post = $post->ID;
202
- }
203
- if ( $comparison == 'equal' ) {
204
- if ( $current_post == $data ) {
205
- $result = true;
206
- }
207
- }
208
- if ( $comparison == 'not_equal') {
209
- if ( $current_post != $data ) {
210
- $result = true;
211
- }
212
- }
213
- break;
214
-
215
- // Page Template
216
- case 'page_template':
217
- $current_page_template = get_page_template_slug( $post->ID );
218
- if ( $current_page_template == false ) {
219
- $current_page_template = 'default';
220
- }
221
- if ( $comparison == 'equal' ) {
222
- if ( $current_page_template == $data ) {
223
- $result = true;
224
- }
225
- }
226
- if ( $comparison == 'not_equal') {
227
- if ( $current_page_template != $data ) {
228
- $result = true;
229
- }
230
- }
231
-
232
- break;
233
-
234
- // Other Controls ---------------
235
- // Taxonomy Term
236
- case 'ef_taxonomy':
237
- // Get all the post registered taxonomies
238
- // Get the list of all the taxonomies associated with current post
239
- $taxonomy_names = get_post_taxonomies( $post->ID );
240
-
241
- $checker = '';
242
- $post_terms = '';
243
-
244
- if ( $data != 'all') {
245
- $post_terms = wp_get_post_terms($post->ID, $data);
246
-
247
- if ( $comparison == 'equal' ) {
248
- if ( $post_terms ) {
249
- $result = true;
250
- }
251
- }
252
-
253
- if ( $comparison == 'not_equal') {
254
- $checker = in_array($data, $taxonomy_names);
255
- if ( ! $checker ) {
256
- $result = true;
257
- }
258
- }
259
- if($result==true && isset( $input['key_4'] ) && $input['key_4'] !='all'){
260
- $term_data = $input['key_4'];
261
- $terms = wp_get_post_terms( $post->ID ,$data);
262
- if(count($terms)>0){
263
- $termChoices = array();
264
- foreach ($terms as $key => $termvalue) {
265
- $termChoices[] = $termvalue->slug;
266
- }
267
- }
268
- $result = false;
269
- if(in_array($term_data, $termChoices)){
270
- $result = true;
271
- }
272
- }//if closed for key_4
273
-
274
- } else {
275
-
276
- if ( $comparison == 'equal' ) {
277
- if ( $taxonomy_names ) {
278
- $result = true;
279
- }
280
- }
281
-
282
- if ( $comparison == 'not_equal') {
283
- if ( ! $taxonomy_names ) {
284
- $result = true;
285
- }
286
- }
287
-
288
- }
289
- break;
290
-
291
- default:
292
- $result = false;
293
- break;
294
- }
295
-
296
- return $result;
297
- }
298
-
299
-
300
- require_once( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/ajax-selectbox.php' );
301
- //Back End
302
- if(is_admin()){
303
- add_action( 'init', 'saswp_create_post_type' );
304
- function saswp_create_post_type() {
305
-
306
-
307
- register_post_type( 'saswp',
308
- array(
309
- 'labels' => array(
310
- 'name' => esc_html__( 'Structured Data', 'schema-and-structured-data-for-wp' ),
311
- 'singular_name' => esc_html__( 'Structured Data', 'schema-and-structured-data-for-wp' ),
312
- 'add_new' => esc_html__( 'Add New', 'schema-and-structured-data-for-wp' ),
313
- 'add_new_item' => esc_html__( 'Add New', 'schema-and-structured-data-for-wp' ),
314
- 'edit_item' => esc_html__( 'Edit Structured Data','schema-and-structured-data-for-wp')
315
- ),
316
- 'public' => true,
317
- 'has_archive' => false,
318
- 'exclude_from_search' => true,
319
- 'publicly_queryable' => false,
320
- 'supports' => array('title'),
321
- )
322
- );
323
- }
324
- add_action( 'add_meta_boxes', 'saswp_create_meta_box_select' );
325
- function saswp_create_meta_box_select(){
326
- // Repeater Comparison Field
327
- add_meta_box( 'amp_sdwp_select', esc_html__( 'Placement','schema-and-structured-data-for-wp' ), 'saswp_select_callback', 'saswp','normal', 'high' );
328
-
329
- }
330
-
331
-
332
-
333
- function saswp_select_callback($post) {
334
-
335
- $data_array = esc_sql ( get_post_meta($post->ID, 'data_array', true) );
336
- $schema_type = esc_sql ( get_post_meta($post->ID, 'schema_type', true) );
337
- $schema_options = esc_sql ( get_post_meta($post->ID, 'schema_options', true) );
338
- $data_array = is_array($data_array)? array_values($data_array): array();
339
- if ( empty( $data_array ) ) {
340
- $data_array = array(
341
- array(
342
- 'key_1' => 'post_type',
343
- 'key_2' => 'not_equal',
344
- 'key_3' => 'none',
345
- )
346
- );
347
- }
348
- //security check
349
- wp_nonce_field( 'saswp_select_action_nonce', 'saswp_select_name_nonce' );?>
350
-
351
- <?php
352
- // Type Select
353
- $choices = array(
354
- esc_html__("Basic",'schema-and-structured-data-for-wp') => array(
355
- 'post_type' => esc_html__("Post Type",'schema-and-structured-data-for-wp'),
356
- 'user_type' => esc_html__("Logged in User Type",'schema-and-structured-data-for-wp'),
357
- ),
358
- esc_html__("Post",'schema-and-structured-data-for-wp') => array(
359
- 'post' => esc_html__("Post",'schema-and-structured-data-for-wp'),
360
- 'post_category' => esc_html__("Post Category",'schema-and-structured-data-for-wp'),
361
- 'post_format' => esc_html__("Post Format",'schema-and-structured-data-for-wp'),
362
- ),
363
- esc_html__("Page",'schema-and-structured-data-for-wp') => array(
364
- 'page' => esc_html__("Page",'schema-and-structured-data-for-wp'),
365
- 'page_template' => esc_html__("Page Template",'schema-and-structured-data-for-wp'),
366
- ),
367
- esc_html__("Other",'schema-and-structured-data-for-wp') => array(
368
- 'ef_taxonomy' => esc_html__("Taxonomy Term",'schema-and-structured-data-for-wp'),
369
- )
370
- );
371
-
372
- $comparison = array(
373
- 'equal' => esc_html__( 'Equal to', 'schema-and-structured-data-for-wp'),
374
- 'not_equal' => esc_html__( 'Not Equal to', 'schema-and-structured-data-for-wp'),
375
- );
376
-
377
- $total_fields = count( $data_array ); ?>
378
-
379
- <table class="widefat">
380
- <tbody id="sdwp-repeater-tbody" class="fields-wrapper-1">
381
- <?php for ($i=0; $i < $total_fields; $i++) {
382
- $selected_val_key_1 = $data_array[$i]['key_1'];
383
- $selected_val_key_2 = $data_array[$i]['key_2'];
384
- $selected_val_key_3 = $data_array[$i]['key_3'];
385
- $selected_val_key_4 = '';
386
- if(isset($data_array[$i]['key_4'])){
387
- $selected_val_key_4 = $data_array[$i]['key_4'];
388
- }
389
- ?>
390
- <tr class="toclone">
391
- <td style="width:31%" class="post_types">
392
- <select class="widefat select-post-type <?php echo esc_attr( $i );?>" name="data_array[<?php echo esc_attr( $i) ?>][key_1]">
393
- <?php
394
- foreach ($choices as $choice_key => $choice_value) { ?>
395
- <option disabled class="pt-heading" value="<?php echo esc_attr($choice_key);?>"> <?php echo esc_html__($choice_key,'schema-and-structured-data-for-wp');?> </option>
396
- <?php
397
- foreach ($choice_value as $sub_key => $sub_value) { ?>
398
- <option class="pt-child" value="<?php echo esc_attr( $sub_key );?>" <?php selected( $selected_val_key_1, $sub_key );?> > <?php echo esc_html__($sub_value,'schema-and-structured-data-for-wp');?> </option>
399
- <?php
400
- }
401
- } ?>
402
- </select>
403
- </td>
404
- <td style="width:31%">
405
- <select class="widefat comparison" name="data_array[<?php echo esc_attr( $i )?>][key_2]"> <?php
406
- foreach ($comparison as $key => $value) {
407
- $selcomp = '';
408
- if($key == $selected_val_key_1){
409
- $selcomp = 'selected';
410
- }
411
- ?>
412
- <option class="pt-child" value="<?php echo esc_attr( $key );?>" <?php echo esc_attr($selcomp); ?> > <?php echo esc_html__($value,'schema-and-structured-data-for-wp');?> </option>
413
- <?php
414
- } ?>
415
- </select>
416
- </td>
417
- <td style="width:31%">
418
- <div class="insert-ajax-select">
419
- <?php saswp_ajax_select_creator($selected_val_key_1, $selected_val_key_3, $i );
420
- if($selected_val_key_1 == 'ef_taxonomy'){
421
- saswp_create_ajax_select_taxonomy($selected_val_key_3, $selected_val_key_4, $i);
422
- }
423
- ?>
424
- <div class="spinner"></div>
425
- </div>
426
- </td>
427
-
428
- <td class="widefat structured-clone" style="width:3.5%">
429
- <span> <button type="button"> <?php echo esc_html__('Add' ,'schema-and-structured-data-for-wp');?> </button> </span> </td>
430
-
431
- <td class="widefat structured-delete" style="width:3.5%">
432
- <span> <button type="button"> <?php echo esc_html__( 'Remove' ,'schema-and-structured-data-for-wp');?> </button> </span> </td>
433
- </tr>
434
- <?php
435
- } ?>
436
- </tbody>
437
- </table>
438
- <br/>
439
- <style type="text/css">
440
- .option-table-class{width:100%;}
441
- .option-table-class tr td {padding: 10px 10px 10px 10px ;}
442
- .option-table-class tr > td{width: 30%;}
443
- .option-table-class tr td:last-child{width: 60%;}
444
- .option-table-class input[type="text"], select{width:100%;}
445
- </style>
446
- <table class="option-table-class">
447
- <tbody>
448
- <tr>
449
- <td><label for="schema_type"><?php echo esc_html__( 'Schema Type' ,'schema-and-structured-data-for-wp');?></label></td>
450
- <td><select id="schema_type" name="schema_type">
451
- <?php
452
-
453
- $all_schema_array = array(
454
- 'Blogposting' => 'Blogposting',
455
- 'NewsArticle' => 'NewsArticle',
456
- 'WebPage' => 'WebPage',
457
- 'Article' => 'Article',
458
- 'Recipe' => 'Recipe',
459
- 'Product' => 'Product',
460
- 'VideoObject' => 'VideoObject'
461
- );
462
- foreach ($all_schema_array as $key => $value) {
463
- $sel = '';
464
- if($schema_type==$key){
465
- $sel = 'selected';
466
- }
467
- echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
468
- }
469
- ?>
470
- </select></td>
471
- </tr>
472
-
473
- <tr>
474
- <td><label for="notAccessibleForFree"><?php echo esc_html__( 'Paywall', 'schema-and-structured-data-for-wp' ) ?></label></td>
475
- <td><input type="checkbox" id="notAccessibleForFree" name="notAccessibleForFree" value="1" <?php if(isset($schema_options['notAccessibleForFree']) && $schema_options['notAccessibleForFree']==1){echo 'checked'; }?>>
476
- </td>
477
- </tr>
478
- <tr <?php if(!isset($schema_options['notAccessibleForFree']) || $schema_options['notAccessibleForFree']!=1){echo 'style="display:none"'; }?>>
479
- <td><label for="isAccessibleForFree"><?php echo esc_html__( 'Is accessible for free', 'schema-and-structured-data-for-wp' ) ?></label></td>
480
- <td>
481
- <select name="isAccessibleForFree" id="isAccessibleForFree">
482
- <option value="False" <?php if( isset($schema_options['isAccessibleForFree']) && $schema_options['isAccessibleForFree']=='False'){echo 'selected'; }?>><?php echo esc_html__( 'False', 'schema-and-structured-data-for-wp' ); ?></option>
483
- <option value="True" <?php if( isset($schema_options['isAccessibleForFree']) && $schema_options['isAccessibleForFree']=='True'){echo 'selected'; }?>><?php echo esc_html__( 'True', 'schema-and-structured-data-for-wp' ); ?></option>
484
- </select>
485
- </td>
486
- </tr>
487
- <tr <?php if(!isset($schema_options['notAccessibleForFree']) || $schema_options['notAccessibleForFree']!=1){echo 'style="display:none"'; }?>>
488
- <td>
489
- <label for="paywall_class_name"><?php echo esc_html__( 'Enter the class name of paywall section', 'schema-and-structured-data-for-wp' ); ?></label>
490
- </td>
491
- <td><input type="text" id="paywall_class_name" name="paywall_class_name" value="<?php if( isset($schema_options['paywall_class_name']) ){echo esc_attr($schema_options['paywall_class_name']); }?>"></td>
492
- </tr>
493
- </tbody>
494
- </table>
495
- <?php
496
- }
497
- add_action( 'admin_enqueue_scripts', 'saswp_style_script_include' );
498
- function saswp_style_script_include() {
499
- global $pagenow, $typenow;
500
- if (is_admin() && $pagenow=='post-new.php' OR $pagenow=='post.php' && $typenow=='saswp') {
501
- wp_register_script( 'structure_admin', plugin_dir_url(__FILE__) . '/js/structure_admin.js', array( 'jquery'), SASWP_VERSION, true );
502
- // Localize the script with new data
503
- $data_array = array(
504
- 'ajax_url' => admin_url( 'admin-ajax.php' )
505
- );
506
- wp_localize_script( 'structure_admin', 'amp_sdwp_field_data', $data_array );
507
- wp_enqueue_script('structure_admin');
508
- }
509
- }
510
-
511
- // Save PHP Editor
512
- add_action ( 'save_post' , 'saswp_select_save_data' );
513
- function saswp_select_save_data ( $post_id ) {
514
- // print_r($_POST);die;
515
- if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
516
-
517
- // if our nonce isn't there, or we can't verify it, bail
518
- if( !isset( $_POST['saswp_select_name_nonce'] ) || !wp_verify_nonce( $_POST['saswp_select_name_nonce'], 'saswp_select_action_nonce' ) ) return;
519
-
520
- // if our current user can't edit this post, bail
521
- if( !current_user_can( 'edit_post' ) ) return;
522
- $meta_value = get_post_meta( $post_id, null, true );
523
- $post_data_array = array();
524
- foreach($_POST['data_array'] as $post){
525
- $post_data_array[] = array_map('sanitize_text_field', $post);
526
- }
527
- $post_schema_type = sanitize_text_field($_POST['schema_type']);
528
- $notAccessibleForFree = sanitize_text_field($_POST['notAccessibleForFree']);
529
- $isAccessibleForFree = sanitize_text_field($_POST['isAccessibleForFree']);
530
- $paywall_class_name = sanitize_text_field($_POST['paywall_class_name']);
531
- $saswp_schema_options = array('isAccessibleForFree'=>$isAccessibleForFree,'notAccessibleForFree'=>$notAccessibleForFree,'paywall_class_name'=>$paywall_class_name);
532
-
533
- if(isset($_POST['data_array'])){
534
- update_post_meta(
535
- $post_id,
536
- 'data_array',
537
- $post_data_array
538
- );
539
- update_post_meta(
540
- $post_id,
541
- 'schema_type',
542
- $post_schema_type
543
- );
544
- update_post_meta(
545
- $post_id,
546
- 'schema_options',
547
- $saswp_schema_options
548
- );
549
- }
550
- }
551
- add_action("admin_init",'saswp_migration');
552
- function saswp_migration(){
553
- $sdwp_migration_posts = get_option("sdwp_migration_posts");
554
- if($sdwp_migration_posts != 'inserted'){
555
- $postarr = array(
556
- 'post_type'=>'saswp',
557
- 'post_title'=>'Default Page Type',
558
- 'post_status'=>'publish',
559
-
560
- );
561
- $insertedPageId = wp_insert_post( $postarr );
562
- if($insertedPageId){
563
- $post_data_array = array(
564
- array(
565
- 'key_1'=>'post_type',
566
- 'key_2'=>'equal',
567
- 'key_3'=>'page',
568
- )
569
- );
570
- $schema_options_array = array('isAccessibleForFree'=>False,'notAccessibleForFree'=>0,'paywall_class_name'=>'');
571
- update_post_meta( $insertedPageId, 'data_array', $post_data_array);
572
- update_post_meta( $insertedPageId, 'schema_type', 'WebPage');
573
- update_post_meta( $insertedPageId, 'schema_options', $schema_options_array);
574
- }
575
-
576
- $postarr = array(
577
- 'post_type'=>'saswp',
578
- 'post_title'=>'Default Post Type',
579
- 'post_status'=>'publish',
580
-
581
- );
582
- $insertedPageId = wp_insert_post( $postarr );
583
- if($insertedPageId){
584
- $post_data_array = array(
585
- array(
586
- 'key_1'=>'post_type',
587
- 'key_2'=>'equal',
588
- 'key_3'=>'post',
589
- )
590
- );
591
- $schema_options_array = array('isAccessibleForFree'=>False,'notAccessibleForFree'=>0,'paywall_class_name'=>'');
592
- update_post_meta( $insertedPageId, 'data_array', $post_data_array);
593
- update_post_meta( $insertedPageId, 'schema_type', 'Blogposting');
594
- update_post_meta( $insertedPageId, 'schema_options', $schema_options_array);
595
- }
596
-
597
- update_option( "sdwp_migration_posts", "inserted");
598
-
599
- }
600
- }
601
-
602
- }//CLosed is_admin
603
-
604
- // Generate Proper post types for select and to add data.
605
- add_action('wp_loaded', 'saswp_post_type_generator');
606
-
607
- function saswp_post_type_generator(){
608
-
609
- $post_types = '';
610
- $post_types = get_post_types( array( 'public' => true ), 'names' );
611
-
612
- // Remove Unsupported Post types
613
- unset($post_types['attachment'], $post_types['amp_acf']);
614
-
615
- return $post_types;
616
- }
617
-
618
- add_action('wp_head','saswp_custom_breadcrumbs',99);
619
-
620
- // Breadcrumbs
621
- function saswp_custom_breadcrumbs() {
622
- global $sd_data;
623
- $variables1_titles = array();
624
- $variables2_links = array();
625
- // Settings
626
- $separator = '&gt;';
627
- $home_title = esc_html__('Homepage', 'schema-and-structured-data-for-wp' );
628
-
629
- // If you have any custom post types with custom taxonomies, put the taxonomy name below (e.g. product_cat)
630
- $custom_taxonomy = 'product_cat';
631
-
632
- // Get the query & post information
633
- global $post;
634
-
635
- // Do not display on the homepage
636
- if ( !is_front_page() ) {
637
-
638
- // Build the breadcrums
639
- // Home page
640
- $variables1_titles[] = $home_title;
641
- $variables2_links[] = get_home_url();
642
-
643
-
644
- if ( is_archive() && !is_tax() && !is_category() && !is_tag() && !is_author() ) {
645
- $archive_title = post_type_archive_title($prefix, false);
646
- $variables1_titles[] = $archive_title;
647
-
648
-
649
- } else if ( is_author() ) {
650
- global $author;
651
-
652
- $userdata = get_userdata( $author );
653
- $author_url= get_author_posts_url($userdata->ID);
654
-
655
- // author name
656
- $variables1_titles[]= $userdata->display_name;
657
- $variables2_links[]= $author_url;
658
-
659
- } else if ( is_archive() && is_tax() && !is_category() && !is_tag() ) {
660
-
661
- // If post is a custom post type
662
- $post_type = get_post_type();
663
-
664
- // If it is a custom post type display name and link
665
- if($post_type != 'post') {
666
-
667
- $post_type_object = get_post_type_object($post_type);
668
- $post_type_archive = get_post_type_archive_link($post_type);
669
- $variables1_titles[] = $post_type_object->labels->name;
670
- $variables2_links[] = $post_type_archive;
671
-
672
- }
673
-
674
- $custom_tax_name = get_queried_object()->name;
675
- $variables1_titles[] = $custom_tax_name;
676
-
677
- } else if ( is_single() ) {
678
-
679
- // If post is a custom post type
680
- $post_type = get_post_type();
681
-
682
- // If it is a custom post type display name and link
683
- if($post_type != 'post') {
684
-
685
- $post_type_object = get_post_type_object($post_type);
686
- $post_type_archive = get_post_type_archive_link($post_type);
687
-
688
- $variables1_titles[]= $post_type_object->labels->name;
689
- $variables2_links[]= $post_type_archive;
690
- }
691
-
692
- // Get post category info
693
- $category = get_the_category();
694
-
695
- if(!empty($category)) {
696
- $category_values = array_values( $category );
697
- foreach ($category_values as $category_value) {
698
- $category_name = get_category($category_value);
699
- $cat_name = $category_name->name;
700
- $variables1_titles[]=$cat_name;
701
- $variables2_links[]=get_category_link( $category_value );
702
-
703
- }
704
- // Get last category post is in
705
- $last_category = end(($category));
706
- $category_name = get_category($last_category);
707
- // Get parent any categories and create array
708
- $get_cat_parents = rtrim(get_category_parents($last_category->term_id, true, ','),',');
709
- $cat_parents = explode(',',$get_cat_parents);
710
-
711
- // Loop through parent categories and store in variable $cat_display
712
- $cat_display = '';
713
- foreach($cat_parents as $parents) {
714
- $cat_display .= '<li class="item-cat">'.esc_html__( $parents, 'schema-and-structured-data-for-wp' ).'</li>';
715
- $cat_display .= '<li class="separator"> ' . esc_html__( $separator, 'schema-and-structured-data-for-wp' ) . ' </li>';
716
- }
717
- }
718
-
719
- // If it's a custom post type within a custom taxonomy
720
- $taxonomy_exists = taxonomy_exists($custom_taxonomy);
721
- if(empty($last_category) && !empty($custom_taxonomy) && $taxonomy_exists) {
722
-
723
- $taxonomy_terms = get_the_terms( $post->ID, $custom_taxonomy );
724
- $cat_id = $taxonomy_terms[0]->term_id;
725
- $cat_link = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
726
- $cat_name = $taxonomy_terms[0]->name;
727
-
728
- }
729
-
730
- if(!empty($cat_id)) {
731
- $variables1_titles[]= $cat_name;
732
- $variables2_links[]=$cat_link;
733
-
734
- } else {
735
- if($post_type == 'post') {
736
- $variables1_titles[]= get_the_title();
737
- }
738
- }
739
-
740
- } else if ( is_category() ) {
741
- $category = get_the_category();
742
-
743
- if(!empty($category)) {
744
- $category_values = array_values( $category );
745
- foreach ($category_values as $category_value) {
746
- $category_name = get_category($category_value);
747
- $cat_name = $category_name->name;
748
- $variables1_titles[]=$cat_name;
749
- $variables2_links[]=get_category_link( $category_value );
750
-
751
- }
752
- }
753
- } else if ( is_page() ) {
754
-
755
- // Standard page
756
- if( $post->post_parent ){
757
-
758
- // If child page, get parents
759
- $anc = get_post_ancestors( $post->ID );
760
-
761
- // Get parents in the right order
762
- $anc = array_reverse($anc);
763
-
764
- // Parent page loop
765
- if ( !isset( $parents ) ) $parents = null;
766
- foreach ( $anc as $ancestor ) {
767
- $parents .= '<li class="item-parent item-parent-' . esc_attr($ancestor) . '"><a class="bread-parent bread-parent-' . esc_attr($ancestor) . '" href="' . esc_url(get_permalink($ancestor)) . '" title="' . esc_attr(get_the_title($ancestor)) . '">' . esc_html__(get_the_title($ancestor), 'schema-and-structured-data-for-wp' ) . '</a></li>';
768
- $parents .= '<li class="separator separator-' . esc_attr($ancestor) . '"> ' . esc_html__($separator, 'schema-and-structured-data-for-wp' ) . ' </li>';
769
- $variables1_titles[]= get_the_title($ancestor);
770
- $variables2_links[]=get_permalink($ancestor);
771
- }
772
-
773
- $variables1_titles[]= get_the_title();
774
- $variables2_links[]=get_permalink();
775
-
776
- } else {
777
- $variables1_titles[]=get_the_title();
778
- $variables2_links[]=get_permalink();
779
- }
780
-
781
- } else if ( is_tag() ) {
782
- // Tag page
783
- // Get tag information
784
- $term_id = get_query_var('tag_id');
785
- $taxonomy = 'post_tag';
786
- $args = 'include=' . $term_id;
787
- $terms = get_terms( $taxonomy, $args );
788
- $get_term_id = $terms[0]->term_id;
789
- $get_term_name = $terms[0]->name;
790
- $term_link = get_term_link($get_term_id );
791
-
792
- // Tag name and link
793
-
794
- $variables1_titles[] = $get_term_name;
795
- $variables2_links[] = $term_link;
796
- }
797
- $sd_data['titles']= $variables1_titles;
798
- $sd_data['links']= $variables2_links;
799
- }
800
-
801
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ //FrontEnd
3
+ function saswp_get_all_schema_posts(){
4
+ $post_idArray = array();
5
+ $query = new WP_Query(
6
+ array(
7
+ 'post_type' => 'saswp',
8
+ 'post_status' => 'publish',
9
+ 'posts_per_page' => -1,
10
+ ));
11
+ while ($query->have_posts()) {
12
+ $query->the_post();
13
+ $post_idArray[] = get_the_ID();
14
+ }
15
+ wp_reset_query();
16
+ wp_reset_postdata();
17
+
18
+ if(count($post_idArray)>0){
19
+ $returnData = array();
20
+ foreach ($post_idArray as $key => $post_id)
21
+ {
22
+ $unique_checker ='';
23
+ $resultset = saswp_generate_field_data( $post_id );
24
+
25
+ if($resultset){
26
+
27
+ $condition_array = array();
28
+
29
+ foreach ($resultset as $result){
30
+
31
+ $data = array_filter($result);
32
+ $number_of_fields = count($data);
33
+ $checker = 0;
34
+ // Check if we have more then 1 fields.
35
+ if ( $number_of_fields > 0 ) {
36
+ // Check if all the arrays have TRUE setup, then send the value 1, if all the
37
+ // values are same.
38
+ $checker = count( array_unique($data) );
39
+ // Check and make sure only all TRUE values only passed on, if all values are FALSE,
40
+ // then making sure all FALSE are converting to 0, and returing false.
41
+ // Code will not run.
42
+ $array_is_false = in_array(false, $result);
43
+ if ( $array_is_false ) {
44
+ $checker = 0;
45
+ }
46
+ }
47
+ $condition_array[] = $checker;
48
+ }
49
+ $array_is_true = in_array(true,$condition_array);
50
+ if($array_is_true){
51
+ $unique_checker = 1;
52
+ }
53
+ }else{
54
+ $unique_checker ='notset';
55
+ }
56
+
57
+ if ( $unique_checker === 1 || $unique_checker === true || $unique_checker == 'notset') {
58
+ $conditions = array();
59
+
60
+ $data_group_array = get_post_meta( $post_id, 'data_group_array', true);
61
+ if(isset($data_group_array['group-0'])){
62
+ $conditions = $data_group_array['group-0']['data_array'];
63
+ }
64
+ if(isset($conditions[0])){
65
+ $conditions = $conditions[0];
66
+ }
67
+ $returnData[] = array(
68
+ 'schema_type' => get_post_meta( $post_id, 'schema_type', true),
69
+ 'schema_options' => get_post_meta( $post_id, 'schema_options', true),
70
+ 'conditions' => $conditions,
71
+ 'post_id' => $post_id,
72
+ );
73
+ }
74
+
75
+ }//foreach closed post_idArray
76
+ return $returnData;
77
+ }//iF Closed post_idArray
78
+ return false;
79
+ }
80
+
81
+ function saswp_generate_field_data( $post_id ){
82
+ $data_group_array = get_post_meta( $post_id, 'data_group_array', true);
83
+ $output = array();
84
+ if($data_group_array){
85
+ foreach ($data_group_array as $gropu){
86
+ $output[] = array_map('saswp_comparison_logic_checker', $gropu['data_array']);
87
+ }
88
+
89
+ }
90
+ return $output;
91
+ }
92
+
93
+ function saswp_comparison_logic_checker($input){
94
+ global $post;
95
+ $type = $input['key_1'];
96
+ $comparison = $input['key_2'];
97
+ $data = $input['key_3'];
98
+ $result = '';
99
+
100
+ // Get all the users registered
101
+ $user = wp_get_current_user();
102
+
103
+ switch ($type) {
104
+ case 'show_globally':
105
+ $result = true;
106
+ break;
107
+ // Basic Controls ------------
108
+ // Posts Type
109
+ case 'post_type':
110
+ $current_post_type = $post->post_type;
111
+ if ( $comparison == 'equal' ) {
112
+ if ( $current_post_type == $data ) {
113
+ $result = true;
114
+ }
115
+ }
116
+ if ( $comparison == 'not_equal') {
117
+ if ( $current_post_type != $data ) {
118
+ $result = true;
119
+ }
120
+ }
121
+ break;
122
+
123
+ // Logged in User Type
124
+ case 'user_type':
125
+ if ( $comparison == 'equal') {
126
+ if ( in_array( $data, (array) $user->roles ) ) {
127
+ $result = true;
128
+ }
129
+ }
130
+ if ( $comparison == 'not_equal') {
131
+ require_once ABSPATH . 'wp-admin/includes/user.php';
132
+ // Get all the registered user roles
133
+ $roles = get_editable_roles();
134
+ $all_user_types = array();
135
+ foreach ($roles as $key => $value) {
136
+ $all_user_types[] = $key;
137
+ }
138
+ // Flip the array so we can remove the user that is selected from the dropdown
139
+ $all_user_types = array_flip( $all_user_types );
140
+
141
+ // User Removed
142
+ unset( $all_user_types[$data] );
143
+
144
+ // Check and make the result true that user is not found
145
+ if ( in_array( $data, (array) $all_user_types ) ) {
146
+ $result = true;
147
+ }
148
+ }
149
+
150
+ break;
151
+
152
+ // Post Controls ------------
153
+ // Posts
154
+ case 'post':
155
+ $current_post = $post->ID;
156
+ if ( $comparison == 'equal' ) {
157
+ if ( $current_post == $data ) {
158
+ $result = true;
159
+ }
160
+ }
161
+ if ( $comparison == 'not_equal') {
162
+ if ( $current_post != $data ) {
163
+ $result = true;
164
+ }
165
+ }
166
+
167
+ break;
168
+
169
+ // Post Category
170
+ case 'post_category':
171
+ $postcat = get_the_category( $post->ID );
172
+ $current_category = $postcat[0]->cat_ID;
173
+
174
+ if ( $comparison == 'equal') {
175
+ if ( $data == $current_category ) {
176
+ $result = true;
177
+ }
178
+ }
179
+ if ( $comparison == 'not_equal') {
180
+ if ( $data != $current_category ) {
181
+ $result = true;
182
+ }
183
+ }
184
+ break;
185
+ // Post Format
186
+ case 'post_format':
187
+ $current_post_format = get_post_format( $post->ID );
188
+ if ( $current_post_format === false ) {
189
+ $current_post_format = 'standard';
190
+ }
191
+ if ( $comparison == 'equal') {
192
+ if ( $data == $current_post_format ) {
193
+ $result = true;
194
+ }
195
+ }
196
+ if ( $comparison == 'not_equal') {
197
+ if ( $data != $current_post_format ) {
198
+ $result = true;
199
+ }
200
+ }
201
+ break;
202
+
203
+ // Page Controls ----------------
204
+ // Page
205
+ case 'page':
206
+ global $redux_builder_amp;
207
+ if(function_exists('ampforwp_is_front_page')){
208
+ if(ampforwp_is_front_page()){
209
+ $current_post = $redux_builder_amp['amp-frontpage-select-option-pages'];
210
+ } else{
211
+ $current_post = $post->ID;
212
+ }
213
+ }else{
214
+ $current_post = $post->ID;
215
+ }
216
+ if ( $comparison == 'equal' ) {
217
+ if ( $current_post == $data ) {
218
+ $result = true;
219
+ }
220
+ }
221
+ if ( $comparison == 'not_equal') {
222
+ if ( $current_post != $data ) {
223
+ $result = true;
224
+ }
225
+ }
226
+ break;
227
+
228
+ // Page Template
229
+ case 'page_template':
230
+ $current_page_template = get_page_template_slug( $post->ID );
231
+ if ( $current_page_template == false ) {
232
+ $current_page_template = 'default';
233
+ }
234
+ if ( $comparison == 'equal' ) {
235
+ if ( $current_page_template == $data ) {
236
+ $result = true;
237
+ }
238
+ }
239
+ if ( $comparison == 'not_equal') {
240
+ if ( $current_page_template != $data ) {
241
+ $result = true;
242
+ }
243
+ }
244
+
245
+ break;
246
+
247
+ // Other Controls ---------------
248
+ // Taxonomy Term
249
+ case 'ef_taxonomy':
250
+ // Get all the post registered taxonomies
251
+ // Get the list of all the taxonomies associated with current post
252
+ $taxonomy_names = get_post_taxonomies( $post->ID );
253
+
254
+ $checker = '';
255
+ $post_terms = '';
256
+
257
+ if ( $data != 'all') {
258
+ $post_terms = wp_get_post_terms($post->ID, $data);
259
+
260
+ if ( $comparison == 'equal' ) {
261
+ if ( $post_terms ) {
262
+ $result = true;
263
+ }
264
+ }
265
+
266
+ if ( $comparison == 'not_equal') {
267
+ $checker = in_array($data, $taxonomy_names);
268
+ if ( ! $checker ) {
269
+ $result = true;
270
+ }
271
+ }
272
+ if($result==true && isset( $input['key_4'] ) && $input['key_4'] !='all'){
273
+ $term_data = $input['key_4'];
274
+ $terms = wp_get_post_terms( $post->ID ,$data);
275
+ if(count($terms)>0){
276
+ $termChoices = array();
277
+ foreach ($terms as $key => $termvalue) {
278
+ $termChoices[] = $termvalue->slug;
279
+ }
280
+ }
281
+ $result = false;
282
+ if(in_array($term_data, $termChoices)){
283
+ $result = true;
284
+ }
285
+ }//if closed for key_4
286
+
287
+ } else {
288
+
289
+ if ( $comparison == 'equal' ) {
290
+ if ( $taxonomy_names ) {
291
+ $result = true;
292
+ }
293
+ }
294
+
295
+ if ( $comparison == 'not_equal') {
296
+ if ( ! $taxonomy_names ) {
297
+ $result = true;
298
+ }
299
+ }
300
+
301
+ }
302
+ break;
303
+
304
+ default:
305
+ $result = false;
306
+ break;
307
+ }
308
+
309
+ return $result;
310
+ }
311
+
312
+
313
+ require_once( untrailingslashit( plugin_dir_path( __FILE__ ) ) . '/ajax-selectbox.php' );
314
+ //Back End
315
+ if(is_admin()){
316
+ add_action( 'init', 'saswp_create_post_type' );
317
+ function saswp_create_post_type() {
318
+
319
+
320
+ register_post_type( 'saswp',
321
+ array(
322
+ 'labels' => array(
323
+ 'name' => esc_html__( 'Structured Data', 'schema-and-structured-data-for-wp' ),
324
+ 'singular_name' => esc_html__( 'Structured Data', 'schema-and-structured-data-for-wp' ),
325
+ 'add_new' => esc_html__( 'Add Schema Type', 'schema-and-structured-data-for-wp' ),
326
+ 'add_new_item' => esc_html__( '', 'schema-and-structured-data-for-wp' ),
327
+ 'edit_item' => esc_html__( 'Edit Schema Type','schema-and-structured-data-for-wp'),
328
+ 'all_items' => esc_html__( 'Schema Types', 'schema-and-structured-data-for-wp' ),
329
+ ),
330
+ 'public' => true,
331
+ 'has_archive' => false,
332
+ 'exclude_from_search' => true,
333
+ 'publicly_queryable' => false,
334
+ 'supports' => array('title'),
335
+ 'menu_position' => 100
336
+
337
+ )
338
+ );
339
+ }
340
+ add_action( 'add_meta_boxes', 'saswp_create_meta_box_select' );
341
+ function saswp_create_meta_box_select(){
342
+ // Repeater Comparison Field
343
+ add_meta_box( 'saswp_amp_select', esc_html__( 'Placement','schema-and-structured-data-for-wp' ), 'saswp_select_callback', 'saswp','normal', 'high' );
344
+
345
+ }
346
+
347
+
348
+ add_action( 'admin_head','saswp_change_add_new_url');
349
+ function saswp_change_add_new_url() {
350
+ $admin_url = admin_url();
351
+ ?>
352
+
353
+ <script type="text/javascript">
354
+ jQuery(function($) {
355
+ $('a[href="<?php echo $admin_url; ?>post-new.php?post_type=saswp"]').attr( 'href', '<?php echo $admin_url; ?>index.php?page=saswp_add_new_data_type' );
356
+ });
357
+ </script>
358
+ <?php
359
+ }
360
+
361
+
362
+
363
+ function saswp_select_callback($post) {
364
+
365
+ $data_group_array = esc_sql ( get_post_meta($post->ID, 'data_group_array', true) );
366
+ $data_group_array = is_array($data_group_array)? array_values($data_group_array): array();
367
+ if ( empty( $data_group_array ) ) {
368
+ $data_group_array[0] =array(
369
+ 'data_array' => array(
370
+ array(
371
+ 'key_1' => 'post_type',
372
+ 'key_2' => 'equal',
373
+ 'key_3' => 'none',
374
+ )
375
+ )
376
+ );
377
+ }
378
+ //security check
379
+ wp_nonce_field( 'saswp_select_action_nonce', 'saswp_select_name_nonce' );?>
380
+
381
+ <?php
382
+ // Type Select
383
+ $choices = array(
384
+ esc_html__("Basic",'schema-and-structured-data-for-wp') => array(
385
+ 'post_type' => esc_html__("Post Type",'schema-and-structured-data-for-wp'),
386
+ 'show_globally' => esc_html__("Show Globally",'ads-for-wp'),
387
+ 'user_type' => esc_html__("Logged in User Type",'schema-and-structured-data-for-wp'),
388
+ ),
389
+ esc_html__("Post",'schema-and-structured-data-for-wp') => array(
390
+ 'post' => esc_html__("Post",'schema-and-structured-data-for-wp'),
391
+ 'post_category' => esc_html__("Post Category",'schema-and-structured-data-for-wp'),
392
+ 'post_format' => esc_html__("Post Format",'schema-and-structured-data-for-wp'),
393
+ ),
394
+ esc_html__("Page",'schema-and-structured-data-for-wp') => array(
395
+ 'page' => esc_html__("Page",'schema-and-structured-data-for-wp'),
396
+ 'page_template' => esc_html__("Page Template",'schema-and-structured-data-for-wp'),
397
+ ),
398
+ esc_html__("Other",'schema-and-structured-data-for-wp') => array(
399
+ 'ef_taxonomy' => esc_html__("Taxonomy Term",'schema-and-structured-data-for-wp'),
400
+ )
401
+ );
402
+
403
+ $comparison = array(
404
+ 'equal' => esc_html__( 'Equal to', 'schema-and-structured-data-for-wp'),
405
+ 'not_equal' => esc_html__( 'Not Equal to (Exclude)', 'schema-and-structured-data-for-wp'),
406
+ );
407
+
408
+ $total_group_fields = count( $data_group_array ); ?>
409
+ <div class="saswp-placement-groups">
410
+
411
+ <?php for ($j=0; $j < $total_group_fields; $j++) {
412
+ $data_array = $data_group_array[$j]['data_array'];
413
+
414
+ $total_fields = count( $data_array );
415
+ ?>
416
+ <div class="saswp-placement-group" name="data_group_array[<?php echo esc_attr( $j) ?>]" data-id="<?php echo esc_attr($j); ?>">
417
+ <?php
418
+ if($j>0){
419
+ echo '<span style="margin-left:10px;font-weight:600">Or</span>';
420
+ }
421
+ ?>
422
+ <table class="widefat saswp-placement-table" style="border:0px;">
423
+ <tbody id="sdwp-repeater-tbody" class="fields-wrapper-1">
424
+ <?php for ($i=0; $i < $total_fields; $i++) {
425
+ $selected_val_key_1 = $data_array[$i]['key_1'];
426
+ $selected_val_key_2 = $data_array[$i]['key_2'];
427
+ $selected_val_key_3 = $data_array[$i]['key_3'];
428
+ $selected_val_key_4 = '';
429
+ if(isset($data_array[$i]['key_4'])){
430
+ $selected_val_key_4 = $data_array[$i]['key_4'];
431
+ }
432
+ ?>
433
+ <tr class="toclone">
434
+ <td style="width:31%" class="post_types">
435
+ <select class="widefat select-post-type <?php echo esc_attr( $i );?>" name="data_group_array[group-<?php echo esc_attr( $j) ?>][data_array][<?php echo esc_attr( $i) ?>][key_1]">
436
+ <?php
437
+ foreach ($choices as $choice_key => $choice_value) { ?>
438
+ <option disabled class="pt-heading" value="<?php echo esc_attr($choice_key);?>"> <?php echo esc_html__($choice_key,'schema-and-structured-data-for-wp');?> </option>
439
+ <?php
440
+ foreach ($choice_value as $sub_key => $sub_value) { ?>
441
+ <option class="pt-child" value="<?php echo esc_attr( $sub_key );?>" <?php selected( $selected_val_key_1, $sub_key );?> > <?php echo esc_html__($sub_value,'schema-and-structured-data-for-wp');?> </option>
442
+ <?php
443
+ }
444
+ } ?>
445
+ </select>
446
+ </td>
447
+ <td style="width:31%; <?php if ( $selected_val_key_1 =='show_globally' ) { echo 'display:none;'; } ?>">
448
+ <select class="widefat comparison" name="data_group_array[group-<?php echo esc_attr( $j) ?>][data_array][<?php echo esc_attr( $i )?>][key_2]"> <?php
449
+ foreach ($comparison as $key => $value) {
450
+ $selcomp = '';
451
+ if($key == $selected_val_key_2){
452
+ $selcomp = 'selected';
453
+ }
454
+ ?>
455
+ <option class="pt-child" value="<?php echo esc_attr( $key );?>" <?php echo esc_attr($selcomp); ?> > <?php echo esc_html__($value,'schema-and-structured-data-for-wp');?> </option>
456
+ <?php
457
+ } ?>
458
+ </select>
459
+ </td>
460
+ <td style="width:31%; <?php if ( $selected_val_key_1 =='show_globally' ) { echo 'display:none;'; } ?>">
461
+ <div class="insert-ajax-select">
462
+ <?php saswp_ajax_select_creator($selected_val_key_1, $selected_val_key_3, $i, $j );
463
+ if($selected_val_key_1 == 'ef_taxonomy'){
464
+ saswp_create_ajax_select_taxonomy($selected_val_key_3, $selected_val_key_4, $i, $j);
465
+ }
466
+ ?>
467
+ <div style="display:none;" class="spinner"></div>
468
+ </div>
469
+ </td>
470
+
471
+ <td class="widefat structured-clone" style="width:3.5%; <?php if ( $selected_val_key_1 =='show_globally' ) { echo 'display:none;'; } ?>">
472
+ <span> <button class="saswp-placement-button" type="button"> <?php echo esc_html__('And' ,'schema-and-structured-data-for-wp');?> </button> </span> </td>
473
+
474
+ <td class="widefat structured-delete" style="width:3.5%; <?php if ( $selected_val_key_1 =='show_globally' ) { echo 'display:none;'; } ?>">
475
+ <button class="saswp-placement-button" type="button"><span class="dashicons dashicons-trash"></span> </button></td>
476
+ </tr>
477
+ <?php
478
+ } ?>
479
+ </tbody>
480
+ </table>
481
+ </div>
482
+ <?php } ?>
483
+
484
+
485
+ <a style="margin-left: 8px; margin-bottom: 8px;" class="button saswp-placement-or-group saswp-placement-button" href="#">Or</a>
486
+ </div>
487
+ <?php
488
+ }
489
+ add_action( 'admin_enqueue_scripts', 'saswp_style_script_include' );
490
+ function saswp_style_script_include() {
491
+ global $pagenow, $typenow;
492
+ if (is_admin()) {
493
+ wp_register_script( 'structure_admin', plugin_dir_url(__FILE__) . '/js/structure_admin.js', array( 'jquery'), SASWP_VERSION, true );
494
+ $post_type='';
495
+ $current_screen = get_Current_screen();
496
+ if(isset($current_screen->post_type)){
497
+ $post_type = $current_screen->post_type;
498
+ }
499
+ $saswp_posts = get_posts(
500
+ array(
501
+ 'post_type' => 'saswp',
502
+ 'posts_per_page' => -1,
503
+ 'post_status' => 'publish',
504
+ )
505
+ );
506
+ $post_found_status ='';
507
+ if(!$saswp_posts){
508
+ $post_found_status ='not_found';
509
+ }
510
+ $data_array = array(
511
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
512
+ 'post_found_status' => $post_found_status,
513
+ 'post_type' =>$post_type,
514
+ 'wizard_url' => esc_url( admin_url( 'plugins.php?page=saswp-setup-wizard' ) ),
515
+ 'thankyou' => esc_html__("Thank you for using Schema & Structured Data For WP plugin!",'schema-and-structured-data-for-wp'),
516
+ 'quicksetup' => esc_html__("Start Quick Setup?",'schema-and-structured-data-for-wp')
517
+ );
518
+ wp_localize_script( 'structure_admin', 'saswp_app_object', $data_array );
519
+ wp_enqueue_script('structure_admin');
520
+
521
+ wp_enqueue_script( 'saswp-timepicker-js', SASWP_PLUGIN_URL . 'admin_section/js/jquery.timepicker.js', false, SASWP_VERSION);
522
+ //Main Css
523
+ wp_enqueue_style( 'saswp-timepicker-css', SASWP_PLUGIN_URL . 'admin_section/css/jquery.timepicker.css', false , SASWP_VERSION );
524
+
525
+
526
+ }
527
+ }
528
+
529
+ // Save PHP Editor
530
+ add_action ( 'save_post' , 'saswp_select_save_data' );
531
+ function saswp_select_save_data ( $post_id ) {
532
+ if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
533
+
534
+ // if our nonce isn't there, or we can't verify it, bail
535
+ if( !isset( $_POST['saswp_select_name_nonce'] ) || !wp_verify_nonce( $_POST['saswp_select_name_nonce'], 'saswp_select_action_nonce' ) ) return;
536
+
537
+ // if our current user can't edit this post, bail
538
+ if( !current_user_can( 'edit_post' ) ) return;
539
+ $meta_value = get_post_meta( $post_id, null, true );
540
+ $post_data_group_array = array();
541
+ $temp_condition_array = array();
542
+ $show_globally =false;
543
+ if(isset($_POST['data_group_array'])){
544
+ $post_data_group_array = $_POST['data_group_array'];
545
+ foreach($post_data_group_array as $groups){
546
+ foreach($groups['data_array'] as $group ){
547
+ if(array_search('show_globally', $group))
548
+ {
549
+ $temp_condition_array[0] = $group;
550
+ $show_globally = true;
551
+ }
552
+ }
553
+ }
554
+ if($show_globally){
555
+ unset($post_data_group_array);
556
+ $post_data_group_array['group-0']['data_array'] = $temp_condition_array;
557
+ }
558
+ }
559
+ if(isset($_POST['data_group_array'])){
560
+ update_post_meta(
561
+ $post_id,
562
+ 'data_group_array',
563
+ $post_data_group_array
564
+ );
565
+ }
566
+ }
567
+
568
+ }//CLosed is_admin
569
+
570
+ // Generate Proper post types for select and to add data.
571
+ add_action('wp_loaded', 'saswp_post_type_generator');
572
+
573
+ function saswp_post_type_generator(){
574
+
575
+ $post_types = '';
576
+ $post_types = get_post_types( array( 'public' => true ), 'names' );
577
+
578
+ // Remove Unsupported Post types
579
+ unset($post_types['attachment'], $post_types['amp_acf']);
580
+
581
+ return $post_types;
582
+ }
583
+
584
+ add_action('wp_head','saswp_custom_breadcrumbs',99);
585
+
586
+ // Breadcrumbs
587
+ function saswp_custom_breadcrumbs() {
588
+ global $sd_data;
589
+ $variables1_titles = array();
590
+ $variables2_links = array();
591
+ // Settings
592
+ $separator = '&gt;';
593
+ $home_title = esc_html__('Homepage', 'schema-and-structured-data-for-wp' );
594
+
595
+ // If you have any custom post types with custom taxonomies, put the taxonomy name below (e.g. product_cat)
596
+ $custom_taxonomy = 'product_cat';
597
+
598
+ // Get the query & post information
599
+ global $post;
600
+
601
+ // Do not display on the homepage
602
+ if ( !is_front_page() ) {
603
+
604
+ // Build the breadcrums
605
+ // Home page
606
+ $variables1_titles[] = $home_title;
607
+ $variables2_links[] = get_home_url();
608
+
609
+
610
+ if ( is_archive() && !is_tax() && !is_category() && !is_tag() && !is_author() ) {
611
+ $archive_title = post_type_archive_title($prefix, false);
612
+ $variables1_titles[] = $archive_title;
613
+
614
+
615
+ } else if ( is_author() ) {
616
+ global $author;
617
+
618
+ $userdata = get_userdata( $author );
619
+ $author_url= get_author_posts_url($userdata->ID);
620
+
621
+ // author name
622
+ $variables1_titles[]= $userdata->display_name;
623
+ $variables2_links[]= $author_url;
624
+
625
+ } else if ( is_archive() && is_tax() && !is_category() && !is_tag() ) {
626
+
627
+ // If post is a custom post type
628
+ $post_type = get_post_type();
629
+
630
+ // If it is a custom post type display name and link
631
+ if($post_type != 'post') {
632
+
633
+ $post_type_object = get_post_type_object($post_type);
634
+ $post_type_archive = get_post_type_archive_link($post_type);
635
+ $variables1_titles[] = $post_type_object->labels->name;
636
+ $variables2_links[] = $post_type_archive;
637
+
638
+ }
639
+
640
+ $custom_tax_name = get_queried_object()->name;
641
+ $variables1_titles[] = $custom_tax_name;
642
+
643
+ } else if ( is_single() ) {
644
+
645
+ // If post is a custom post type
646
+ $post_type = get_post_type();
647
+
648
+ // If it is a custom post type display name and link
649
+ if($post_type != 'post') {
650
+
651
+ $post_type_object = get_post_type_object($post_type);
652
+ $post_type_archive = get_post_type_archive_link($post_type);
653
+
654
+ $variables1_titles[]= $post_type_object->labels->name;
655
+ $variables2_links[]= $post_type_archive;
656
+ }
657
+
658
+ // Get post category info
659
+ $category = get_the_category();
660
+
661
+ if(!empty($category)) {
662
+ $category_values = array_values( $category );
663
+ foreach ($category_values as $category_value) {
664
+ $category_name = get_category($category_value);
665
+ $cat_name = $category_name->name;
666
+ $variables1_titles[]=$cat_name;
667
+ $variables2_links[]=get_category_link( $category_value );
668
+
669
+ }
670
+ // Get last category post is in
671
+ $last_category = end(($category));
672
+ $category_name = get_category($last_category);
673
+ // Get parent any categories and create array
674
+ $get_cat_parents = rtrim(get_category_parents($last_category->term_id, true, ','),',');
675
+ $cat_parents = explode(',',$get_cat_parents);
676
+
677
+ // Loop through parent categories and store in variable $cat_display
678
+ $cat_display = '';
679
+ foreach($cat_parents as $parents) {
680
+ $cat_display .= '<li class="item-cat">'.esc_html__( $parents, 'schema-and-structured-data-for-wp' ).'</li>';
681
+ $cat_display .= '<li class="separator"> ' . esc_html__( $separator, 'schema-and-structured-data-for-wp' ) . ' </li>';
682
+ }
683
+ }
684
+
685
+ // If it's a custom post type within a custom taxonomy
686
+ $taxonomy_exists = taxonomy_exists($custom_taxonomy);
687
+ if(empty($last_category) && !empty($custom_taxonomy) && $taxonomy_exists) {
688
+
689
+ $taxonomy_terms = get_the_terms( $post->ID, $custom_taxonomy );
690
+ $cat_id = $taxonomy_terms[0]->term_id;
691
+ $cat_link = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
692
+ $cat_name = $taxonomy_terms[0]->name;
693
+
694
+ }
695
+
696
+ if(!empty($cat_id)) {
697
+ $variables1_titles[]= $cat_name;
698
+ $variables2_links[]=$cat_link;
699
+
700
+ } else {
701
+ if($post_type == 'post') {
702
+ $variables1_titles[]= get_the_title();
703
+ }
704
+ }
705
+
706
+ } else if ( is_category() ) {
707
+ $category = get_the_category();
708
+
709
+ if(!empty($category)) {
710
+ $category_values = array_values( $category );
711
+ foreach ($category_values as $category_value) {
712
+ $category_name = get_category($category_value);
713
+ $cat_name = $category_name->name;
714
+ $variables1_titles[]=$cat_name;
715
+ $variables2_links[]=get_category_link( $category_value );
716
+
717
+ }
718
+ }
719
+ } else if ( is_page() ) {
720
+
721
+ // Standard page
722
+ if( $post->post_parent ){
723
+
724
+ // If child page, get parents
725
+ $anc = get_post_ancestors( $post->ID );
726
+
727
+ // Get parents in the right order
728
+ $anc = array_reverse($anc);
729
+
730
+ // Parent page loop
731
+ if ( !isset( $parents ) ) $parents = null;
732
+ foreach ( $anc as $ancestor ) {
733
+ $parents .= '<li class="item-parent item-parent-' . esc_attr($ancestor) . '"><a class="bread-parent bread-parent-' . esc_attr($ancestor) . '" href="' . esc_url(get_permalink($ancestor)) . '" title="' . esc_attr(get_the_title($ancestor)) . '">' . esc_html__(get_the_title($ancestor), 'schema-and-structured-data-for-wp' ) . '</a></li>';
734
+ $parents .= '<li class="separator separator-' . esc_attr($ancestor) . '"> ' . esc_html__($separator, 'schema-and-structured-data-for-wp' ) . ' </li>';
735
+ $variables1_titles[]= get_the_title($ancestor);
736
+ $variables2_links[]=get_permalink($ancestor);
737
+ }
738
+
739
+ $variables1_titles[]= get_the_title();
740
+ $variables2_links[]=get_permalink();
741
+
742
+ } else {
743
+ $variables1_titles[]=get_the_title();
744
+ $variables2_links[]=get_permalink();
745
+ }
746
+
747
+ } else if ( is_tag() ) {
748
+ // Tag page
749
+ // Get tag information
750
+ $term_id = get_query_var('tag_id');
751
+ $taxonomy = 'post_tag';
752
+ $args = 'include=' . $term_id;
753
+ $terms = get_terms( $taxonomy, $args );
754
+ $get_term_id = $terms[0]->term_id;
755
+ $get_term_name = $terms[0]->name;
756
+ $term_link = get_term_link($get_term_id );
757
+
758
+ // Tag name and link
759
+
760
+ $variables1_titles[] = $get_term_name;
761
+ $variables2_links[] = $term_link;
762
+ }
763
+ $sd_data['titles']= $variables1_titles;
764
+ $sd_data['links']= $variables2_links;
765
+ }
766
+
767
+ }
768
+
769
+
770
+ //Adding extra columns and displaying its data starts here
771
+ function saswp_custom_column_set( $column, $post_id ) {
772
+
773
+ switch ( $column ) {
774
+ case 'saswp_schema_type' :
775
+
776
+ $schema_type = get_post_meta( $post_id, $key='schema_type', true);
777
+ echo $schema_type;
778
+
779
+ break;
780
+ case 'saswp_target_location' :
781
+ $enabled ='';
782
+ $exclude ='';
783
+ $data_group_array = get_post_meta( $post_id, $key='data_group_array', true);
784
+ if($data_group_array){
785
+ foreach ($data_group_array as $groups){
786
+ foreach($groups['data_array'] as $group){
787
+ if($group['key_2'] == 'equal'){
788
+ $enabled .= $group['key_3'].', ';
789
+ }else{
790
+ $exclude .= $group['key_3']. ', ';
791
+ }
792
+ }
793
+ }
794
+ if($enabled){
795
+ echo '<div><strong>'.esc_html__( 'Enable on: ', 'schema-and-structured-data-for-wp' ).'</strong> '.$enabled.'</div>';
796
+ }
797
+ if($exclude){
798
+ echo '<div><strong>'.esc_html__( 'Exclude from: ', 'schema-and-structured-data-for-wp' ).'</strong>'.$exclude.'</div>';
799
+ }
800
+ }
801
+
802
+
803
+ break;
804
+
805
+ }
806
+ }
807
+ add_action( 'manage_saswp_posts_custom_column' , 'saswp_custom_column_set', 10, 2 );
808
+
809
+ /**
810
+ * Add the custom columns to the Ads post type:
811
+ * @param array $columns
812
+ * @return string
813
+ */
814
+
815
+ function saswp_custom_columns($columns) {
816
+ unset($columns['date']);
817
+ $columns['saswp_schema_type'] = '<a>'.esc_html__( 'Type', 'schema-and-structured-data-for-wp' ).'<a>';
818
+ $columns['saswp_target_location'] = '<a>'.esc_html__( 'Target Location', 'schema-and-structured-data-for-wp' ).'<a>';
819
+
820
+ return $columns;
821
+ }
822
+ add_filter( 'manage_saswp_posts_columns', 'saswp_custom_columns' );
823
+
824
+ //Adding extra columns and displaying its data ends here
825
+
826
+
827
+ /**
828
+ * This is a ajax handler function for sending email from user admin panel to us.
829
+ * @return type json string
830
+ */
831
+ function saswp_send_query_message(){
832
+ $message = sanitize_text_field($_POST['message']);
833
+
834
+ $user = wp_get_current_user();
835
+ $user_data = $user->data;
836
+ $user_email = $user_data->user_email;
837
+ //php mailer variables
838
+ $to = 'team@magazine3.com';
839
+ $subject = "Customer Query";
840
+ $headers = 'From: '. $user_email . "\r\n" .
841
+ 'Reply-To: ' . $user_email . "\r\n";
842
+ // Load WP components, no themes.
843
+ $sent = wp_mail($to, $subject, strip_tags($message), $headers);
844
+ if($sent){
845
+ echo json_encode(array('status'=>'t'));
846
+ }else{
847
+ echo json_encode(array('status'=>'f'));
848
+ }
849
+ wp_die();
850
+ }
851
+
852
+ add_action('wp_ajax_saswp_send_query_message', 'saswp_send_query_message');
853
+
854
+
855
+ /**
856
+ * This is a ajax handler function for sending email from user admin panel to us.
857
+ * @return type json string
858
+ */
859
+ function saswp_import_plugin_data(){
860
+ $plugin_name = sanitize_text_field($_GET['plugin_name']);
861
+ $result = '';
862
+ switch ($plugin_name) {
863
+ case 'schema':
864
+ if ( is_plugin_active('schema/schema.php')) {
865
+ $result = saswp_import_schema_plugin_data();
866
+ }
867
+ break;
868
+
869
+ default:
870
+ break;
871
+ }
872
+ if($result){
873
+ echo json_encode(array('status'=>'t', 'message'=>esc_html__('Data has been imported succeessfully','schema-and-structured-data-for-wp')));
874
+ }else{
875
+ echo json_encode(array('status'=>'f', 'message'=>esc_html__('Plugin data is not available or it is not activated','schema-and-structured-data-for-wp')));
876
+ }
877
+ wp_die();
878
+ }
879
+
880
+ add_action('wp_ajax_saswp_import_plugin_data', 'saswp_import_plugin_data');
881
+
882
+
883
+ function saswp_feeback_no_thanks(){
884
+ $result = update_option( "saswp_activation_date", date("Y-m-d"));
885
+ if($result){
886
+ echo json_encode(array('status'=>'t'));
887
+ }else{
888
+ echo json_encode(array('status'=>'f'));
889
+ }
890
+ wp_die();
891
+ }
892
+
893
+ add_action('wp_ajax_saswp_feeback_no_thanks', 'saswp_feeback_no_thanks');
894
+
metaboxes/help.php DELETED
@@ -1,21 +0,0 @@
1
- <?php
2
- /*
3
- * To change this license header, choose License Headers in Project Properties.
4
- * To change this template file, choose Tools | Templates
5
- * and open the template in the editor.
6
- */
7
- add_action( 'add_meta_boxes', 'saswp_help_meta_box' );
8
- function saswp_help_meta_box()
9
- {
10
- add_meta_box( 'saswp_help_meta_box_id',
11
- esc_html__('Help', 'schema-and-structured-data-for-wp' ),
12
- 'saswp_help_meta_box_cb',
13
- 'saswp',
14
- 'advanced', 'low'
15
- );
16
- }
17
-
18
- function saswp_help_meta_box_cb()
19
- {
20
- echo '<a href="admin.php?page=structured_data_options&tab=help">'.esc_html__('Need Help', 'schema-and-structured-data-for-wp').'</a>';
21
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
output/function.php CHANGED
@@ -1,120 +1,149 @@
1
- <?php
2
- add_filter( 'amp_init', 'saswp_structured_data' );
3
- function saswp_structured_data()
4
- {
5
- add_action( 'amp_post_template_head' , 'saswp_data_generator' );
6
- remove_action( 'amp_post_template_head', 'amp_post_template_add_schemaorg_metadata',10,1);
7
- }
8
-
9
- add_action('wp_head', 'saswp_data_generator');
10
- function saswp_data_generator() {
11
- global $sd_data;
12
- $output ='';
13
- $contact_page_output = saswp_contact_page_output();
14
- $about_page_output = saswp_about_page_output();
15
- $author_output = saswp_author_output();
16
- $archive_output = saswp_archive_output();
17
- $kb_website_output = saswp_kb_website_output();
18
- $schema_breadcrumb_output = saswp_schema_breadcrumb_output($sd_data);
19
- $schema_output = saswp_schema_output();
20
- $kb_schema_output = saswp_kb_schema_output();
21
-
22
- if( ( 1 == $sd_data['saswp-for-wordpress'] && saswp_non_amp() ) || ( 1 == $sd_data['saswp-for-amp'] && !saswp_non_amp() ) ) {
23
-
24
- $output .= "\n\n";
25
- if(!empty($contact_page_output)){
26
- $output .= "//Contact page Schema\n";
27
- $output .= $contact_page_output;
28
- $output .= "\n\n";
29
- }
30
- if(!empty($about_page_output)){
31
- $output .= "//About page Schema\n";
32
- $output .= $about_page_output;
33
- $output .= "\n\n";
34
- }
35
- if(!empty($author_output)){
36
- $output .= "//Author Schema\n";
37
- $output .= $author_output;
38
- $output .= "\n\n";
39
- }
40
-
41
- if(!empty($archive_output)){
42
- $output .= "//Archive Schema\n";
43
- $output .= $archive_output;
44
- $output .= "\n\n";
45
- }
46
- if(!empty($kb_website_output)){
47
- $output .= "//Website Schema\n";
48
- $output .= $kb_website_output;
49
- $output .= "\n\n";
50
- }
51
- if(!empty($schema_breadcrumb_output)){
52
- $output .= "//Breadcrumbs navigation Schema\n";
53
- $output .= $schema_breadcrumb_output;
54
- $output .= "\n\n";
55
- }
56
-
57
- if(!empty($schema_output)){
58
- $output .= "// Type Schema\n";
59
- $output .= $schema_output;
60
- $output .= "\n\n";
61
- }
62
-
63
- if(!empty($kb_schema_output)){
64
- $output .= "//Organization Schema\n";
65
- $output .= $kb_schema_output;
66
- $output .= "\n\n";
67
- }
68
-
69
- }
70
- echo '<!-- Schema And Structured Data For WP v'.SASWP_VERSION.' - -->';
71
- echo "\n";
72
- echo '<script type="application/ld+json">';
73
- echo html_entity_decode(esc_html($output));
74
- echo '</script>';
75
- echo "\n\n";
76
- }
77
-
78
- add_filter('the_content', 'saswp_paywall_data_for_login');
79
- function saswp_paywall_data_for_login($content){
80
- if( saswp_non_amp() ){
81
- return $content;
82
- }
83
- remove_filter('the_content', 'MeprAppCtrl::page_route', 60);
84
-
85
- $schemaConditionals = saswp_get_all_schema_posts();
86
- if(!$schemaConditionals){
87
- return $content;
88
- }else{
89
- $schema_options = $schemaConditionals['schema_options'];
90
- if($schema_options['paywall_class_name']!=''){
91
- $className = $schema_options['paywall_class_name'];
92
- }
93
- if(strpos($content, '<!--more-->')!==false && !is_user_logged_in()){
94
- global $wp;
95
- $redirect = home_url( $wp->request );
96
- $breakedContent = explode("<!--more-->", $content);
97
- $content = $breakedContent[0].'<a href="'.wp_login_url( $redirect ) .'">'.esc_html__( 'Login', 'schema-and-structured-data-for-wp' ).'</a>';
98
- }elseif(strpos($content, '<!--more-->')!==false && is_user_logged_in()){
99
- global $wp;
100
- $redirect = home_url( $wp->request );
101
- $breakedContent = explode("<!--more-->", $content);
102
- $content = $breakedContent[0].'<div class="'.$className.'">'.$breakedContent[1].'</div>';
103
- }
104
- }
105
- return $content;
106
- }
107
-
108
- add_filter('memberpress_form_update', 'saswp_memberpress_form_update');
109
-
110
- function saswp_memberpress_form_update($form){
111
- if( !saswp_non_amp() ){
112
- add_action('amp_post_template_css',function(){
113
- echo '.amp-mem-login{background-color: #fef5c4;padding: 13px 30px 9px 30px;}';
114
- },11);
115
- global $wp;
116
- $redirect = home_url( $wp->request );
117
- $form = '<a class="amp-mem-login" href="'.wp_login_url( $redirect ) .'">'.esc_html__( 'Login', 'schema-and-structured-data-for-wp' ).'</a>';
118
- }
119
- return $form;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  }
1
+ <?php
2
+
3
+ function saswp_remove_amp_default_structure_data($metadata){
4
+ return '';
5
+ }
6
+
7
+ add_filter( 'amp_init', 'saswp_structured_data' );
8
+ function saswp_structured_data()
9
+ {
10
+ add_action( 'amp_post_template_head' , 'saswp_data_generator' );
11
+ remove_action( 'amp_post_template_head', 'amp_post_template_add_schemaorg_metadata',10,1);
12
+ }
13
+ add_action('wp_head', 'saswp_data_generator');
14
+ function saswp_data_generator() {
15
+ global $sd_data;
16
+ $output ='';
17
+ $contact_page_output = saswp_contact_page_output();
18
+ $about_page_output = saswp_about_page_output();
19
+ $author_output = saswp_author_output();
20
+ $archive_output = saswp_archive_output();
21
+ $kb_website_output = saswp_kb_website_output();
22
+ $schema_breadcrumb_output = saswp_schema_breadcrumb_output($sd_data);
23
+ $schema_output = saswp_schema_output();
24
+
25
+ if($schema_output){
26
+ add_filter( 'amp_post_template_metadata', 'saswp_remove_amp_default_structure_data');
27
+ }
28
+
29
+
30
+ $kb_schema_output = saswp_kb_schema_output();
31
+
32
+ if( ( 1 == $sd_data['saswp-for-wordpress'] && saswp_non_amp() ) || ( 1 == $sd_data['saswp-for-amp'] && !saswp_non_amp() ) ) {
33
+
34
+
35
+ if(!empty($contact_page_output)){
36
+
37
+ $output .= $contact_page_output;
38
+ $output .= ",";
39
+ $output .= "\n\n";
40
+
41
+ }
42
+ if(!empty($about_page_output)){
43
+
44
+ $output .= $about_page_output;
45
+ $output .= ",";
46
+ $output .= "\n\n";
47
+ }
48
+ if(!empty($author_output)){
49
+
50
+ $output .= $author_output;
51
+ $output .= ",";
52
+ $output .= "\n\n";
53
+ }
54
+
55
+ if(!empty($archive_output)){
56
+
57
+ $output .= $archive_output;
58
+ $output .= ",";
59
+ $output .= "\n\n";
60
+ }
61
+ if(!empty($kb_website_output)){
62
+
63
+ $output .= $kb_website_output;
64
+ $output .= ",";
65
+ $output .= "\n\n";
66
+ }
67
+ if(!empty($schema_breadcrumb_output)){
68
+
69
+ $output .= $schema_breadcrumb_output;
70
+ $output .= ",";
71
+ $output .= "\n\n";
72
+ }
73
+ if(!empty($schema_output)){
74
+ foreach($schema_output as $schema){
75
+ $schema = json_encode($schema);
76
+ $output .= $schema;
77
+ $output .= ",";
78
+ $output .= "\n\n";
79
+ }
80
+ }
81
+ if(!empty($kb_schema_output)){
82
+
83
+ $output .= $kb_schema_output;
84
+ $output .= ",";
85
+
86
+ }
87
+
88
+ }
89
+ $stroutput = '['. $output. ']';
90
+ $filter_string = str_replace(',]', ']',$stroutput);
91
+
92
+ echo '<!-- Schema & Structured Data For WP v'.SASWP_VERSION.' - -->';
93
+ echo "\n";
94
+ echo '<script type="application/ld+json">';
95
+ echo "\n";
96
+ echo html_entity_decode(esc_html($filter_string));
97
+ echo "\n";
98
+ echo '</script>';
99
+ echo "\n\n";
100
+ }
101
+
102
+ add_filter('the_content', 'saswp_paywall_data_for_login');
103
+ function saswp_paywall_data_for_login($content){
104
+ if( saswp_non_amp() ){
105
+ return $content;
106
+ }
107
+ remove_filter('the_content', 'MeprAppCtrl::page_route', 60);
108
+ $Conditionals = saswp_get_all_schema_posts();
109
+
110
+ if(!$Conditionals){
111
+ return $content;
112
+ }else{
113
+
114
+ $className ='';
115
+ foreach($Conditionals as $schemaConditionals){
116
+ $schema_options = $schemaConditionals['schema_options'];
117
+ if(isset($schema_options['paywall_class_name'])){
118
+ $className = $schema_options['paywall_class_name'];
119
+ break;
120
+ }
121
+ }
122
+ if(strpos($content, '<!--more-->')!==false && !is_user_logged_in()){
123
+ global $wp;
124
+ $redirect = home_url( $wp->request );
125
+ $breakedContent = explode("<!--more-->", $content);
126
+ $content = $breakedContent[0].'<a href="'.wp_login_url( $redirect ) .'">'.esc_html__( 'Login', 'schema-and-structured-data-for-wp' ).'</a>';
127
+ }elseif(strpos($content, '<!--more-->')!==false && is_user_logged_in()){
128
+ global $wp;
129
+ $redirect = home_url( $wp->request );
130
+ $breakedContent = explode("<!--more-->", $content);
131
+ $content = $breakedContent[0].'<div class="'.$className.'">'.$breakedContent[1].'</div>';
132
+ }
133
+ }
134
+ return $content;
135
+ }
136
+
137
+ add_filter('memberpress_form_update', 'saswp_memberpress_form_update');
138
+
139
+ function saswp_memberpress_form_update($form){
140
+ if( !saswp_non_amp() ){
141
+ add_action('amp_post_template_css',function(){
142
+ echo '.amp-mem-login{background-color: #fef5c4;padding: 13px 30px 9px 30px;}';
143
+ },11);
144
+ global $wp;
145
+ $redirect = home_url( $wp->request );
146
+ $form = '<a class="amp-mem-login" href="'.wp_login_url( $redirect ) .'">'.esc_html__( 'Login', 'schema-and-structured-data-for-wp' ).'</a>';
147
+ }
148
+ return $form;
149
  }
output/output.php CHANGED
@@ -1,863 +1,924 @@
1
- <?php
2
- if (! defined('ABSPATH') ) exit;
3
-
4
- function saswp_kb_schema_output() {
5
- global $sd_data;
6
- if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
7
- return ;
8
- }
9
- // social profile
10
- $sd_social_profile = array();
11
-
12
- $sd_facebook = array();
13
- if(isset($sd_data['sd_facebook']) && !empty($sd_data['sd_facebook'])){
14
- $sd_facebook[] = $sd_data['sd_facebook'];
15
- $sd_social_profile[] = $sd_facebook;
16
- }
17
- $sd_twitter = array();
18
- if(isset($sd_data['sd_twitter']) && !empty($sd_data['sd_twitter'])){
19
- $sd_twitter[] = $sd_data['sd_twitter'];
20
- $sd_social_profile[] = $sd_twitter;
21
- }
22
-
23
- $sd_google_plus = array();
24
- if(isset($sd_data['sd_google_plus']) && !empty($sd_data['sd_google_plus'])){
25
- $sd_google_plus[] = $sd_data['sd_google_plus'];
26
- $sd_social_profile[] = $sd_google_plus;
27
- }
28
-
29
- $sd_instagram = array();
30
- if(isset($sd_data['sd_instagram']) && !empty($sd_data['sd_instagram'])){
31
- $sd_instagram[] = $sd_data['sd_instagram'];
32
- $sd_social_profile[] = $sd_instagram;
33
- }
34
-
35
- $sd_youtube = array();
36
- if(isset($sd_data['sd_youtube']) && !empty($sd_data['sd_youtube'])){
37
- $sd_youtube[] = $sd_data['sd_youtube'];
38
- $sd_social_profile[] = $sd_youtube;
39
- }
40
-
41
- $sd_linkedin = array();
42
- if(isset($sd_data['sd_linkedin']) && !empty($sd_data['sd_linkedin'])){
43
- $sd_linkedin[] = $sd_data['sd_linkedin'];
44
- $sd_social_profile[] = $sd_linkedin;
45
- }
46
-
47
- $sd_pinterest = array();
48
- if(isset($sd_data['sd_pinterest']) && !empty($sd_data['sd_pinterest'])){
49
- $sd_pinterest[] = $sd_data['sd_pinterest'];
50
- $sd_social_profile[] = $sd_pinterest;
51
- }
52
-
53
- $sd_soundcloud = array();
54
- if(isset($sd_data['sd_soundcloud']) && !empty($sd_data['sd_soundcloud'])){
55
- $sd_soundcloud[] = $sd_data['sd_soundcloud'];
56
- $sd_social_profile[] = $sd_soundcloud;
57
- }
58
-
59
- $sd_tumblr = array();
60
- if(isset($sd_data['sd_tumblr']) && !empty($sd_data['sd_tumblr'])){
61
- $sd_tumblr[] = $sd_data['sd_tumblr'];
62
- $sd_social_profile[] = $sd_tumblr;
63
- }
64
-
65
- $platform = array();
66
- foreach ($sd_social_profile as $key => $value) {
67
- $platform[] = $value;
68
- }
69
-
70
- // Organization Schema
71
-
72
-
73
- if ( $sd_data['saswp_kb_type'] == 'Organization' ) {
74
- $logo = $sd_data['sd_logo']['url'];
75
- $contact_1 = $sd_data['saswp_contact_type'];
76
- $telephone_1 = $sd_data['saswp_kb_telephone'];
77
- $height = $sd_data['sd_logo']['height'];
78
- $width = $sd_data['sd_logo']['width'];
79
-
80
- if( '' == $logo && empty($logo) && isset($sd_data['sd_default_image'])){
81
- $logo = $sd_data['sd_default_image']['url'];
82
- }
83
-
84
- if( '' == $height && empty($height) && isset($sd_data['sd_default_image_height'])){
85
- $height = $sd_data['sd_default_image_height'];
86
- }
87
-
88
- if( '' == $width && empty($width) && isset($sd_data['sd_default_image_width'])){
89
- $width = $sd_data['sd_default_image_width'];
90
- }
91
-
92
- if( '' == $contact_1 && empty($contact_1) && isset($sd_data['saswp_contact_type'])){
93
- $contact_1 = $sd_data['saswp_contact_type'];
94
- }
95
-
96
- if( '' == $telephone_1 && empty($telephone_1) && isset($sd_data['saswp_kb_telephone'])){
97
- $telephone_1 = $sd_data['saswp_kb_telephone'];
98
- }
99
-
100
- // Contact Information
101
- $contact_info = array();
102
- $contact_info = array(
103
- 'contactPoint' => array(
104
- '@type' => 'ContactPoint',
105
- 'contactType' => $contact_1,
106
- 'telephone' => $telephone_1,
107
- )
108
- );
109
-
110
- $input = array(
111
- '@context' =>'http://schema.org',
112
- '@type' => $sd_data['saswp_kb_type'],
113
- 'name' => $sd_data['sd_name'],
114
- 'url' => $sd_data['sd_url'],
115
- 'sameAs' => $platform,
116
- 'logo' => array(
117
- '@type' => 'ImageObject',
118
- 'url' => $logo,
119
- 'width' => $width,
120
- 'height' => $height,
121
- ),
122
- 'alternateName' => $sd_data['sd_alt_name']
123
- );
124
-
125
- if ( isset($sd_data['saswp_kb_contact_1'] ) && $sd_data['saswp_kb_contact_1'] ) {
126
- $input = array_merge($input, $contact_info);
127
- }
128
- }
129
- // Person
130
-
131
- if ( $sd_data['saswp_kb_type'] == 'Person' ) {
132
- $image = $sd_data['sd-person-image']['url'];
133
- $height = $sd_data['sd-person-image']['height'];
134
- $width = $sd_data['sd-person-image']['width'];
135
- if( '' == $image && empty($image) && isset($sd_data['sd_default_image'])){
136
- $image = $sd_data['sd_default_image']['url'];
137
- }
138
-
139
- if( '' == $height && empty($height) && isset($sd_data['sd_default_image_height'])){
140
- $height = $sd_data['sd_default_image_height'];
141
- }
142
-
143
- if( '' == $width && empty($width) && isset($sd_data['sd_default_image_width'])){
144
- $width = $sd_data['sd_default_image_width'];
145
- }
146
-
147
- $input = array(
148
- '@context' =>'http://schema.org',
149
- '@type' => $sd_data['saswp_kb_type'],
150
- 'name' => $sd_data['sd-person-name'],
151
- 'url' => $sd_data['sd-person-url'],
152
- 'Image' => array(
153
- '@type' => 'ImageObject',
154
- 'url' => $image,
155
- 'width' => $width,
156
- 'height' => $height,
157
- ),
158
- 'telephone' => $sd_data['sd-person-phone-number'],
159
- );
160
- }
161
-
162
- return json_encode($input);
163
-
164
- }
165
-
166
- function sd_is_blog() {
167
- return ( is_author() || is_category() || is_tag() || is_date() || is_home() || is_single() ) && 'post' == get_post_type();
168
- }
169
-
170
- function saswp_schema_output() {
171
- global $sd_data;
172
-
173
- $schemaConditionals = saswp_get_all_schema_posts();
174
- if(!$schemaConditionals){
175
- return ;
176
- }
177
- if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
178
- return ;
179
- }
180
- $schema_options = $schemaConditionals['schema_options'];
181
- $schema_type = $schemaConditionals['schema_type'];
182
- $logo = $sd_data['sd_logo']['url'];
183
- if( '' == $logo && empty($logo) && isset($sd_data['sd_default_image'])){
184
- $logo = $sd_data['sd_default_image']['url'];
185
- }
186
- $height = $sd_data['sd_logo']['height'];
187
- if( '' == $height && empty($height) && isset($sd_data['sd_default_image_height'])){
188
- $height = $sd_data['sd_default_image_height'];
189
- }
190
- $width = $sd_data['sd_logo']['width'];
191
- if( '' == $width && empty($width) && isset($sd_data['sd_default_image_width'])){
192
- $width = $sd_data['sd_default_image_width'];
193
- }
194
- if(is_singular()){
195
- // Generate author id
196
- $author_id = get_the_author_meta('ID');
197
-
198
- // Blogposting Schema
199
- $image_id = get_post_thumbnail_id();
200
- $image_details = wp_get_attachment_image_src($image_id, 'full');
201
- $author_details = get_avatar_data($author_id);
202
- $date = get_the_date();
203
- $modified_date = get_the_modified_date();
204
- $aurthor_name = get_the_author();
205
-
206
- if(is_page()){
207
- $schema_type = $schema_type; //$sd_data['sd_page_type'];
208
- }
209
- if(is_single()){
210
- $schema_type = $schema_type; //$sd_data['sd_post_type'];
211
- }
212
- if(is_front_page()){
213
- $schema_type = $schema_type; // $sd_data['sd_page_type'];
214
- }
215
- $input1 = array(
216
- '@context' => 'http://schema.org',
217
- '@type' => $schema_type ,
218
-
219
- 'mainEntityOfPage' => get_permalink(),
220
- 'headline' => get_the_title(),
221
- 'description' => get_the_excerpt(),
222
- 'name' => get_the_title(),
223
- 'url' => get_permalink(),
224
- 'datePublished' => $date,
225
- 'dateModified' => $modified_date,
226
- 'author' => array(
227
- '@type' => 'Person',
228
- 'name' => $aurthor_name, ),
229
- 'Publisher' => array(
230
- '@type' => 'Organization',
231
- 'logo' => array(
232
- '@type' => 'ImageObject',
233
- 'url' => $logo,
234
- 'width' => $width,
235
- 'height' => $height,
236
- ),
237
- 'name' => $sd_data['sd_name'],
238
- ),
239
- );
240
- // For WebPage
241
- if( 'WebPage' === $schema_type){
242
- if(empty($image_details[0]) || $image_details[0] === NULL ){
243
- $image_details[0] = $logo;
244
- }
245
-
246
- $input1 = array(
247
- '@context' => 'http://schema.org',
248
- '@type' => $schema_type ,
249
- 'name' => get_the_title(),
250
- 'url' => get_permalink(),
251
- 'description' => get_the_excerpt(),
252
- 'mainEntity' => array(
253
- '@type' => 'Article',
254
- 'mainEntityOfPage' => get_permalink(),
255
- 'image' => $image_details[0],
256
- 'headline' => get_the_title(),
257
- 'description' => get_the_excerpt(),
258
- 'datePublished' => $date,
259
- 'dateModified' => $modified_date,
260
- 'author' => array(
261
- '@type' => 'Person',
262
- 'name' => $aurthor_name, ),
263
- 'Publisher' => array(
264
- '@type' => 'Organization',
265
- 'logo' => array(
266
- '@type' => 'ImageObject',
267
- 'url' => $logo,
268
- 'width' => $width,
269
- 'height' => $height,
270
- ),
271
- 'name' => $sd_data['sd_name'],
272
- ),
273
- ),
274
-
275
-
276
- );
277
- }
278
-
279
- // For Article
280
-
281
- if( 'Article' === $schema_type ){
282
- $input1 = array(
283
- '@context' => 'http://schema.org',
284
- '@type' => 'Article',
285
- 'mainEntityOfPage' => get_permalink(),
286
- 'image' => $image_details[0],
287
- 'headline' => get_the_title(),
288
- 'description' => get_the_excerpt(),
289
- 'datePublished' => $date,
290
- 'dateModified' => $modified_date,
291
- 'author' => array(
292
- '@type' => 'Person',
293
- 'name' => $aurthor_name, ),
294
- 'Publisher' => array(
295
- '@type' => 'Organization',
296
- 'logo' => array(
297
- '@type' => 'ImageObject',
298
- 'url' => $sd_data['sd_logo']['url'],
299
- 'width' => $sd_data['sd_logo']['width'],
300
- 'height' => $sd_data['sd_logo']['height'],
301
- ),
302
- 'name' => $sd_data['sd_name'],
303
- ),
304
- );
305
- }
306
-
307
- // Recipe
308
- if( 'Recipe' === $schema_type){
309
- if(empty($image_details[0]) || $image_details[0] === NULL ){
310
- $image_details[0] = $sd_data['sd_logo']['url'];
311
- }
312
- $input1 = array(
313
- '@context' => 'http://schema.org',
314
- '@type' => $schema_type ,
315
- 'url' => get_permalink(),
316
- 'headline' => get_the_title(),
317
- 'datePublished' => $date,
318
- 'dateModified' => $modified_date,
319
- 'description' => get_the_excerpt(),
320
- 'mainEntity' => array(
321
- '@type' => 'WebPage',
322
- '@id' => get_permalink(),
323
- 'author' => array(
324
- '@type' => 'Person',
325
- 'name' => $aurthor_name,
326
- 'Image' => array(
327
- '@type' => 'ImageObject',
328
- 'url' => $author_details['url'],
329
- 'height' => $author_details['height'],
330
- 'width' => $author_details['width']
331
- ),
332
- ),
333
- 'Publisher' => array(
334
- '@type' => 'Organization',
335
- 'logo' => array(
336
- '@type' => 'ImageObject',
337
- 'url' => $sd_data['sd_logo']['url'],
338
- 'width' => $sd_data['sd_logo']['width'],
339
- 'height' => $sd_data['sd_logo']['height'],
340
- ),
341
- 'name' => $sd_data['sd_name'],
342
- ),
343
- ),
344
-
345
-
346
- );
347
- }
348
-
349
- // Product
350
-
351
- if( 'Product' === $schema_type){
352
- if(empty($image_details[0]) || $image_details[0] === NULL ){
353
- $image_details[0] = $logo;
354
- }
355
- $input1 = array(
356
- '@context' => 'http://schema.org',
357
- '@type' => $schema_type ,
358
- 'url' => get_permalink(),
359
- 'name' => get_the_title(),
360
- 'description' => get_the_excerpt(),
361
- 'mainEntity' => array(
362
- '@type' => 'WebPage',
363
- '@id' => get_permalink(),
364
- ),
365
-
366
-
367
- );
368
- }
369
-
370
- // VideoObject
371
- if( 'VideoObject' === $schema_type){
372
- if(empty($image_details[0]) || $image_details[0] === NULL ){
373
- $image_details[0] = $sd_data['sd_logo']['url'];
374
- }
375
-
376
- if( 'NewsArticle' === $schema_type ){
377
- $input1 = array(
378
- '@context' => 'http://schema.org',
379
- '@type' => $schema_type ,
380
- '@type' => $schema_type,
381
- 'mainEntityOfPage' => get_permalink(),
382
- 'url' => get_permalink(),
383
- 'headline' => get_the_title(),
384
- 'datePublished' => $date,
385
- 'dateModified' => $modified_date,
386
- 'description' => get_the_excerpt(),
387
- 'name' => get_the_title(),
388
- 'thumbnailUrl' => $image_details[0],
389
- 'mainEntity' => array(
390
- '@type' => 'WebPage',
391
- '@id' => get_permalink(),
392
- ),
393
- 'author' => array(
394
- '@type' => 'Person',
395
- 'name' => $aurthor_name,
396
- 'Image' => array(
397
- '@type' => 'ImageObject',
398
- 'url' => $author_details['url'],
399
- 'height' => $author_details['height'],
400
- 'width' => $author_details['width']
401
- ),
402
- ),
403
- 'Publisher' => array(
404
- '@type' => 'Organization',
405
- 'logo' => array(
406
- '@type' => 'ImageObject',
407
- 'url' => $sd_data['sd_logo']['url'],
408
- 'width' => $sd_data['sd_logo']['width'],
409
- 'height' => $sd_data['sd_logo']['height'],
410
- ),
411
- 'name' => $sd_data['sd_name'],
412
- ),
413
- );
414
- }
415
- else {
416
-
417
- $input1 = array(
418
- '@context' => 'http://schema.org',
419
- '@type' => $schema_type,
420
- 'url' => get_permalink(),
421
- 'headline' => get_the_title(),
422
- 'datePublished' => $date,
423
- 'dateModified' => $modified_date,
424
- 'description' => get_the_excerpt(),
425
- 'name' => get_the_title(),
426
- 'uploadDate' => $date,
427
- 'thumbnailUrl' => $image_details[0],
428
- 'mainEntity' => array(
429
- '@type' => 'WebPage',
430
- '@id' => get_permalink(),
431
- ),
432
- 'author' => array(
433
- '@type' => 'Person',
434
- 'name' => $aurthor_name,
435
- 'Image' => array(
436
- '@type' => 'ImageObject',
437
- 'url' => $author_details['url'],
438
- 'height' => $author_details['height'],
439
- 'width' => $author_details['width']
440
- ),
441
- ),
442
- 'Publisher' => array(
443
- '@type' => 'Organization',
444
- 'logo' => array(
445
- '@type' => 'ImageObject',
446
- 'url' => $sd_data['sd_logo']['url'],
447
- 'width' => $sd_data['sd_logo']['width'],
448
- 'height' => $sd_data['sd_logo']['height'],
449
- ),
450
- 'name' => $sd_data['sd_name'],
451
- ),
452
- );
453
- }
454
- }
455
-
456
- //Check for Featured Image
457
- if( is_array($image_details) ){
458
- if(isset($image_details[1]) ){
459
- $width = $image_details[1];
460
- }
461
- if(isset($image_details[2])){
462
- $height = $image_details[2];
463
- }
464
- $input2 = array(
465
- 'image' =>array(
466
- '@type' =>'ImageObject',
467
- 'url' =>$image_details[0],
468
- 'width' =>$width,
469
- 'height' =>$height,
470
- ),
471
- );
472
- $input = array_merge($input1,$input2);
473
- }
474
- else{
475
- $input2 = array(
476
- 'image' =>array(
477
- '@type' =>'ImageObject',
478
- 'url' => $sd_data['sd_logo']['url'],
479
- 'width' => $sd_data['sd_logo']['width'],
480
- 'height' => $sd_data['sd_logo']['height'],
481
- ),
482
- );
483
- $input = array_merge($input1,$input2);
484
- }
485
- if($schema_options['notAccessibleForFree']==1){
486
-
487
- add_filter( 'amp_post_template_data', 'saswp_structure_data_access_scripts');
488
- $paywall_class_name = $schema_options['paywall_class_name'];
489
- $isAccessibleForFree = isset($schema_options['isAccessibleForFree'])? $schema_options['isAccessibleForFree']: False;
490
-
491
- if($paywall_class_name!=""){
492
- if(strpos($paywall_class_name, ".")==-1){
493
- $paywall_class_name = ".".$paywall_class_name;
494
- }
495
- $paywallData = array("isAccessibleForFree"=> $isAccessibleForFree,
496
- "hasPart"=>array(
497
- "@type"=> "WebPageElement",
498
- "isAccessibleForFree"=> $isAccessibleForFree,
499
- "cssSelector" => $paywall_class_name
500
- )
501
- );
502
- $input = array_merge($input,$paywallData);
503
- }
504
- }
505
- return json_encode($input);
506
- }
507
-
508
- }
509
-
510
- function saswp_structure_data_access_scripts($data){
511
- if ( empty( $data['amp_component_scripts']['amp-access'] ) ) {
512
- $data['amp_component_scripts']['amp-access'] = 'https://cdn.ampproject.org/v0/amp-access-0.1.js';
513
- }
514
- if ( empty( $data['amp_component_scripts']['amp-analytics'] ) ) {
515
- $data['amp_component_scripts']['amp-analytics'] = "https://cdn.ampproject.org/v0/amp-analytics-0.1.js";
516
- }
517
- if ( empty( $data['amp_component_scripts']['amp-mustache'] ) ) {
518
- $data['amp_component_scripts']['amp-mustache'] = "https://cdn.ampproject.org/v0/amp-mustache-0.1.js";
519
- }
520
- return $data;
521
- }
522
-
523
- function saswp_list_items_generator(){
524
- global $sd_data;
525
- $bc_titles = array();
526
- $bc_links = array();
527
- if(isset($sd_data['titles'])){
528
- $bc_titles = $sd_data['titles'];
529
- }
530
- if(isset($sd_data['links'])){
531
- $bc_links = $sd_data['links'];
532
- }
533
- $j=1;
534
- $i = 0;
535
- $breadcrumbslist = array();
536
- if(is_single()){
537
- if(isset($bc_titles)){
538
- for($i=0;$i<sizeof($bc_titles);$i++){
539
- $breadcrumbslist[] = array(
540
- '@type' => 'ListItem',
541
- 'position' => $j,
542
- 'item' => array(
543
- '@id' => $bc_links[$i],
544
- 'name' => $bc_titles[$i],
545
- ),
546
- );
547
- $j++;
548
- }}
549
- $breadcrumbslist[] = array(
550
- '@type' =>'ListItem',
551
- 'position' => $j,
552
- 'item' => array(
553
- '@id' => get_permalink(),
554
- 'name' => get_the_title(),
555
-
556
- ),
557
- );
558
- }
559
- if(is_page()){
560
-
561
- for($i=0;$i<sizeof($bc_titles);$i++){
562
- $breadcrumbslist[] = array(
563
- '@type' => 'ListItem',
564
- 'position' => $j,
565
- 'item' => array(
566
- '@id' => $bc_links[$i],
567
- 'name' => $bc_titles[$i],
568
- ),
569
- );
570
- $j++;
571
- }
572
-
573
- }
574
- if(is_archive()){
575
-
576
- for($i=0;$i<sizeof($bc_titles);$i++){
577
- $breadcrumbslist[] = array(
578
- '@type' => 'ListItem',
579
- 'position' => $j,
580
- 'item' => array(
581
- '@id' => $bc_links[$i],
582
- 'name' => $bc_titles[$i],
583
- ),
584
- );
585
- $j++;
586
- }
587
- }
588
-
589
- return $breadcrumbslist;
590
- }
591
-
592
- function saswp_schema_breadcrumb_output($sd_data){
593
- global $sd_data;
594
- if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
595
- return ;
596
- }
597
- if(isset($sd_data['saswp_breadcrumb_schema']) && $sd_data['saswp_breadcrumb_schema'] == 1){
598
-
599
- $input = array(
600
- '@context' => 'http://schema.org',
601
- '@type' => 'BreadcrumbList' ,
602
- 'itemListElement' =>saswp_list_items_generator(),
603
- );
604
- if ( !is_front_page() ) {
605
- return json_encode($input);
606
- }
607
- }
608
- }
609
-
610
- function saswp_kb_website_output(){
611
- global $sd_data;
612
- if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
613
- return ;
614
- }
615
- $site_url = get_site_url();
616
- $site_name = get_bloginfo();
617
- $input = array(
618
- '@context' =>'http://schema.org',
619
- '@type' => 'WebSite',
620
- 'id' => '#website',
621
- 'url' => $site_url,
622
- 'name' => $site_name,
623
- 'potentialAction' => array(
624
- '@type' => 'SearchAction',
625
- 'target' => $site_url.'/?s={search_term_string}',
626
- 'query-input' => 'required name=search_term_string',
627
- )
628
- );
629
-
630
- return json_encode($input);
631
- }
632
- // For Archive
633
- function saswp_archive_output(){
634
- global $query_string, $sd_data;
635
- if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
636
- return ;
637
- }
638
- if(isset($sd_data['saswp_archive_schema']) && $sd_data['saswp_archive_schema'] == 1){
639
-
640
- if ( is_category() ) {
641
- $category_posts = array();
642
- $category_loop = new WP_Query( $query_string );
643
- if ( $category_loop->have_posts() ):
644
- while( $category_loop->have_posts() ): $category_loop->the_post();
645
- $image_id = get_post_thumbnail_id();
646
- $image_details = wp_get_attachment_image_src($image_id, 'full');
647
- $publisher_info = array(
648
- "type" => "Organization",
649
- "name" => $sd_data['sd_name'],
650
- "id" => $sd_data['sd_url'],
651
- "logo" => $sd_data['sd_logo']['url'],
652
- );
653
- $publisher_info['name'] = get_bloginfo('name');
654
- $publisher_info['id'] = get_the_permalink();
655
- $category_posts[] = array
656
- (
657
- '@type' => 'BlogPosting',
658
- 'headline' => get_the_title(),
659
- 'url' => get_the_permalink(),
660
- 'datePublished' => get_the_date('c'),
661
- 'dateModified' => get_the_modified_date('c'),
662
- 'mainEntityOfPage' => get_the_permalink(),
663
- 'author' => get_the_author(),
664
- 'publisher' => $publisher_info,
665
- 'image' => $image_details[0],
666
- );
667
-
668
- endwhile;
669
-
670
- wp_reset_postdata();
671
-
672
- $category = get_the_category();
673
- $category_id = intval($category[0]->term_id);
674
- $category_link = get_category_link( $category_id );
675
- $category_link = get_term_link( $category[0]->term_id , 'category' );
676
- $category_headline = single_cat_title( '', false ) . __(' Category', 'schema-wp');
677
- $input = array
678
- (
679
- '@context' => 'http://schema.org/',
680
- '@type' => "CollectionPage",
681
- 'headline' => $category_headline,
682
- 'description' => strip_tags(category_description()),
683
- 'url' => $category_link,
684
- 'sameAs' => '',
685
- 'hasPart' => $category_posts
686
- );
687
- return json_encode($input);
688
- endif;
689
- }
690
- }
691
- }
692
-
693
- // For Author
694
- function saswp_author_output()
695
- {
696
- global $post, $sd_data;
697
- if(isset($sd_data['saswp_archive_schema']) && $sd_data['saswp_archive_schema'] == 1){
698
- $post_id = $post->ID;
699
- if(is_author()){
700
- // Get author from post content
701
- $post_content = get_post($post_id);
702
- $post_author = get_userdata($post_content->post_author);
703
- $input = array (
704
- '@type' => 'Person',
705
- 'name' => get_the_author_meta('display_name'),
706
- 'url' => esc_url( get_author_posts_url( $post_author->ID ) ),
707
-
708
- );
709
-
710
- $sd_website = esc_attr( stripslashes( get_the_author_meta( 'user_url', $post_author->ID ) ) );
711
- $sd_googleplus = esc_attr( stripslashes( get_the_author_meta( 'googleplus', $post_author->ID ) ) );
712
- $sd_facebook = esc_attr( stripslashes( get_the_author_meta( 'facebook', $post_author->ID) ) );
713
- $sd_twitter = esc_attr( stripslashes( get_the_author_meta( 'twitter', $post_author->ID ) ) );
714
- $sd_instagram = esc_attr( stripslashes( get_the_author_meta( 'instagram', $post_author->ID ) ) );
715
- $sd_youtube = esc_attr( stripslashes( get_the_author_meta( 'youtube', $post_author->ID ) ) );
716
- $sd_linkedin = esc_attr( stripslashes( get_the_author_meta( 'linkedin', $post_author->ID ) ) );
717
- $sd_pinterest = esc_attr( stripslashes( get_the_author_meta( 'pinterest', $post_author->ID ) ) );
718
- $sd_soundcloud = esc_attr( stripslashes( get_the_author_meta( 'soundcloud', $post_author->ID ) ) );
719
- $sd_tumblr = esc_attr( stripslashes( get_the_author_meta( 'tumblr', $post_author->ID ) ) );
720
-
721
- $sd_sameAs_links = array( $sd_website, $sd_googleplus, $sd_facebook, $sd_twitter, $sd_instagram, $sd_youtube, $sd_linkedin, $sd_pinterest, $sd_soundcloud, $sd_tumblr);
722
-
723
- $sd_social = array();
724
-
725
- // Remove empty fields
726
- foreach( $sd_sameAs_links as $sd_sameAs_link ) {
727
- if ( '' != $sd_sameAs_link ) $sd_social[] = $sd_sameAs_link;
728
- }
729
-
730
- if ( ! empty($sd_social) ) {
731
- $input["sameAs"] = $sd_social;
732
- }
733
-
734
- if ( get_the_author_meta( 'description', $post_author->ID ) ) {
735
- $input['description'] = strip_tags( get_the_author_meta( 'description', $post_author->ID ) );
736
- }
737
- return json_encode($input);
738
- }
739
- }
740
- }
741
-
742
- // For About Page
743
- function saswp_about_page_output()
744
- {
745
- global $sd_data;
746
- $image_id = get_post_thumbnail_id();
747
- $image_details = wp_get_attachment_image_src($image_id, 'full');
748
- if(isset($image_details['url'])){
749
- $image_url = $image_details['url'];
750
- }
751
- $about_page = $sd_data['sd_about_page'];
752
-
753
- if(isset($sd_data['sd_about_page']) && $sd_data['sd_about_page'] === get_the_ID()){
754
-
755
- $logo = $sd_data['sd_logo']['url'];
756
- $height = $sd_data['sd_logo']['height'];
757
- $width = $sd_data['sd_logo']['width'];
758
-
759
- if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image'])){
760
- $image_url = $sd_data['sd_default_image']['url'];
761
- }
762
-
763
- if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_height'])){
764
- $height = $sd_data['sd_default_image_height'];
765
- }
766
-
767
- if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_width'])){
768
- $width = $sd_data['sd_default_image_width'];
769
- }
770
- $input = array(
771
- "@context" => "http://schema.org",
772
- "@type" => "AboutPage",
773
- "mainEntityOfPage" => array(
774
- "@type" => "WebPage",
775
- "@id" => get_permalink(),
776
- ),
777
- "url" => $about_page,
778
- "headline" => get_the_title(),
779
- "image" => array(
780
- "@type" => "ImageObject",
781
- "url" => $image_url,
782
- "width" => $width,
783
- "height" => $height,
784
- ),
785
- 'Publisher' => array(
786
- '@type' => 'Organization',
787
- 'logo' => array(
788
- '@type' => 'ImageObject',
789
- 'url' => $logo,
790
- 'width' => $width,
791
- 'height' => $height,
792
- ),
793
- 'name' => $sd_data['sd_name'],
794
- ),
795
- 'description' => get_the_excerpt(),
796
- );
797
-
798
- return json_encode($input);
799
- }
800
-
801
- }
802
-
803
- // For Contact Page
804
- function saswp_contact_page_output()
805
- {
806
- global $sd_data;
807
- $image_id = get_post_thumbnail_id();
808
- $image_details = wp_get_attachment_image_src($image_id, 'full');
809
- if(isset($image_details['url'])){
810
- $image_url = $image_details['url'];
811
- }
812
- $contact_page = $sd_data['sd_contact_page'];
813
-
814
- if(isset($sd_data['sd_contact_page']) && $sd_data['sd_contact_page'] === get_the_ID()){
815
-
816
- $logo = $sd_data['sd_logo']['url'];
817
- $height = $sd_data['sd_logo']['height'];
818
- $width = $sd_data['sd_logo']['width'];
819
-
820
- if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image'])){
821
- $image_url = $sd_data['sd_default_image']['url'];
822
- }
823
-
824
- if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_height'])){
825
- $height = $sd_data['sd_default_image_height'];
826
- }
827
-
828
- if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_width'])){
829
- $width = $sd_data['sd_default_image_width'];
830
- }
831
- $input = array(
832
- "@context" => "http://schema.org",
833
- "@type" => "ContactPage",
834
- "mainEntityOfPage" => array(
835
- "@type" => "WebPage",
836
- "@id" => get_permalink(),
837
- ),
838
- "url" => $contact_page,
839
- "headline" => get_the_title(),
840
- "image" => array(
841
- "@type" => "ImageObject",
842
- "url" => $image_url,
843
- "width" => $width,
844
- "height" => $height,
845
- ),
846
- 'Publisher' => array(
847
- '@type' => 'Organization',
848
- 'logo' => array(
849
- '@type' => 'ImageObject',
850
- 'url' => $logo,
851
- 'width' => $width,
852
- 'height' => $height,
853
- ),
854
- 'name' => $sd_data['sd_name'],
855
- ),
856
- 'description' => get_the_excerpt(),
857
- );
858
-
859
- return json_encode($input);
860
-
861
- }
862
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
863
  }
1
+ <?php
2
+ if (! defined('ABSPATH') ) exit;
3
+
4
+ function saswp_kb_schema_output() {
5
+ global $sd_data;
6
+ if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
7
+ return ;
8
+ }
9
+ // social profile
10
+ $sd_social_profile = array();
11
+
12
+ $sd_facebook = array();
13
+ if(isset($sd_data['sd_facebook']) && !empty($sd_data['sd_facebook'])){
14
+ $sd_facebook[] = $sd_data['sd_facebook'];
15
+ $sd_social_profile[] = $sd_facebook;
16
+ }
17
+ $sd_twitter = array();
18
+ if(isset($sd_data['sd_twitter']) && !empty($sd_data['sd_twitter'])){
19
+ $sd_twitter[] = $sd_data['sd_twitter'];
20
+ $sd_social_profile[] = $sd_twitter;
21
+ }
22
+
23
+ $sd_google_plus = array();
24
+ if(isset($sd_data['sd_google_plus']) && !empty($sd_data['sd_google_plus'])){
25
+ $sd_google_plus[] = $sd_data['sd_google_plus'];
26
+ $sd_social_profile[] = $sd_google_plus;
27
+ }
28
+
29
+ $sd_instagram = array();
30
+ if(isset($sd_data['sd_instagram']) && !empty($sd_data['sd_instagram'])){
31
+ $sd_instagram[] = $sd_data['sd_instagram'];
32
+ $sd_social_profile[] = $sd_instagram;
33
+ }
34
+
35
+ $sd_youtube = array();
36
+ if(isset($sd_data['sd_youtube']) && !empty($sd_data['sd_youtube'])){
37
+ $sd_youtube[] = $sd_data['sd_youtube'];
38
+ $sd_social_profile[] = $sd_youtube;
39
+ }
40
+
41
+ $sd_linkedin = array();
42
+ if(isset($sd_data['sd_linkedin']) && !empty($sd_data['sd_linkedin'])){
43
+ $sd_linkedin[] = $sd_data['sd_linkedin'];
44
+ $sd_social_profile[] = $sd_linkedin;
45
+ }
46
+
47
+ $sd_pinterest = array();
48
+ if(isset($sd_data['sd_pinterest']) && !empty($sd_data['sd_pinterest'])){
49
+ $sd_pinterest[] = $sd_data['sd_pinterest'];
50
+ $sd_social_profile[] = $sd_pinterest;
51
+ }
52
+
53
+ $sd_soundcloud = array();
54
+ if(isset($sd_data['sd_soundcloud']) && !empty($sd_data['sd_soundcloud'])){
55
+ $sd_soundcloud[] = $sd_data['sd_soundcloud'];
56
+ $sd_social_profile[] = $sd_soundcloud;
57
+ }
58
+
59
+ $sd_tumblr = array();
60
+ if(isset($sd_data['sd_tumblr']) && !empty($sd_data['sd_tumblr'])){
61
+ $sd_tumblr[] = $sd_data['sd_tumblr'];
62
+ $sd_social_profile[] = $sd_tumblr;
63
+ }
64
+
65
+ $platform = array();
66
+ foreach ($sd_social_profile as $key => $value) {
67
+ $platform[] = $value;
68
+ }
69
+
70
+ // Organization Schema
71
+
72
+
73
+ if ( $sd_data['saswp_kb_type'] == 'Organization' ) {
74
+ $logo = $sd_data['sd_logo']['url'];
75
+ $contact_1 = $sd_data['saswp_contact_type'];
76
+ $telephone_1 = $sd_data['saswp_kb_telephone'];
77
+ $height = $sd_data['sd_logo']['height'];
78
+ $width = $sd_data['sd_logo']['width'];
79
+
80
+ if( '' == $logo && empty($logo) && isset($sd_data['sd_default_image'])){
81
+ $logo = $sd_data['sd_default_image']['url'];
82
+ }
83
+
84
+ if( '' == $height && empty($height) && isset($sd_data['sd_default_image_height'])){
85
+ $height = $sd_data['sd_default_image_height'];
86
+ }
87
+
88
+ if( '' == $width && empty($width) && isset($sd_data['sd_default_image_width'])){
89
+ $width = $sd_data['sd_default_image_width'];
90
+ }
91
+
92
+ if( '' == $contact_1 && empty($contact_1) && isset($sd_data['saswp_contact_type'])){
93
+ $contact_1 = $sd_data['saswp_contact_type'];
94
+ }
95
+
96
+ if( '' == $telephone_1 && empty($telephone_1) && isset($sd_data['saswp_kb_telephone'])){
97
+ $telephone_1 = $sd_data['saswp_kb_telephone'];
98
+ }
99
+
100
+ // Contact Information
101
+ $contact_info = array();
102
+ $contact_info = array(
103
+ 'contactPoint' => array(
104
+ '@type' => 'ContactPoint',
105
+ 'contactType' => $contact_1,
106
+ 'telephone' => $telephone_1,
107
+ )
108
+ );
109
+
110
+ $input = array(
111
+ '@context' =>'http://schema.org',
112
+ '@type' => $sd_data['saswp_kb_type'],
113
+ 'name' => $sd_data['sd_name'],
114
+ 'url' => $sd_data['sd_url'],
115
+ 'sameAs' => $platform,
116
+ 'logo' => array(
117
+ '@type' => 'ImageObject',
118
+ 'url' => $logo,
119
+ 'width' => $width,
120
+ 'height' => $height,
121
+ ),
122
+ );
123
+
124
+ if ( isset($sd_data['saswp_kb_contact_1'] ) && $sd_data['saswp_kb_contact_1'] ) {
125
+ $input = array_merge($input, $contact_info);
126
+ }
127
+ }
128
+ // Person
129
+
130
+ if ( $sd_data['saswp_kb_type'] == 'Person' ) {
131
+ $image = $sd_data['sd-person-image']['url'];
132
+ $height = $sd_data['sd-person-image']['height'];
133
+ $width = $sd_data['sd-person-image']['width'];
134
+ if( '' == $image && empty($image) && isset($sd_data['sd_default_image'])){
135
+ $image = $sd_data['sd_default_image']['url'];
136
+ }
137
+
138
+ if( '' == $height && empty($height) && isset($sd_data['sd_default_image_height'])){
139
+ $height = $sd_data['sd_default_image_height'];
140
+ }
141
+
142
+ if( '' == $width && empty($width) && isset($sd_data['sd_default_image_width'])){
143
+ $width = $sd_data['sd_default_image_width'];
144
+ }
145
+
146
+ $input = array(
147
+ '@context' =>'http://schema.org',
148
+ '@type' => $sd_data['saswp_kb_type'],
149
+ 'name' => $sd_data['sd-person-name'],
150
+ 'url' => $sd_data['sd-person-url'],
151
+ 'Image' => array(
152
+ '@type' => 'ImageObject',
153
+ 'url' => $image,
154
+ 'width' => $width,
155
+ 'height' => $height,
156
+ ),
157
+ 'telephone' => $sd_data['sd-person-phone-number'],
158
+ );
159
+ }
160
+ return json_encode($input);
161
+ }
162
+
163
+ function sd_is_blog() {
164
+ return ( is_author() || is_category() || is_tag() || is_date() || is_home() || is_single() ) && 'post' == get_post_type();
165
+ }
166
+
167
+ function saswp_schema_output() {
168
+ global $sd_data;
169
+
170
+ $Conditionals = saswp_get_all_schema_posts();
171
+
172
+
173
+ if(!$Conditionals){
174
+ return ;
175
+ }
176
+ if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
177
+ return ;
178
+ }
179
+ $all_schema_output = array();
180
+ foreach($Conditionals as $schemaConditionals){
181
+
182
+ $schema_options = $schemaConditionals['schema_options'];
183
+ $schema_type = $schemaConditionals['schema_type'];
184
+ $schema_post_id = $schemaConditionals['post_id'];
185
+ $logo = $sd_data['sd_logo']['url'];
186
+ if( '' == $logo && empty($logo) && isset($sd_data['sd_default_image'])){
187
+ $logo = $sd_data['sd_default_image']['url'];
188
+ }
189
+ $height = $sd_data['sd_logo']['height'];
190
+ if( '' == $height && empty($height) && isset($sd_data['sd_default_image_height'])){
191
+ $height = $sd_data['sd_default_image_height'];
192
+ }
193
+ $width = $sd_data['sd_logo']['width'];
194
+ if( '' == $width && empty($width) && isset($sd_data['sd_default_image_width'])){
195
+ $width = $sd_data['sd_default_image_width'];
196
+ }
197
+ if(is_singular()){
198
+ // Generate author id
199
+ $author_id = get_the_author_meta('ID');
200
+
201
+ // Blogposting Schema
202
+ $image_id = get_post_thumbnail_id();
203
+ $image_details = wp_get_attachment_image_src($image_id, 'full');
204
+ $author_details = get_avatar_data($author_id);
205
+ $date = get_the_date("Y-m-d\TH:i:s\Z");
206
+ $modified_date = get_the_modified_date("Y-m-d\TH:i:s\Z");
207
+ $aurthor_name = get_the_author();
208
+
209
+ if(is_page()){
210
+ $schema_type = $schema_type; //$sd_data['sd_page_type'];
211
+ }
212
+ if(is_single()){
213
+ $schema_type = $schema_type; //$sd_data['sd_post_type'];
214
+ }
215
+ if(is_front_page()){
216
+ $schema_type = $schema_type; // $sd_data['sd_page_type'];
217
+ }
218
+ $input1 = array(
219
+ '@context' => 'http://schema.org',
220
+ '@type' => $schema_type ,
221
+
222
+ 'mainEntityOfPage' => get_permalink(),
223
+ 'headline' => get_the_title(),
224
+ 'description' => get_the_excerpt(),
225
+ 'name' => get_the_title(),
226
+ 'url' => get_permalink(),
227
+ 'datePublished' => $date,
228
+ 'dateModified' => $modified_date,
229
+ 'author' => array(
230
+ '@type' => 'Person',
231
+ 'name' => $aurthor_name, ),
232
+ 'Publisher' => array(
233
+ '@type' => 'Organization',
234
+ 'logo' => array(
235
+ '@type' => 'ImageObject',
236
+ 'url' => $logo,
237
+ 'width' => $width,
238
+ 'height' => $height,
239
+ ),
240
+ 'name' => $sd_data['sd_name'],
241
+ ),
242
+ );
243
+ // For WebPage
244
+ if( 'WebPage' === $schema_type){
245
+ if(empty($image_details[0]) || $image_details[0] === NULL ){
246
+ $image_details[0] = $logo;
247
+ }
248
+
249
+ $input1 = array(
250
+ '@context' => 'http://schema.org',
251
+ '@type' => $schema_type ,
252
+ 'name' => get_the_title(),
253
+ 'url' => get_permalink(),
254
+ 'description' => get_the_excerpt(),
255
+ 'mainEntity' => array(
256
+ '@type' => 'Article',
257
+ 'mainEntityOfPage' => get_permalink(),
258
+ 'image' => $image_details[0],
259
+ 'headline' => get_the_title(),
260
+ 'description' => get_the_excerpt(),
261
+ 'datePublished' => $date,
262
+ 'dateModified' => $modified_date,
263
+ 'author' => array(
264
+ '@type' => 'Person',
265
+ 'name' => $aurthor_name, ),
266
+ 'Publisher' => array(
267
+ '@type' => 'Organization',
268
+ 'logo' => array(
269
+ '@type' => 'ImageObject',
270
+ 'url' => $logo,
271
+ 'width' => $width,
272
+ 'height' => $height,
273
+ ),
274
+ 'name' => $sd_data['sd_name'],
275
+ ),
276
+ ),
277
+
278
+
279
+ );
280
+ }
281
+
282
+ // For Article
283
+
284
+ if( 'Article' === $schema_type ){
285
+ $input1 = array(
286
+ '@context' => 'http://schema.org',
287
+ '@type' => 'Article',
288
+ 'mainEntityOfPage' => get_permalink(),
289
+ 'image' => $image_details[0],
290
+ 'headline' => get_the_title(),
291
+ 'description' => get_the_excerpt(),
292
+ 'datePublished' => $date,
293
+ 'dateModified' => $modified_date,
294
+ 'author' => array(
295
+ '@type' => 'Person',
296
+ 'name' => $aurthor_name, ),
297
+ 'Publisher' => array(
298
+ '@type' => 'Organization',
299
+ 'logo' => array(
300
+ '@type' => 'ImageObject',
301
+ 'url' => $sd_data['sd_logo']['url'],
302
+ 'width' => $sd_data['sd_logo']['width'],
303
+ 'height' => $sd_data['sd_logo']['height'],
304
+ ),
305
+ 'name' => $sd_data['sd_name'],
306
+ ),
307
+ );
308
+ }
309
+
310
+ // Recipe
311
+ if( 'Recipe' === $schema_type){
312
+ if(empty($image_details[0]) || $image_details[0] === NULL ){
313
+ $image_details[0] = $sd_data['sd_logo']['url'];
314
+ }
315
+ $input1 = array(
316
+ '@context' => 'http://schema.org',
317
+ '@type' => $schema_type ,
318
+ 'url' => get_permalink(),
319
+ 'headline' => get_the_title(),
320
+ 'datePublished' => $date,
321
+ 'dateModified' => $modified_date,
322
+ 'description' => get_the_excerpt(),
323
+ 'mainEntity' => array(
324
+ '@type' => 'WebPage',
325
+ '@id' => get_permalink(),
326
+ 'author' => array(
327
+ '@type' => 'Person',
328
+ 'name' => $aurthor_name,
329
+ 'Image' => array(
330
+ '@type' => 'ImageObject',
331
+ 'url' => $author_details['url'],
332
+ 'height' => $author_details['height'],
333
+ 'width' => $author_details['width']
334
+ ),
335
+ ),
336
+ 'Publisher' => array(
337
+ '@type' => 'Organization',
338
+ 'logo' => array(
339
+ '@type' => 'ImageObject',
340
+ 'url' => $sd_data['sd_logo']['url'],
341
+ 'width' => $sd_data['sd_logo']['width'],
342
+ 'height' => $sd_data['sd_logo']['height'],
343
+ ),
344
+ 'name' => $sd_data['sd_name'],
345
+ ),
346
+ ),
347
+
348
+
349
+ );
350
+ }
351
+
352
+ // Product
353
+
354
+ if( 'Product' === $schema_type){
355
+ if(empty($image_details[0]) || $image_details[0] === NULL ){
356
+ $image_details[0] = $logo;
357
+ }
358
+ $input1 = array(
359
+ '@context' => 'http://schema.org',
360
+ '@type' => $schema_type ,
361
+ 'url' => get_permalink(),
362
+ 'name' => get_the_title(),
363
+ 'description' => get_the_excerpt(),
364
+ 'mainEntity' => array(
365
+ '@type' => 'WebPage',
366
+ '@id' => get_permalink(),
367
+ ),
368
+
369
+
370
+ );
371
+ }
372
+
373
+ // VideoObject
374
+ if( 'VideoObject' === $schema_type){
375
+ if(empty($image_details[0]) || $image_details[0] === NULL ){
376
+ $image_details[0] = $sd_data['sd_logo']['url'];
377
+ }
378
+
379
+ if( 'NewsArticle' === $schema_type ){
380
+ $input1 = array(
381
+ '@context' => 'http://schema.org',
382
+ '@type' => $schema_type ,
383
+ '@type' => $schema_type,
384
+ 'mainEntityOfPage' => get_permalink(),
385
+ 'url' => get_permalink(),
386
+ 'headline' => get_the_title(),
387
+ 'datePublished' => $date,
388
+ 'dateModified' => $modified_date,
389
+ 'description' => get_the_excerpt(),
390
+ 'name' => get_the_title(),
391
+ 'thumbnailUrl' => $image_details[0],
392
+ 'mainEntity' => array(
393
+ '@type' => 'WebPage',
394
+ '@id' => get_permalink(),
395
+ ),
396
+ 'author' => array(
397
+ '@type' => 'Person',
398
+ 'name' => $aurthor_name,
399
+ 'Image' => array(
400
+ '@type' => 'ImageObject',
401
+ 'url' => $author_details['url'],
402
+ 'height' => $author_details['height'],
403
+ 'width' => $author_details['width']
404
+ ),
405
+ ),
406
+ 'Publisher' => array(
407
+ '@type' => 'Organization',
408
+ 'logo' => array(
409
+ '@type' => 'ImageObject',
410
+ 'url' => $sd_data['sd_logo']['url'],
411
+ 'width' => $sd_data['sd_logo']['width'],
412
+ 'height' => $sd_data['sd_logo']['height'],
413
+ ),
414
+ 'name' => $sd_data['sd_name'],
415
+ ),
416
+ );
417
+ }
418
+ else {
419
+
420
+ $input1 = array(
421
+ '@context' => 'http://schema.org',
422
+ '@type' => $schema_type,
423
+ 'url' => get_permalink(),
424
+ 'headline' => get_the_title(),
425
+ 'datePublished' => $date,
426
+ 'dateModified' => $modified_date,
427
+ 'description' => get_the_excerpt(),
428
+ 'name' => get_the_title(),
429
+ 'uploadDate' => $date,
430
+ 'thumbnailUrl' => $image_details[0],
431
+ 'mainEntity' => array(
432
+ '@type' => 'WebPage',
433
+ '@id' => get_permalink(),
434
+ ),
435
+ 'author' => array(
436
+ '@type' => 'Person',
437
+ 'name' => $aurthor_name,
438
+ 'Image' => array(
439
+ '@type' => 'ImageObject',
440
+ 'url' => $author_details['url'],
441
+ 'height' => $author_details['height'],
442
+ 'width' => $author_details['width']
443
+ ),
444
+ ),
445
+ 'Publisher' => array(
446
+ '@type' => 'Organization',
447
+ 'logo' => array(
448
+ '@type' => 'ImageObject',
449
+ 'url' => $sd_data['sd_logo']['url'],
450
+ 'width' => $sd_data['sd_logo']['width'],
451
+ 'height' => $sd_data['sd_logo']['height'],
452
+ ),
453
+ 'name' => $sd_data['sd_name'],
454
+ ),
455
+ );
456
+ }
457
+ }
458
+
459
+ if( 'local_business' === $schema_type){
460
+
461
+ $business_type = esc_sql ( get_post_meta($schema_post_id, 'saswp_business_type', true) );
462
+ $business_name = esc_sql ( get_post_meta($schema_post_id, 'saswp_business_name', true) );
463
+ $business_details = esc_sql ( get_post_meta($schema_post_id, 'saswp_local_business_details', true) );
464
+ if(empty($image_details[0]) || $image_details[0] === NULL ){
465
+ $image_details[0] = $logo;
466
+ }
467
+ if(isset($business_details['local_business_logo'])){
468
+ unset($image_details);
469
+ $image_details[0] = $business_details['local_business_logo']['url'];
470
+ $image_details[1] = $business_details['local_business_logo']['width'];
471
+ $image_details[2] = $business_details['local_business_logo']['height'];
472
+ }
473
+ if($business_name){
474
+ $local_business = $business_name;
475
+ }else{
476
+ $local_business = $business_type;
477
+ }
478
+ $input1 = array(
479
+ '@context' => 'http://schema.org',
480
+ '@type' => $local_business ,
481
+ 'url' => get_permalink(),
482
+ 'name' => $business_details['local_business_name'],
483
+ //'description' => get_the_excerpt(),
484
+ '@id' => get_permalink(),
485
+ 'address' => array(
486
+ "@type" => "PostalAddress",
487
+ "streetAddress" => $business_details['local_street_address'],
488
+ "addressLocality"=> $business_details['local_city'],
489
+ "addressRegion" => $business_details['local_state'],
490
+ "postalCode" => $business_details['local_postal_code'],
491
+ ),
492
+ 'telephone' => $business_details['local_phone'],
493
+ 'openingHoursSpecification' => array(
494
+ '@type' => 'OpeningHoursSpecification',
495
+ 'dayOfWeek' => $business_details['saswp_dayofweek'],
496
+ 'opens' => $business_details['local_opens_time'],
497
+ 'closes'=> $business_details['local_closes_time'],
498
+ ),
499
+ );
500
+
501
+ if(isset($business_details['local_price_range'])){
502
+ $input1['priceRange'] = $business_details['local_price_range'];
503
+ }
504
+
505
+ if(isset($business_details['local_accepts_reservations'])){
506
+ $input1['acceptsReservations'] = $business_details['local_accepts_reservations'];
507
+ }
508
+
509
+ if(isset($business_details['local_serves_cuisine'])){
510
+ $input1['servesCuisine'] = $business_details['local_serves_cuisine'];
511
+ }
512
+
513
+ if(isset($business_details['local_menu'])){
514
+ $input1['menu'] = $business_details['local_menu'];
515
+ }
516
+ }
517
+
518
+ //Check for Featured Image
519
+ if( is_array($image_details) ){
520
+ if(isset($image_details[1]) ){
521
+ $width = $image_details[1];
522
+ }
523
+ if(isset($image_details[2])){
524
+ $height = $image_details[2];
525
+ }
526
+ $input2 = array(
527
+ 'image' =>array(
528
+ '@type' =>'ImageObject',
529
+ 'url' =>$image_details[0],
530
+ 'width' =>$width,
531
+ 'height' =>$height,
532
+ ),
533
+ );
534
+ $input = array_merge($input1,$input2);
535
+ }
536
+ else{
537
+ $input2 = array(
538
+ 'image' =>array(
539
+ '@type' =>'ImageObject',
540
+ 'url' => $sd_data['sd_logo']['url'],
541
+ 'width' => $sd_data['sd_logo']['width'],
542
+ 'height' => $sd_data['sd_logo']['height'],
543
+ ),
544
+ );
545
+ $input = array_merge($input1,$input2);
546
+ }
547
+ if(isset($schema_options['notAccessibleForFree'])==1){
548
+
549
+ add_filter( 'amp_post_template_data', 'saswp_structure_data_access_scripts');
550
+ $paywall_class_name = $schema_options['paywall_class_name'];
551
+ $isAccessibleForFree = isset($schema_options['isAccessibleForFree'])? $schema_options['isAccessibleForFree']: False;
552
+
553
+ if($paywall_class_name!=""){
554
+ if(strpos($paywall_class_name, ".")==-1){
555
+ $paywall_class_name = ".".$paywall_class_name;
556
+ }
557
+ $paywallData = array("isAccessibleForFree"=> $isAccessibleForFree,
558
+ "hasPart"=>array(
559
+ "@type"=> "WebPageElement",
560
+ "isAccessibleForFree"=> $isAccessibleForFree,
561
+ "cssSelector" => $paywall_class_name
562
+ )
563
+ );
564
+ $input = array_merge($input,$paywallData);
565
+ }
566
+ }
567
+ $all_schema_output[] = $input;
568
+ }
569
+ }
570
+ return $all_schema_output;
571
+ }
572
+
573
+ function saswp_structure_data_access_scripts($data){
574
+ if ( empty( $data['amp_component_scripts']['amp-access'] ) ) {
575
+ $data['amp_component_scripts']['amp-access'] = 'https://cdn.ampproject.org/v0/amp-access-0.1.js';
576
+ }
577
+ if ( empty( $data['amp_component_scripts']['amp-analytics'] ) ) {
578
+ $data['amp_component_scripts']['amp-analytics'] = "https://cdn.ampproject.org/v0/amp-analytics-0.1.js";
579
+ }
580
+ if ( empty( $data['amp_component_scripts']['amp-mustache'] ) ) {
581
+ $data['amp_component_scripts']['amp-mustache'] = "https://cdn.ampproject.org/v0/amp-mustache-0.1.js";
582
+ }
583
+ return $data;
584
+ }
585
+
586
+ function saswp_list_items_generator(){
587
+ global $sd_data;
588
+ $bc_titles = array();
589
+ $bc_links = array();
590
+ if(isset($sd_data['titles'])){
591
+ $bc_titles = $sd_data['titles'];
592
+ }
593
+ if(isset($sd_data['links'])){
594
+ $bc_links = $sd_data['links'];
595
+ }
596
+ $j=1;
597
+ $i = 0;
598
+ $breadcrumbslist = array();
599
+ if(is_single()){
600
+ if(isset($bc_titles)){
601
+ for($i=0;$i<sizeof($bc_titles);$i++){
602
+ $breadcrumbslist[] = array(
603
+ '@type' => 'ListItem',
604
+ 'position' => $j,
605
+ 'item' => array(
606
+ '@id' => $bc_links[$i],
607
+ 'name' => $bc_titles[$i],
608
+ ),
609
+ );
610
+ $j++;
611
+ }}
612
+ $breadcrumbslist[] = array(
613
+ '@type' =>'ListItem',
614
+ 'position' => $j,
615
+ 'item' => array(
616
+ '@id' => get_permalink(),
617
+ 'name' => get_the_title(),
618
+
619
+ ),
620
+ );
621
+ }
622
+ if(is_page()){
623
+
624
+ for($i=0;$i<sizeof($bc_titles);$i++){
625
+ $breadcrumbslist[] = array(
626
+ '@type' => 'ListItem',
627
+ 'position' => $j,
628
+ 'item' => array(
629
+ '@id' => $bc_links[$i],
630
+ 'name' => $bc_titles[$i],
631
+ ),
632
+ );
633
+ $j++;
634
+ }
635
+
636
+ }
637
+ if(is_archive()){
638
+
639
+ for($i=0;$i<sizeof($bc_titles);$i++){
640
+ $breadcrumbslist[] = array(
641
+ '@type' => 'ListItem',
642
+ 'position' => $j,
643
+ 'item' => array(
644
+ '@id' => $bc_links[$i],
645
+ 'name' => $bc_titles[$i],
646
+ ),
647
+ );
648
+ $j++;
649
+ }
650
+ }
651
+
652
+ return $breadcrumbslist;
653
+ }
654
+
655
+ function saswp_schema_breadcrumb_output($sd_data){
656
+ global $sd_data;
657
+ if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
658
+ return ;
659
+ }
660
+ if(isset($sd_data['saswp_breadcrumb_schema']) && $sd_data['saswp_breadcrumb_schema'] == 1){
661
+
662
+ $input = array(
663
+ '@context' => 'http://schema.org',
664
+ '@type' => 'BreadcrumbList' ,
665
+ 'itemListElement' =>saswp_list_items_generator(),
666
+ );
667
+ if ( !is_front_page() ) {
668
+ return json_encode($input);
669
+ }
670
+ }
671
+ }
672
+
673
+ function saswp_kb_website_output(){
674
+ global $sd_data;
675
+ if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
676
+ return ;
677
+ }
678
+ $site_url = get_site_url();
679
+ $site_name = get_bloginfo();
680
+ $input = array(
681
+ '@context' =>'http://schema.org',
682
+ '@type' => 'WebSite',
683
+ 'id' => '#website',
684
+ 'url' => $site_url,
685
+ 'name' => $site_name,
686
+ 'potentialAction' => array(
687
+ '@type' => 'SearchAction',
688
+ 'target' => $site_url.'/?s={search_term_string}',
689
+ 'query-input' => 'required name=search_term_string',
690
+ )
691
+ );
692
+
693
+ return json_encode($input);
694
+ }
695
+ // For Archive
696
+ function saswp_archive_output(){
697
+ global $query_string, $sd_data;
698
+ if( (!saswp_non_amp() && $sd_data['saswp-for-amp']!=1) || (saswp_non_amp() && $sd_data['saswp-for-wordpress']!=1) ) {
699
+ return ;
700
+ }
701
+ if(isset($sd_data['saswp_archive_schema']) && $sd_data['saswp_archive_schema'] == 1){
702
+
703
+ if ( is_category() ) {
704
+ $category_posts = array();
705
+ $category_loop = new WP_Query( $query_string );
706
+ if ( $category_loop->have_posts() ):
707
+ while( $category_loop->have_posts() ): $category_loop->the_post();
708
+ $image_id = get_post_thumbnail_id();
709
+ $image_details = wp_get_attachment_image_src($image_id, 'full');
710
+ $publisher_info = array(
711
+ "type" => "Organization",
712
+ "name" => $sd_data['sd_name'],
713
+ "id" => $sd_data['sd_url'],
714
+ "logo" => $sd_data['sd_logo']['url'],
715
+ );
716
+ $publisher_info['name'] = get_bloginfo('name');
717
+ $publisher_info['id'] = get_the_permalink();
718
+ $category_posts[] = array
719
+ (
720
+ '@type' => 'BlogPosting',
721
+ 'headline' => get_the_title(),
722
+ 'url' => get_the_permalink(),
723
+ 'datePublished' => get_the_date('c'),
724
+ 'dateModified' => get_the_modified_date('c'),
725
+ 'mainEntityOfPage' => get_the_permalink(),
726
+ 'author' => get_the_author(),
727
+ 'publisher' => $publisher_info,
728
+ 'image' => $image_details[0],
729
+ );
730
+
731
+ endwhile;
732
+
733
+ wp_reset_postdata();
734
+
735
+ $category = get_the_category();
736
+ $category_id = intval($category[0]->term_id);
737
+ $category_link = get_category_link( $category_id );
738
+ $category_link = get_term_link( $category[0]->term_id , 'category' );
739
+ $category_headline = single_cat_title( '', false ) . __(' Category', 'schema-wp');
740
+ $input = array
741
+ (
742
+ '@context' => 'http://schema.org/',
743
+ '@type' => "CollectionPage",
744
+ 'headline' => $category_headline,
745
+ 'description' => strip_tags(category_description()),
746
+ 'url' => $category_link,
747
+ 'sameAs' => '',
748
+ 'hasPart' => $category_posts
749
+ );
750
+ return json_encode($input);
751
+ endif;
752
+ }
753
+ }
754
+ }
755
+
756
+ // For Author
757
+ function saswp_author_output()
758
+ {
759
+ global $post, $sd_data;
760
+ if(isset($sd_data['saswp_archive_schema']) && $sd_data['saswp_archive_schema'] == 1){
761
+ $post_id = $post->ID;
762
+ if(is_author()){
763
+ // Get author from post content
764
+ $post_content = get_post($post_id);
765
+ $post_author = get_userdata($post_content->post_author);
766
+ $input = array (
767
+ '@type' => 'Person',
768
+ 'name' => get_the_author_meta('display_name'),
769
+ 'url' => esc_url( get_author_posts_url( $post_author->ID ) ),
770
+
771
+ );
772
+
773
+ $sd_website = esc_attr( stripslashes( get_the_author_meta( 'user_url', $post_author->ID ) ) );
774
+ $sd_googleplus = esc_attr( stripslashes( get_the_author_meta( 'googleplus', $post_author->ID ) ) );
775
+ $sd_facebook = esc_attr( stripslashes( get_the_author_meta( 'facebook', $post_author->ID) ) );
776
+ $sd_twitter = esc_attr( stripslashes( get_the_author_meta( 'twitter', $post_author->ID ) ) );
777
+ $sd_instagram = esc_attr( stripslashes( get_the_author_meta( 'instagram', $post_author->ID ) ) );
778
+ $sd_youtube = esc_attr( stripslashes( get_the_author_meta( 'youtube', $post_author->ID ) ) );
779
+ $sd_linkedin = esc_attr( stripslashes( get_the_author_meta( 'linkedin', $post_author->ID ) ) );
780
+ $sd_pinterest = esc_attr( stripslashes( get_the_author_meta( 'pinterest', $post_author->ID ) ) );
781
+ $sd_soundcloud = esc_attr( stripslashes( get_the_author_meta( 'soundcloud', $post_author->ID ) ) );
782
+ $sd_tumblr = esc_attr( stripslashes( get_the_author_meta( 'tumblr', $post_author->ID ) ) );
783
+
784
+ $sd_sameAs_links = array( $sd_website, $sd_googleplus, $sd_facebook, $sd_twitter, $sd_instagram, $sd_youtube, $sd_linkedin, $sd_pinterest, $sd_soundcloud, $sd_tumblr);
785
+
786
+ $sd_social = array();
787
+
788
+ // Remove empty fields
789
+ foreach( $sd_sameAs_links as $sd_sameAs_link ) {
790
+ if ( '' != $sd_sameAs_link ) $sd_social[] = $sd_sameAs_link;
791
+ }
792
+
793
+ if ( ! empty($sd_social) ) {
794
+ $input["sameAs"] = $sd_social;
795
+ }
796
+
797
+ if ( get_the_author_meta( 'description', $post_author->ID ) ) {
798
+ $input['description'] = strip_tags( get_the_author_meta( 'description', $post_author->ID ) );
799
+ }
800
+ return json_encode($input);
801
+ }
802
+ }
803
+ }
804
+
805
+ // For About Page
806
+ function saswp_about_page_output()
807
+ {
808
+ global $sd_data;
809
+ $image_id = get_post_thumbnail_id();
810
+ $image_details = wp_get_attachment_image_src($image_id, 'full');
811
+ if(isset($image_details['url'])){
812
+ $image_url = $image_details['url'];
813
+ }
814
+ $about_page = $sd_data['sd_about_page'];
815
+
816
+ if((isset($sd_data['sd_about_page'])) && $sd_data['sd_about_page'] == get_the_ID()){
817
+ $logo = $sd_data['sd_logo']['url'];
818
+ $height = $sd_data['sd_logo']['height'];
819
+ $width = $sd_data['sd_logo']['width'];
820
+
821
+ if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image'])){
822
+ $image_url = $sd_data['sd_default_image']['url'];
823
+ }
824
+
825
+ if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_height'])){
826
+ $height = $sd_data['sd_default_image_height'];
827
+ }
828
+
829
+ if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_width'])){
830
+ $width = $sd_data['sd_default_image_width'];
831
+ }
832
+ $input = array(
833
+ "@context" => "http://schema.org",
834
+ "@type" => "AboutPage",
835
+ "mainEntityOfPage" => array(
836
+ "@type" => "WebPage",
837
+ "@id" => get_permalink(),
838
+ ),
839
+ "url" => $about_page,
840
+ "headline" => get_the_title(),
841
+ "image" => array(
842
+ "@type" => "ImageObject",
843
+ "url" => $image_url,
844
+ "width" => $width,
845
+ "height" => $height,
846
+ ),
847
+ 'Publisher' => array(
848
+ '@type' => 'Organization',
849
+ 'logo' => array(
850
+ '@type' => 'ImageObject',
851
+ 'url' => $logo,
852
+ 'width' => $width,
853
+ 'height' => $height,
854
+ ),
855
+ 'name' => $sd_data['sd_name'],
856
+ ),
857
+ 'description' => get_the_excerpt(),
858
+ );
859
+
860
+ return json_encode($input);
861
+ }
862
+
863
+ }
864
+
865
+ // For Contact Page
866
+ function saswp_contact_page_output()
867
+ {
868
+ global $sd_data;
869
+ $image_id = get_post_thumbnail_id();
870
+ $image_details = wp_get_attachment_image_src($image_id, 'full');
871
+ if(isset($image_details['url'])){
872
+ $image_url = $image_details['url'];
873
+ }
874
+ $contact_page = $sd_data['sd_contact_page'];
875
+ if(isset($sd_data['sd_contact_page']) && $sd_data['sd_contact_page'] == get_the_ID()){
876
+
877
+ $logo = $sd_data['sd_logo']['url'];
878
+ $height = $sd_data['sd_logo']['height'];
879
+ $width = $sd_data['sd_logo']['width'];
880
+
881
+ if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image'])){
882
+ $image_url = $sd_data['sd_default_image']['url'];
883
+ }
884
+
885
+ if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_height'])){
886
+ $height = $sd_data['sd_default_image_height'];
887
+ }
888
+
889
+ if( '' == $image_details && empty($image_details) && isset($sd_data['sd_default_image_width'])){
890
+ $width = $sd_data['sd_default_image_width'];
891
+ }
892
+ $input = array(
893
+ "@context" => "http://schema.org",
894
+ "@type" => "ContactPage",
895
+ "mainEntityOfPage" => array(
896
+ "@type" => "WebPage",
897
+ "@id" => get_permalink(),
898
+ ),
899
+ "url" => $contact_page,
900
+ "headline" => get_the_title(),
901
+ "image" => array(
902
+ "@type" => "ImageObject",
903
+ "url" => $image_url,
904
+ "width" => $width,
905
+ "height" => $height,
906
+ ),
907
+ 'Publisher' => array(
908
+ '@type' => 'Organization',
909
+ 'logo' => array(
910
+ '@type' => 'ImageObject',
911
+ 'url' => $logo,
912
+ 'width' => $width,
913
+ 'height' => $height,
914
+ ),
915
+ 'name' => $sd_data['sd_name'],
916
+ ),
917
+ 'description' => get_the_excerpt(),
918
+ );
919
+
920
+ return json_encode($input);
921
+
922
+ }
923
+
924
  }
readme.txt CHANGED
@@ -1,71 +1,87 @@
1
- === Schema and Structured Data for WP & AMP ===
2
- Contributors: mohammed_kaludi, ahmedkaludi, ampforwp
3
- Tags: Schema, Structured Data, Google Snippets, Rich Snippets, Schema.org, SEO, AMP
4
- Requires at least: 3.0
5
- Tested up to: 4.9.8
6
- Stable tag: 1.0.1
7
- License: GPLv2 or later
8
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
-
10
-
11
- == Description ==
12
- Schema & Structured Data adds Google Rich Snippets markup according to Schema.org guidelines to structure your site for SEO. (AMP Compatible)
13
-
14
- = Features =
15
- * <strong>Schema Types</strong>: are divided into 7 types such as Blog Posting, News article, Web page, Article, Recipe, Product, and Video Object. We are going to add all the schema types in the future. You can request the one you want and we will add it for you!
16
- * <strong>Conditional Display Feilds</strong>: Meaning you include or exclude any posts, pages, post types, taxonomies and more!
17
- * <strong>Knowlegde Base Support</strong>: Recognize the content based on the organization or a person via data type option.
18
- * <strong>Full AMP Compatiblity</strong>: Supports the AMP for WP and AMP by Automattic plugins.
19
- * <strong>Unlimited Custom Post Types</strong>: You can control to represent the Rich Snippets data in the google search console using unlimited custom post types.
20
- * <strong>Easy to use</strong> with Minimal Settings
21
- * <strong>Archive Page Listing</strong> Support
22
- * <strong>JSON-LD</strong> Format
23
- * <strong>Breadcrumbs</strong> Listing Support
24
- * <strong>Constant Development & New Features</strong>: We’ll be releasing the constant updates along with the more handy features as soon as we get the feedback from the users.
25
- * <strong>Constant Development & New Features</strong>: We’ll be releasing the constant updates along with the more handy features as soon as we get the feedback from the users.
26
-
27
- = Supported Schema & Structured Data Types: =
28
- * BlogPosting Schema
29
- * News Article Schema
30
- * WebPage Schema
31
- * NewsArticle Schema
32
- * Recipe Schema
33
- * Product Schema
34
- * VideoObject Schema
35
-
36
- **We Act Fast on Feedback!**
37
- We are actively developing this plugin and our aim is to make this plugin into the #1 solution for Schema and Google Structured Data in the world. You can [Request a Feature](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp/issues) or [Report a Bug](http://magazine3.company/contact/).
38
-
39
- **Technical Support**
40
- Support is provided in [Forum](https://wordpress.org/support/plugin/schema-and-structured-data-for-wp). You can also [Contact us](http://magazine3.company/contact/), our turn around time on email is around 12 hours.
41
-
42
- **Would you like to contribute?**
43
- You may now contribute to this Schema plugin on Github: [View repository](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp) on Github
44
-
45
- == Frequently Asked Questions ==
46
-
47
- = How to install and use this Schema plugin? =
48
-
49
- After you Active this plugin, just go to Dashboard > Structured data > Settings, and then setup the default settings, after that, just go back to 'Structured Data' click on Add New and add any data that you like!
50
-
51
- = How do I report bugs and suggest new features? =
52
-
53
- You can report the bugs for this Schema plugin [here](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp/issues)
54
-
55
- = Will you include features to my request? =
56
-
57
- Yes, Absolutely! We would suggest you send your feature request by creating an issue in [Github](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp/issues/new/) . It helps us organize the feedback easily.
58
-
59
-
60
- = How do I get in touch? =
61
- You can contact us from [here](https://ampforwp.com/contact/)
62
-
63
- == Changelog ==
64
-
65
- = 1.0.1 (27 August 2018) =
66
- * AMP Compatibility improved for Schema
67
- * Default Schema compatibility added, which means the posts and pages will be set by default.
68
- * Minor bugs fixed
69
-
70
- = 1.0 (6 August 2018) =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
  * Version 1.0 Released
1
+ === Schema & Structured Data for WP & AMP ===
2
+ Contributors: mohammed_kaludi, ahmedkaludi, ampforwp
3
+ Tags: Schema, Structured Data, Google Snippets, Rich Snippets, Schema.org, SEO, AMP
4
+ Requires at least: 3.0
5
+ Tested up to: 4.9.8
6
+ Stable tag: 1.0.2
7
+ License: GPLv2 or later
8
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
+
10
+
11
+ == Description ==
12
+ Schema & Structured Data adds Google Rich Snippets markup according to Schema.org guidelines to structure your site for SEO. (AMP Compatible)
13
+
14
+ = Features =
15
+
16
+ * <strong>Schema Types</strong>: are divided into 8 types such as Blog Posting, News article, Local Business, Web page, Article, Recipe, Product, and Video Object. We are going to add all the schema types in the future. You can request the one you want and we will add it for you!
17
+ * <strong>Conditional Display Feilds</strong>: Meaning you include or exclude any posts, pages, post types, taxonomies and more!
18
+ * <strong>Knowlegde Base Support</strong>: Recognize the content based on the organization or a person via data type option.
19
+ * <strong>Full AMP Compatiblity</strong>: Supports the AMP for WP and AMP by Automattic plugins.
20
+ * <strong>Unlimited Custom Post Types</strong>: You can control to represent the Rich Snippets data in the google search console using unlimited custom post types.
21
+ * <strong>Easy to use</strong> with Minimal Settings
22
+ * <strong>Archive Page Listing</strong> Support
23
+ * <strong>JSON-LD</strong> Format
24
+ * <strong>Easy to use</strong> Setup Wizard
25
+ * <strong>Breadcrumbs</strong> Listing Support
26
+ * <strong>Constant Development & New Features</strong>: We’ll be releasing the constant updates along with the more handy features as soon as we get the feedback from the users.
27
+ * <strong>Constant Development & New Features</strong>: We’ll be releasing the constant updates along with the more handy features as soon as we get the feedback from the users.
28
+
29
+ = Supported Schema & Structured Data Types: =
30
+ * LocalBusiness Schema with all the sub categories
31
+ * BlogPosting Schema
32
+ * News Article Schema
33
+ * WebPage Schema
34
+ * NewsArticle Schema
35
+ * Recipe Schema
36
+ * Product Schema
37
+ * VideoObject Schema
38
+
39
+ **We Act Fast on Feedback!**
40
+ We are actively developing this plugin and our aim is to make this plugin into the #1 solution for Schema and Google Structured Data in the world. You can [Request a Feature](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp/issues) or [Report a Bug](http://magazine3.company/contact/).
41
+
42
+ **Technical Support**
43
+ Support is provided in [Forum](https://wordpress.org/support/plugin/schema-and-structured-data-for-wp). You can also [Contact us](http://magazine3.company/contact/), our turn around time on email is around 12 hours.
44
+
45
+ **Would you like to contribute?**
46
+ You may now contribute to this Schema plugin on Github: [View repository](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp) on Github
47
+
48
+ == Frequently Asked Questions ==
49
+
50
+ = How to install and use this Schema plugin? =
51
+
52
+ After you Active this plugin, just go to Dashboard > Structured data > Settings, and then setup the default settings, after that, just go back to 'Structured Data' click on Add New and add any data that you like!
53
+
54
+ = How do I report bugs and suggest new features? =
55
+
56
+ You can report the bugs for this Schema plugin [here](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp/issues)
57
+
58
+ = Will you include features to my request? =
59
+
60
+ Yes, Absolutely! We would suggest you send your feature request by creating an issue in [Github](https://github.com/ahmedkaludi/schema-and-structured-data-for-wp/issues/new/) . It helps us organize the feedback easily.
61
+
62
+
63
+ = How do I get in touch? =
64
+ You can contact us from [here](http://structured-data-for-wp.com/contact-us/)
65
+
66
+ == Changelog ==
67
+
68
+ = 1.0.2 (28 August 2018) =
69
+ * First Time Installation Setup Wizard
70
+ * Added a Support form to provide faster support
71
+ * Full Local Business Schema Markup Support
72
+ * Schema Press Migrator - You can easy switch from Schema Press plugin with just one-click.
73
+ * Moved the options panel to the bottom for better UX
74
+ * Asks for review after a week.
75
+ * Shows Schema type next to the name of the post
76
+ * Knowledge Graph typo
77
+ * Debug errors
78
+ * Date format has been fixed via PR. Thanks to @thetoine
79
+ * minor Bugs Fixed
80
+
81
+ = 1.0.1 (27 August 2018) =
82
+ * AMP Compatibility improved for Schema
83
+ * Default Schema compatibility added, which means the posts and pages will be set by default.
84
+ * Minor bugs fixed
85
+
86
+ = 1.0 (6 August 2018) =
87
  * Version 1.0 Released
structured-data-for-wp.php CHANGED
@@ -1,50 +1,124 @@
1
- <?php
2
- /*
3
- Plugin Name: Schema and Structured Data for WP
4
- Description: Schema & Structured Data adds Google Rich Snippets markup according to Schema.org guidelines to structure your site for SEO. (AMP Compatible)
5
- Version: 1.0.1
6
- Text Domain: schema-and-structured-data-for-wp
7
- Author: Mohammed Kaludi, Ahmed Kaludi
8
- Author URI: http://structured-data-for-wp.com/
9
- Donate link: https://www.paypal.me/Kaludi/25
10
- License: GPL2
11
- */
12
-
13
- // Exit if accessed directly.
14
- if ( ! defined( 'ABSPATH' ) ) exit;
15
-
16
- define('SASWP_VERSION', '1.0.1');
17
- define('SASWP_DIR_NAME', dirname( __FILE__ ));
18
-
19
- if ( ! defined( 'SASWP_VERSION' ) ) {
20
- define( 'SASWP_VERSION', '1.0.1' );
21
- }
22
- // the name of the settings page for the license input to be displayed
23
- if(! defined('SASWP_ITEM_FOLDER_NAME')){
24
- $folderName = basename(__DIR__);
25
- define( 'SASWP_ITEM_FOLDER_NAME', $folderName );
26
- }
27
- define('SASWP_PLUGIN_URL', plugin_dir_url( __FILE__ ));
28
-
29
- // including the output file
30
- require_once SASWP_DIR_NAME .'/output/function.php';
31
- require_once SASWP_DIR_NAME .'/output/output.php';
32
-
33
- // Non amp checker
34
- if ( ! function_exists('saswp_non_amp') ){
35
- function saswp_non_amp(){
36
- $non_amp = true;
37
- if(function_exists('ampforwp_is_amp_endpoint') && ampforwp_is_amp_endpoint() ) {
38
- $non_amp = false;
39
- }
40
- return $non_amp;
41
- }
42
- }
43
- // Schema App end here
44
- require_once SASWP_DIR_NAME.'/admin_section/structure_admin.php';
45
- require_once SASWP_DIR_NAME.'/admin_section/settings.php';
46
- require_once SASWP_DIR_NAME.'/admin_section/common-function.php';
47
- require_once SASWP_DIR_NAME.'/admin_section/fields-generator.php';
48
- require_once SASWP_DIR_NAME.'/admin_section/newsletter.php';
49
- //Loading Metaboxes
50
- require SASWP_DIR_NAME.'/metaboxes/help.php';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: Schema & Structured Data for WP
4
+ Description: Schema & Structured Data adds Google Rich Snippets markup according to Schema.org guidelines to structure your site for SEO. (AMP Compatible)
5
+ Version: 1.0.2
6
+ Text Domain: schema-and-structured-data-for-wp
7
+ Author: Mohammed Kaludi, Ahmed Kaludi
8
+ Author URI: http://structured-data-for-wp.com/
9
+ Donate link: https://www.paypal.me/Kaludi/25
10
+ License: GPL2
11
+ */
12
+
13
+ // Exit if accessed directly.
14
+ if ( ! defined( 'ABSPATH' ) ) exit;
15
+
16
+ define('SASWP_VERSION', '1.0.2');
17
+ define('SASWP_DIR_NAME_FILE', __FILE__ );
18
+ define('SASWP_DIR_NAME', dirname( __FILE__ ));
19
+ define('SASWP_DIR_URI', plugin_dir_url(__FILE__));
20
+
21
+ if ( ! defined( 'SASWP_VERSION' ) ) {
22
+ define( 'SASWP_VERSION', '1.0.2' );
23
+ }
24
+ // the name of the settings page for the license input to be displayed
25
+ if(! defined('SASWP_ITEM_FOLDER_NAME')){
26
+ $folderName = basename(__DIR__);
27
+ define( 'SASWP_ITEM_FOLDER_NAME', $folderName );
28
+ }
29
+ define('SASWP_PLUGIN_URL', plugin_dir_url( __FILE__ ));
30
+
31
+ // including the output file
32
+ require_once SASWP_DIR_NAME .'/output/function.php';
33
+ require_once SASWP_DIR_NAME .'/output/output.php';
34
+
35
+ // Non amp checker
36
+ if ( ! function_exists('saswp_non_amp') ){
37
+ function saswp_non_amp(){
38
+ $non_amp = true;
39
+ if(function_exists('ampforwp_is_amp_endpoint') && ampforwp_is_amp_endpoint() ) {
40
+ $non_amp = false;
41
+ }
42
+ return $non_amp;
43
+ }
44
+ }
45
+ // Schema App end here
46
+ require_once SASWP_DIR_NAME.'/admin_section/structure_admin.php';
47
+ require_once SASWP_DIR_NAME.'/admin_section/settings.php';
48
+ require_once SASWP_DIR_NAME.'/admin_section/common-function.php';
49
+ require_once SASWP_DIR_NAME.'/admin_section/fields-generator.php';
50
+ require_once SASWP_DIR_NAME.'/admin_section/newsletter.php';
51
+ require_once SASWP_DIR_NAME.'/admin_section/plugin-installer/install.php';
52
+ //Loading Metaboxes
53
+ require_once SASWP_DIR_NAME.'/view/help.php';
54
+ require_once SASWP_DIR_NAME.'/view/schema_type.php';
55
+ require_once SASWP_DIR_NAME.'/view/paywall.php';
56
+ require_once SASWP_DIR_NAME.'/admin_section/add-schema/add_new.php';
57
+
58
+
59
+ /**
60
+ * set user defined message on plugin activate
61
+ */
62
+ register_activation_hook( __FILE__, 'saswp_admin_notice_activation_hook' );
63
+ function saswp_admin_notice_activation_hook() {
64
+ set_transient( 'saswp_admin_notice_transient', true, 5 );
65
+ update_option( "saswp_activation_date", date("Y-m-d"));
66
+ }
67
+ add_action( 'admin_notices', 'saswp_admin_notice' );
68
+
69
+ function saswp_admin_notice(){
70
+ ?>
71
+ <div class="updated notice is-dismissible message notice notice-alt saswp-setup-notice saswp_hide">
72
+ <p><span class="dashicons dashicons-thumbs-up"></span> <?php echo esc_html__('Thank you for using Schema & Structured Data For WP plugin!', 'schema-and-structured-data-for-wp') ?>
73
+ <a href="<?php echo esc_url( admin_url( 'plugins.php?page=saswp-setup-wizard' ) ); ?>"> <?php echo esc_html__('Start Quick Setup', 'schema-and-structured-data-for-wp') ?></a>
74
+ </p>
75
+ </div>
76
+
77
+ <div class="updated notice is-dismissible message notice notice-alt saswp-feedback-notice saswp_hide">
78
+ <p><span class="dashicons dashicons-feedback"></span> <?php echo esc_html__('You have been using the Schema & structured data for wp plugin for some time now, do you like it?, If so,', 'schema-and-structured-data-for-wp') ?>
79
+ <a target="_blank" href="https://wordpress.org/plugins/schema-and-structured-data-for-wp"> <?php echo esc_html__('please write us a review', 'schema-and-structured-data-for-wp') ?></a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="saswp-feedback-no-thanks button button-primary"><?php echo esc_html__('No Thanks', 'schema-and-structured-data-for-wp') ?></a>
80
+ </p>
81
+ </div>
82
+ <?php
83
+ /* Check transient, if available display notice */
84
+ if( get_transient( 'saswp_admin_notice_transient' ) ){
85
+ ?>
86
+ <script type="text/javascript">
87
+ jQuery(document).ready( function($) {
88
+ $(".saswp-setup-notice").show();
89
+ });
90
+ </script>
91
+ <?php
92
+ /* Delete transient, only display this notice once. */
93
+ delete_transient( 'saswp_admin_notice_transient' );
94
+ }
95
+ $current_screen = get_Current_screen();
96
+ $post_type = get_post_type();
97
+ $sd_data = get_option('sd_data');
98
+ if(($post_type == 'saswp' || $current_screen->id =='saswp_page_structured_data_options') && !isset($sd_data['sd_initial_wizard_status'])){
99
+ ?>
100
+ <script type="text/javascript">
101
+ jQuery(document).ready( function($) {
102
+ $(".saswp-setup-notice").show();
103
+ $(".saswp-start-quck-setup").hide();
104
+ });
105
+ </script>
106
+ <?php
107
+ }
108
+
109
+ //Feedback notice
110
+ $activation_date = get_option("saswp_activation_date");
111
+ $next_days = strtotime("+30 day", strtotime($activation_date));
112
+ $next_days = date('Y-m-d', $next_days);
113
+ $current_date = date("Y-m-d");
114
+
115
+ if($next_days < $current_date){
116
+ ?>
117
+ <script type="text/javascript">
118
+ jQuery(document).ready( function($) {
119
+ $(".saswp-feedback-notice").show();
120
+ });
121
+ </script>
122
+ <?php
123
+ }
124
+ }
view/help.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * To change this license header, choose License Headers in Project Properties.
4
+ * To change this template file, choose Tools | Templates
5
+ * and open the template in the editor.
6
+ */
7
+ add_action( 'add_meta_boxes', 'saswp_help_meta_box' );
8
+ function saswp_help_meta_box()
9
+ {
10
+ add_meta_box( 'saswp_help_meta_box_id',
11
+ esc_html__('Help', 'schema-and-structured-data-for-wp' ),
12
+ 'saswp_help_meta_box_cb',
13
+ 'saswp',
14
+ 'side', 'low'
15
+ );
16
+ }
17
+
18
+ function saswp_help_meta_box_cb()
19
+ {
20
+ echo '<a href="admin.php?page=structured_data_options&tab=help">'.esc_html__('Need Help', 'schema-and-structured-data-for-wp').'</a>';
21
+ }
22
+
23
+ /**
24
+ * Remove Add new menu
25
+ **/
26
+ function saswp_disable_new_posts() {
27
+ // Hide sidebar link
28
+ global $submenu;
29
+ unset($submenu['edit.php?post_type=saswp'][10]);
30
+
31
+ // Hide link on listing page
32
+ if (isset($_GET['post_type']) && $_GET['post_type'] == 'saswp') {
33
+ return '<style type="text/css">
34
+ #favorite-actions, .add-new-h2, .tablenav { display:none; }
35
+ </style>';
36
+ }
37
+ }
38
+ add_action('admin_menu', 'saswp_disable_new_posts');
39
+
40
+
41
+ add_action('admin_head-edit.php','saswp_addCustomImportButton');
42
+ function saswp_addCustomImportButton()
43
+ {
44
+ global $current_screen;
45
+
46
+ // Not our post type, exit earlier
47
+ // You can remove this if condition if you don't have any specific post type to restrict to.
48
+ if ('saswp' != $current_screen->post_type) {
49
+ return;
50
+ }
51
+
52
+ ?>
53
+ <script type="text/javascript">
54
+ jQuery(document).ready( function($)
55
+ {
56
+ jQuery(jQuery(".wrap a")[0]).after("<a href='<?php echo esc_url(admin_url('edit.php?post_type=saswp&page=structured_data_options')) ?>' id='' class='page-title-action'>Settings</a>");
57
+ });
58
+ </script>
59
+ <?php
60
+ }
61
+
view/paywall.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ add_action( 'add_meta_boxes', 'saswp_schema_options_add_meta_box' ) ;
3
+ add_action( 'save_post', 'saswp_schema_options_add_meta_box_save' ) ;
4
+
5
+ function saswp_schema_options_add_meta_box() {
6
+ add_meta_box(
7
+ 'schema_options',
8
+ esc_html__( 'Advance Schema Options', 'ads-for-wp' ),
9
+ 'saswp_schema_options_meta_box_callback',
10
+ 'saswp',
11
+ 'advanced',
12
+ 'low'
13
+ );
14
+ }
15
+ function saswp_schema_options_get_meta( $value ) {
16
+ global $post;
17
+
18
+ $field = get_post_meta( $post->ID, $value, true );
19
+
20
+ if ( ! empty( $field ) ) {
21
+ return is_array( $field ) ? stripslashes_deep( $field ) : stripslashes( wp_kses_decode_entities( $field ) );
22
+ } else {
23
+ return false;
24
+ }
25
+ }
26
+ function saswp_schema_options_meta_box_callback( $post) {
27
+ wp_nonce_field( 'saswp_schema_options_nonce', 'saswp_schema_options_nonce' );
28
+ $schema_options = esc_sql ( get_post_meta($post->ID, 'schema_options', true) );
29
+ ?>
30
+ <style type="text/css">
31
+ .option-table-class{width:100%;}
32
+ .option-table-class tr td {padding: 10px 10px 10px 10px ;}
33
+ .option-table-class tr > td{width: 30%;}
34
+ .option-table-class tr td:last-child{width: 60%;}
35
+ .option-table-class input[type="text"], select{width:100%;}
36
+ </style>
37
+ <div class="misc-pub-section">
38
+ <table class="option-table-class">
39
+ <tbody>
40
+ <tr>
41
+ <td><label for="notAccessibleForFree"><?php echo esc_html__( 'Paywall', 'schema-and-structured-data-for-wp' ) ?></label></td>
42
+ <td><input type="checkbox" id="notAccessibleForFree" name="notAccessibleForFree" value="1" <?php if(isset($schema_options['notAccessibleForFree']) && $schema_options['notAccessibleForFree']==1){echo 'checked'; }?>>
43
+ </td>
44
+ </tr>
45
+ <tr <?php if(!isset($schema_options['notAccessibleForFree']) || $schema_options['notAccessibleForFree']!=1){echo 'style="display:none"'; }?>>
46
+ <td><label for="isAccessibleForFree"><?php echo esc_html__( 'Is accessible for free', 'schema-and-structured-data-for-wp' ) ?></label></td>
47
+ <td>
48
+ <select name="isAccessibleForFree" id="isAccessibleForFree">
49
+ <option value="False" <?php if( isset($schema_options['isAccessibleForFree']) && $schema_options['isAccessibleForFree']=='False'){echo 'selected'; }?>><?php echo esc_html__( 'False', 'schema-and-structured-data-for-wp' ); ?></option>
50
+ <option value="True" <?php if( isset($schema_options['isAccessibleForFree']) && $schema_options['isAccessibleForFree']=='True'){echo 'selected'; }?>><?php echo esc_html__( 'True', 'schema-and-structured-data-for-wp' ); ?></option>
51
+ </select>
52
+ </td>
53
+ </tr>
54
+ <tr <?php if(!isset($schema_options['notAccessibleForFree']) || $schema_options['notAccessibleForFree']!=1){echo 'style="display:none"'; }?>>
55
+ <td>
56
+ <label for="paywall_class_name"><?php echo esc_html__( 'Enter the class name of paywall section', 'schema-and-structured-data-for-wp' ); ?></label>
57
+ </td>
58
+ <td><input type="text" id="paywall_class_name" name="paywall_class_name" value="<?php if( isset($schema_options['paywall_class_name']) ){echo esc_attr($schema_options['paywall_class_name']); }?>"></td>
59
+ </tr>
60
+ </tbody>
61
+ </table>
62
+
63
+ </div>
64
+ <?php
65
+ }
66
+
67
+ function saswp_schema_options_add_meta_box_save( $post_id ) {
68
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
69
+ if ( ! isset( $_POST['saswp_schema_options_nonce'] ) || ! wp_verify_nonce( $_POST['saswp_schema_options_nonce'], 'saswp_schema_options_nonce' ) ) return;
70
+ if ( ! current_user_can( 'edit_post', $post_id ) ) return;
71
+
72
+ $notAccessibleForFree ='';
73
+ $isAccessibleForFree ='';
74
+ $paywall_class_name ='';
75
+ if ( isset( $_POST['notAccessibleForFree'] ) )
76
+ $notAccessibleForFree = $_POST['notAccessibleForFree'];
77
+ if ( isset( $_POST['isAccessibleForFree'] ) )
78
+ $isAccessibleForFree = $_POST['isAccessibleForFree'];
79
+ if ( isset( $_POST['paywall_class_name'] ) )
80
+ $paywall_class_name = $_POST['paywall_class_name'];
81
+
82
+ $saswp_schema_options = array('isAccessibleForFree'=>$isAccessibleForFree,'notAccessibleForFree'=>$notAccessibleForFree,'paywall_class_name'=>$paywall_class_name);
83
+ update_post_meta( $post_id, 'schema_options', $saswp_schema_options);
84
+
85
+
86
+ }
87
+
88
+
view/schema_type.php ADDED
@@ -0,0 +1,592 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ add_action( 'add_meta_boxes', 'saswp_schema_type_add_meta_box' ) ;
3
+ add_action( 'save_post', 'saswp_schema_type_add_meta_box_save' ) ;
4
+
5
+ function saswp_schema_type_add_meta_box() {
6
+ add_meta_box(
7
+ 'schema_type',
8
+ esc_html__( 'Schema Type', 'ads-for-wp' ),
9
+ 'saswp_schema_type_meta_box_callback',
10
+ 'saswp',
11
+ 'advanced',
12
+ 'high'
13
+ );
14
+ }
15
+ function saswp_schema_type_get_meta( $value ) {
16
+ global $post;
17
+
18
+ $field = get_post_meta( $post->ID, $value, true );
19
+
20
+ if ( ! empty( $field ) ) {
21
+ return is_array( $field ) ? stripslashes_deep( $field ) : stripslashes( wp_kses_decode_entities( $field ) );
22
+ } else {
23
+ return false;
24
+ }
25
+ }
26
+ function saswp_schema_type_meta_box_callback( $post) {
27
+ wp_nonce_field( 'saswp_schema_type_nonce', 'saswp_schema_type_nonce' );
28
+ $style_business_type ='';
29
+ $style_business_name ='';
30
+ $business_name ='';
31
+ $schema_type ='';
32
+ $business_type ='';
33
+ $business_details ='';
34
+ if($post){
35
+ $schema_type = esc_sql ( get_post_meta($post->ID, 'schema_type', true) );
36
+ $business_type = esc_sql ( get_post_meta($post->ID, 'saswp_business_type', true) );
37
+ $business_name = esc_sql ( get_post_meta($post->ID, 'saswp_business_name', true) );
38
+ $business_details = esc_sql ( get_post_meta($post->ID, 'saswp_local_business_details', true) );
39
+
40
+ $custom_logo_id = get_theme_mod( 'custom_logo' );
41
+ $logo = wp_get_attachment_image_src( $custom_logo_id , 'full' );
42
+
43
+ if($schema_type != 'local_business'){
44
+ $style_business_type = 'style="display:none"';
45
+ $style_business_name = 'style="display:none"';
46
+ }
47
+ }
48
+
49
+ $all_dayofweek_array = array(
50
+ 'monday' => 'Monday',
51
+ 'tuesday' => 'Tuesday',
52
+ 'wednesday' => 'Wednesday',
53
+ 'thursday' => 'Thursday',
54
+ 'friday' => 'Friday',
55
+ 'staturday' => 'Staturday',
56
+ 'sunday' => 'Sunday',
57
+ );
58
+
59
+
60
+ $all_schema_array = array(
61
+ 'Blogposting' => 'Blogposting',
62
+ 'NewsArticle' => 'NewsArticle',
63
+ 'WebPage' => 'WebPage',
64
+ 'Article' => 'Article',
65
+ 'Recipe' => 'Recipe',
66
+ 'Product' => 'Product',
67
+ 'VideoObject' => 'VideoObject',
68
+ 'local_business' => 'Local Business'
69
+ );
70
+ $all_business_type = array(
71
+ 'animalshelter' => 'AnimalShelter',
72
+ 'automotivebusiness' => 'AutomotiveBusiness',
73
+ 'childcare' => 'ChildCare',
74
+ 'dentist' => 'Dentist',
75
+ 'drycleaningorlaundry' => 'DryCleaningOrLaundry',
76
+ 'emergencyservice' => 'EmergencyService',
77
+ 'employmentagency' => 'EmploymentAgency',
78
+ 'entertainmentbusiness' => 'EntertainmentBusiness',
79
+ 'financialservice' => 'FinancialService',
80
+ 'foodestablishment' => 'FoodEstablishment',
81
+ 'governmentoffice' => 'GovernmentOffice',
82
+ 'healthandbeautybusiness' => 'HealthAndBeautyBusiness',
83
+ 'homeandconstructionbusiness' => 'HomeAndConstructionBusiness',
84
+ 'internetcafe' => 'InternetCafe',
85
+ 'legalservice' => 'LegalService',
86
+ 'library' => 'Library',
87
+ 'lodgingbusiness' => 'LodgingBusiness',
88
+ 'professionalservice' => 'ProfessionalService',
89
+ 'radiostation' => 'RadioStation',
90
+ 'realestateagent' => 'RealEstateAgent',
91
+ 'recyclingcenter' => 'RecyclingCenter',
92
+ 'selfstorage' => 'SelfStorage',
93
+ 'shoppingcenter' => 'ShoppingCenter',
94
+ 'sportsactivitylocation' => 'SportsActivityLocation',
95
+ 'store' => 'Store',
96
+ 'televisionstation' => 'TelevisionStation',
97
+ 'touristinformationcenter' => 'TouristInformationCenter',
98
+ 'travelagency' => 'TravelAgency',
99
+ );
100
+
101
+ $all_automotive_array = array(
102
+ 'autobodyshop' => 'AutoBodyShop',
103
+ 'autodealer' => 'AutoDealer',
104
+ 'autopartsstore' => 'AutoPartsStore',
105
+ 'autorental' => 'AutoRental',
106
+ 'autorepair' => 'AutoRepair',
107
+ 'autowash' => 'AutoWash',
108
+ 'gasstation' => 'GasStation',
109
+ 'motorcycledealer' => 'MotorcycleDealer',
110
+ 'motorcyclerepair' => 'MotorcycleRepair'
111
+ );
112
+
113
+ $all_emergency_array = array(
114
+ 'firestation' => 'FireStation',
115
+ 'hospital' => 'Hospital',
116
+ 'policestation' => 'PoliceStation',
117
+ );
118
+ $all_entertainment_array = array(
119
+ 'adultentertainment' => 'AdultEntertainment',
120
+ 'amusementpark' => 'AmusementPark',
121
+ 'artgallery' => 'ArtGallery',
122
+ 'casino' => 'Casino',
123
+ 'comedyclub' => 'ComedyClub',
124
+ 'movietheater' => 'MovieTheater',
125
+ 'nightclub' => 'NightClub',
126
+
127
+ );
128
+ $all_financial_array = array(
129
+ 'accountingservice' => 'AccountingService',
130
+ 'automatedteller' => 'AutomatedTeller',
131
+ 'bankorcredit_union' => 'BankOrCreditUnion',
132
+ 'insuranceagency' => 'InsuranceAgency',
133
+
134
+ );
135
+
136
+ $all_food_establishment_array = array(
137
+ 'bakery' => 'Bakery',
138
+ 'barorpub' => 'BarOrPub',
139
+ 'brewery' => 'Brewery',
140
+ 'cafeorcoffee_shop' => 'CafeOrCoffeeShop',
141
+ 'fastfoodrestaurant' => 'FastFoodRestaurant',
142
+ 'icecreamshop' => 'IceCreamShop',
143
+ 'restaurant' => 'Restaurant',
144
+ 'winery' => 'Winery',
145
+
146
+ );
147
+ $all_health_and_beauty_array = array(
148
+ 'beautysalon' => 'BeautySalon',
149
+ 'dayspa' => 'DaySpa',
150
+ 'hairsalon' => 'HairSalon',
151
+ 'healthclub' => 'HealthClub',
152
+ 'nailsalon' => 'NailSalon',
153
+ 'tattooparlor' => 'TattooParlor',
154
+ );
155
+
156
+ $all_home_and_construction_array = array(
157
+ 'electrician' => 'Electrician',
158
+ 'generalcontractor' => 'GeneralContractor',
159
+ 'hvacbusiness' => 'HVACBusiness',
160
+ 'locksmith' => 'Locksmith',
161
+ 'movingcompany' => 'MovingCompany',
162
+ 'plumber' => 'Plumber',
163
+ 'roofingcontractor' => 'RoofingContractor',
164
+ );
165
+
166
+ $all_legal_service_array = array(
167
+ 'attorney' => 'Attorney',
168
+ 'notary' => 'Notary',
169
+ );
170
+
171
+ $all_lodging_array = array(
172
+ 'bedandbreakfast' => 'BedAndBreakfast',
173
+ 'campground' => 'Campground',
174
+ 'hostel' => 'Hostel',
175
+ 'hotel' => 'Hotel',
176
+ 'motel' => 'Motel',
177
+ 'resort' => 'Resort',
178
+ );
179
+
180
+ $all_sports_activity_location = array(
181
+ 'bowlingalley' => 'BowlingAlley',
182
+ 'exercisegym' => 'ExerciseGym',
183
+ 'golfcourse' => 'GolfCourse',
184
+ 'healthclub' => 'HealthClub',
185
+ 'publicswimming_pool' => 'PublicSwimmingPool',
186
+ 'skiresort' => 'SkiResort',
187
+ 'sportsclub' => 'SportsClub',
188
+ 'stadiumorarena' => 'StadiumOrArena',
189
+ 'tenniscomplex' => 'TennisComplex'
190
+ );
191
+ $all_store = array(
192
+ 'autopartsstore'=>'AutoPartsStore',
193
+ 'bikestore'=>'BikeStore',
194
+ 'bookstore'=>'BookStore',
195
+ 'clothingstore'=>'ClothingStore',
196
+ 'computerstore'=>'ComputerStore',
197
+ 'conveniencestore'=>'ConvenienceStore',
198
+ 'departmentstore'=>'DepartmentStore',
199
+ 'electronicsstore'=>'ElectronicsStore',
200
+ 'florist'=>'Florist',
201
+ 'furniturestore'=>'FurnitureStore',
202
+ 'gardenstore'=>'GardenStore',
203
+ 'grocerystore'=>'GroceryStore',
204
+ 'hardwarestore'=>'HardwareStore',
205
+ 'hobbyshop'=>'HobbyShop',
206
+ 'homegoodsstore'=>'HomeGoodsStore',
207
+ 'jewelrystore'=>'JewelryStore',
208
+ 'liquorstore'=>'LiquorStore',
209
+ 'mensclothingstore'=>'MensClothingStore',
210
+ 'mobilephonestore'=>'MobilePhoneStore',
211
+ 'movierentalstore'=>'MovieRentalStore',
212
+ 'musicstore'=>'MusicStore',
213
+ 'officeequipmentstore'=>'OfficeEquipmentStore',
214
+ 'outletstore'=>'OutletStore',
215
+ 'pawnshop'=>'PawnShop',
216
+ 'petstore'=>'PetStore',
217
+ 'shoestore'=>'ShoeStore',
218
+ 'sportinggoodsstore'=>'SportingGoodsStore',
219
+ 'tireshop'=>'TireShop',
220
+ 'toystore'=>'ToyStore',
221
+ 'wholesalestore'=>'WholesaleStore'
222
+ );
223
+ ?>
224
+ <div class="misc-pub-section">
225
+ <table class="option-table-class saswp-option-table-class">
226
+ <tr>
227
+ <td><label for="schema_type"><?php echo esc_html__( 'Schema Type' ,'schema-and-structured-data-for-wp');?></label></td>
228
+ <td><select class="saswp-schame-type-select" id="schema_type" name="schema_type">
229
+ <?php
230
+
231
+ foreach ($all_schema_array as $key => $value) {
232
+ $sel = '';
233
+ if($schema_type==$key){
234
+ $sel = 'selected';
235
+ }
236
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
237
+ }
238
+ ?>
239
+ </select>
240
+ </td>
241
+ </tr>
242
+ <tr class="saswp-business-type-tr" <?php echo $style_business_type; ?>>
243
+ <td>
244
+ <?php echo esc_html__('Business Type', 'schema-and-structured-data-for-wp' ); ?>
245
+ </td>
246
+ <td>
247
+ <select id="saswp_business_type" name="saswp_business_type">
248
+ <?php
249
+
250
+
251
+ foreach ($all_business_type as $key => $value) {
252
+ $sel = '';
253
+ if($business_type==$key){
254
+ $sel = 'selected';
255
+ }
256
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
257
+ }
258
+ ?>
259
+ </select>
260
+ </td>
261
+ </tr>
262
+ <tr class="saswp-automotivebusiness-tr" <?php if(!array_key_exists($business_name, $all_automotive_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
263
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
264
+ <td>
265
+ <select id="saswp_automotive" name="saswp_business_name">
266
+ <?php
267
+
268
+ foreach ($all_automotive_array as $key => $value) {
269
+ $sel = '';
270
+ if($business_name==$key){
271
+ $sel = 'selected';
272
+ }
273
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
274
+ }
275
+ ?>
276
+ </select>
277
+ </td>
278
+
279
+ </tr>
280
+ <tr class="saswp-emergencyservice-tr" <?php if(!array_key_exists($business_name, $all_emergency_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
281
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
282
+ <td>
283
+ <select id="saswp_emergency_service" name="saswp_business_name">
284
+ <?php
285
+
286
+ foreach ($all_emergency_array as $key => $value) {
287
+ $sel = '';
288
+ if($business_name==$key){
289
+ $sel = 'selected';
290
+ }
291
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
292
+ }
293
+ ?>
294
+ </select>
295
+ </td>
296
+ </tr>
297
+ <tr class="saswp-entertainmentbusiness-tr" <?php if(!array_key_exists($business_name, $all_entertainment_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
298
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
299
+ <td>
300
+ <select id="saswp_entertainment" name="saswp_business_name">
301
+ <?php
302
+
303
+
304
+ foreach ($all_entertainment_array as $key => $value) {
305
+ $sel = '';
306
+ if($business_name==$key){
307
+ $sel = 'selected';
308
+ }
309
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
310
+ }
311
+ ?>
312
+ </select>
313
+ </td>
314
+ </tr>
315
+ <tr class="saswp-financialservice-tr" <?php if(!array_key_exists($business_name, $all_financial_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
316
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
317
+ <td>
318
+ <select id="saswp_financial_service" name="saswp_business_name">
319
+ <?php
320
+
321
+
322
+ foreach ($all_financial_array as $key => $value) {
323
+ $sel = '';
324
+ if($business_name==$key){
325
+ $sel = 'selected';
326
+ }
327
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
328
+ }
329
+ ?>
330
+ </select>
331
+ </td>
332
+ </tr>
333
+ <tr class="saswp-foodestablishment-tr" <?php if(!array_key_exists($business_name, $all_food_establishment_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
334
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
335
+ <td>
336
+ <select id="saswp_food_establishment" name="saswp_business_name">
337
+ <?php
338
+
339
+ foreach ($all_food_establishment_array as $key => $value) {
340
+ $sel = '';
341
+ if($business_name==$key){
342
+ $sel = 'selected';
343
+ }
344
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
345
+ }
346
+ ?>
347
+ </select>
348
+ </td>
349
+ </tr>
350
+ <tr class="saswp-healthandbeautybusiness-tr" <?php if(!array_key_exists($business_name, $all_health_and_beauty_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
351
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
352
+ <td>
353
+ <select id="saswp_health_and_beauty" name="saswp_business_name">
354
+ <?php
355
+
356
+
357
+ foreach ($all_health_and_beauty_array as $key => $value) {
358
+ $sel = '';
359
+ if($business_name==$key){
360
+ $sel = 'selected';
361
+ }
362
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
363
+ }
364
+ ?>
365
+ </select>
366
+ </td>
367
+ </tr>
368
+ <tr class="saswp-homeandconstructionbusiness-tr" <?php if(!array_key_exists($business_name, $all_home_and_construction_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
369
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
370
+ <td>
371
+ <select id="saswp_home_and_construction" name="saswp_business_name">
372
+ <?php
373
+
374
+ foreach ($all_home_and_construction_array as $key => $value) {
375
+ $sel = '';
376
+ if($business_name==$key){
377
+ $sel = 'selected';
378
+ }
379
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
380
+ }
381
+ ?>
382
+ </select>
383
+ </td>
384
+ </tr>
385
+ <tr class="saswp-legalservice-tr" <?php if(!array_key_exists($business_name, $all_legal_service_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
386
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
387
+ <td>
388
+ <select id="saswp_legal_service" name="saswp_business_name">
389
+ <?php
390
+
391
+ foreach ($all_legal_service_array as $key => $value) {
392
+ $sel = '';
393
+ if($business_name==$key){
394
+ $sel = 'selected';
395
+ }
396
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
397
+ }
398
+ ?>
399
+ </select>
400
+ </td>
401
+ </tr>
402
+ <tr class="saswp-lodgingbusiness-tr" <?php if(!array_key_exists($business_name, $all_lodging_array)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
403
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
404
+ <td>
405
+ <select id="saswp_lodging" name="saswp_business_name">
406
+ <?php
407
+
408
+ foreach ($all_lodging_array as $key => $value) {
409
+ $sel = '';
410
+ if($business_name==$key){
411
+ $sel = 'selected';
412
+ }
413
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
414
+ }
415
+ ?>
416
+ </select>
417
+ </td>
418
+ </tr>
419
+ <tr class="saswp-sportsactivitylocation-tr" <?php if(!array_key_exists($business_name, $all_sports_activity_location)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
420
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
421
+ <td>
422
+ <select id="saswp_sports_activity_location" name="saswp_business_name">
423
+ <?php
424
+
425
+ foreach ($all_sports_activity_location as $key => $value) {
426
+ $sel = '';
427
+ if($business_name==$key){
428
+ $sel = 'selected';
429
+ }
430
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
431
+ }
432
+ ?>
433
+ </select>
434
+ </td>
435
+ </tr>
436
+ <tr class="saswp-store-tr" <?php if(!array_key_exists($business_name, $all_store)){ echo 'style="display:none;"';}else{ echo $style_business_name;} ?>>
437
+ <td><?php echo esc_html__('Sub Business Type', 'schema-and-structured-data-for-wp' ); ?></td>
438
+ <td>
439
+ <select id="saswp_store" name="saswp_business_name">
440
+ <?php
441
+
442
+
443
+ foreach ($all_store as $key => $value) {
444
+ $sel = '';
445
+ if($business_name==$key){
446
+ $sel = 'selected';
447
+ }
448
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
449
+ }
450
+ ?>
451
+ </select>
452
+ </td>
453
+ </tr>
454
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
455
+ <td><?php echo esc_html__('Business Name', 'schema-and-structured-data-for-wp' ); ?></td>
456
+ <td><input value="<?php if(isset($business_details['local_business_name'])) { echo $business_details['local_business_name']; } ?>" type="text" name="local_business_name" placeholder="<?php echo esc_html__('Business Name', 'schema-and-structured-data-for-wp' ); ?>"></td>
457
+ </tr>
458
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
459
+ <td><?php echo esc_html__('Street Address', 'schema-and-structured-data-for-wp' ); ?></td>
460
+ <td><input value="<?php if(isset($business_details['local_street_address'])) { echo $business_details['local_street_address']; } ?>" type="text" name="local_street_address" placeholder="<?php echo esc_html__('Street Address', 'schema-and-structured-data-for-wp' ); ?>"></td>
461
+ </tr>
462
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
463
+ <td><?php echo esc_html__('City', 'schema-and-structured-data-for-wp' ); ?></td>
464
+ <td><input value="<?php if(isset($business_details['local_city'])){ echo $business_details['local_city'];} ?>" type="text" name="local_city" placeholder="<?php echo esc_html__('City', 'schema-and-structured-data-for-wp' ); ?>"></td>
465
+ </tr>
466
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
467
+ <td><?php echo esc_html__('State', 'schema-and-structured-data-for-wp' ); ?></td>
468
+ <td><input value="<?php if(isset($business_details['local_state'])){echo $business_details['local_state'];} ?>" type="text" name="local_state" placeholder="<?php echo esc_html__('State', 'schema-and-structured-data-for-wp' ); ?>"></td>
469
+ </tr>
470
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
471
+ <td><?php echo esc_html__('Postal Code', 'schema-and-structured-data-for-wp' ); ?></td>
472
+ <td><input value="<?php if(isset($business_details['local_postal_code'])) {echo $business_details['local_postal_code']; } ?>" type="text" name="local_postal_code" placeholder="<?php echo esc_html__('Postal Code', 'schema-and-structured-data-for-wp' ); ?>"></td>
473
+ </tr>
474
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
475
+ <td><?php echo esc_html__('Phone', 'schema-and-structured-data-for-wp' ); ?></td>
476
+ <td><input value="<?php if(isset($business_details['local_phone'])){echo $business_details['local_phone']; } ?>" type="text" name="local_phone" placeholder="<?php echo esc_html__('Phone', 'schema-and-structured-data-for-wp' ); ?>"></td>
477
+ </tr>
478
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
479
+ <td><?php echo esc_html__('Website', 'schema-and-structured-data-for-wp' ); ?></td>
480
+ <td><input value="<?php if(isset($business_details['local_website'])){echo $business_details['local_website']; }else{ echo site_url();} ?>" type="text" name="local_website" placeholder="<?php echo esc_html__('Website', 'schema-and-structured-data-for-wp' ); ?>"></td>
481
+ </tr>
482
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
483
+ <td><?php echo esc_html__('Image', 'schema-and-structured-data-for-wp' ); ?></td>
484
+ <td style="display: flex; width: 97%">
485
+ <input value="<?php if(isset($business_details['local_business_logo'])) { echo $business_details['local_business_logo']['url'];} else { echo $logo[0]; } ?>" id="local_business_logo" type="text" name="local_business_logo[url]" placeholder="<?php echo esc_html__('Logo', 'schema-and-structured-data-for-wp' ); ?>" readonly="readonly" style="background: #FFF;">
486
+ <input value="<?php if(isset($business_details['local_business_logo'])) { echo $business_details['local_business_logo']['id'];} else { echo $custom_logo_id; }?>" data-id="local_business_logo_id" type="hidden" name="local_business_logo[id]">
487
+ <input value="<?php if(isset($business_details['local_business_logo'])) { echo $business_details['local_business_logo']['width'];} else { echo $logo[1]; } ?>" data-id="local_business_logo_width" type="hidden" name="local_business_logo[width]">
488
+ <input value="<?php if(isset($business_details['local_business_logo'])) { echo $business_details['local_business_logo']['height'];} else { echo $logo[2]; } ?>" data-id="local_business_logo_height" type="hidden" name="local_business_logo[height]">
489
+ <input data-id="media" class="button" id="local_business_logo_button" type="button" value="Upload"></td>
490
+ </tr>
491
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
492
+ <td><?php echo esc_html__('Operation Days', 'schema-and-structured-data-for-wp' ); ?></td>
493
+ <td>
494
+ <select multiple id="saswp_dayofweek" name="saswp_dayofweek[]">
495
+ <?php
496
+
497
+ $selected_days = $business_details['saswp_dayofweek'];
498
+
499
+ foreach ($all_dayofweek_array as $key => $value) {
500
+ $sel = '';
501
+ if(array_search($key, $selected_days)){
502
+ $sel = 'selected';
503
+ }
504
+ echo "<option value='".esc_attr($key)."' ".esc_attr($sel).">".esc_html__($value, 'schema-and-structured-data-for-wp' )."</option>";
505
+ }
506
+ ?>
507
+ </select>
508
+ </td>
509
+ </tr>
510
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
511
+ <td><?php echo esc_html__('Opens', 'schema-and-structured-data-for-wp' ); ?></td>
512
+ <td><input id="saswp-dayofweek-opens-time" value="<?php if(isset($business_details['local_opens_time'])){echo $business_details['local_opens_time']; } ?>" type="text" name="local_opens_time" ></td>
513
+ </tr>
514
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
515
+ <td><?php echo esc_html__('Closes', 'schema-and-structured-data-for-wp' ); ?></td>
516
+ <td><input id="saswp-dayofweek-closes-time" value="<?php if(isset($business_details['local_closes_time'])){echo $business_details['local_closes_time']; } ?>" type="text" name="local_closes_time" ></td>
517
+ </tr>
518
+ <tr class="saswp-business-text-field-tr" <?php echo $style_business_type; ?>>
519
+ <td><?php echo esc_html__('Price Range', 'schema-and-structured-data-for-wp' ); ?></td>
520
+ <td><input value="<?php if(isset($business_details['local_price_range'])){echo $business_details['local_price_range']; } ?>" type="text" name="local_price_range" placeholder="<?php echo esc_html__('$10-$50 or $$$ ', 'schema-and-structured-data-for-wp' ); ?>" ></td>
521
+ </tr>
522
+ </table>
523
+
524
+ </div>
525
+ <?php
526
+ }
527
+
528
+ function saswp_schema_type_add_meta_box_save( $post_id ) {
529
+
530
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
531
+ if ( ! isset( $_POST['saswp_schema_type_nonce'] ) || ! wp_verify_nonce( $_POST['saswp_schema_type_nonce'], 'saswp_schema_type_nonce' ) ) return;
532
+ if ( ! current_user_can( 'edit_post', $post_id ) ) return;
533
+
534
+ if ( isset( $_POST['schema_type'] ) ){
535
+ update_post_meta( $post_id, 'schema_type', esc_attr( $_POST['schema_type'] ) );
536
+ }
537
+
538
+ if ( isset( $_POST['saswp_business_type'] ) ){
539
+ update_post_meta( $post_id, 'saswp_business_type', esc_attr( $_POST['saswp_business_type'] ) );
540
+ }
541
+
542
+ if ( isset( $_POST['saswp_business_name'] ) ){
543
+ update_post_meta( $post_id, 'saswp_business_name', esc_attr( $_POST['saswp_business_name'] ) );
544
+ }
545
+
546
+ $local_business_details = array();
547
+ if ( isset( $_POST['local_business_name'] ) ){
548
+ $local_business_details['local_business_name'] = $_POST['local_business_name'];
549
+ }
550
+ if ( isset( $_POST['local_street_address'] ) ){
551
+ $local_business_details['local_street_address'] = $_POST['local_street_address'];
552
+ }
553
+ if ( isset( $_POST['local_city'] ) ){
554
+ $local_business_details['local_city'] = $_POST['local_city'];
555
+ }
556
+ if ( isset( $_POST['local_state'] ) ){
557
+ $local_business_details['local_state'] = $_POST['local_state'];
558
+ }
559
+ if ( isset( $_POST['local_postal_code'] ) ){
560
+ $local_business_details['local_postal_code'] = $_POST['local_postal_code'];
561
+ }
562
+ if ( isset( $_POST['local_phone'] ) ){
563
+ $local_business_details['local_phone'] = $_POST['local_phone'];
564
+ }
565
+ if ( isset( $_POST['local_website'] ) ){
566
+ $local_business_details['local_website'] = $_POST['local_website'];
567
+ }
568
+ if ( isset( $_POST['local_business_logo'] ) ){
569
+
570
+ $local_business_details['local_business_logo']['id'] = $_POST['local_business_logo']['id'];
571
+ $local_business_details['local_business_logo']['url'] = $_POST['local_business_logo']['url'];
572
+ $local_business_details['local_business_logo']['width'] = $_POST['local_business_logo']['width'];
573
+ $local_business_details['local_business_logo']['height'] = $_POST['local_business_logo']['height'];
574
+ }
575
+ if ( isset( $_POST['local_opens_time'] ) ){
576
+ $local_business_details['local_opens_time'] = $_POST['local_opens_time'];
577
+ }
578
+ if ( isset( $_POST['local_closes_time'] ) ){
579
+ $local_business_details['local_closes_time'] = $_POST['local_closes_time'];
580
+ }
581
+ if ( isset( $_POST['saswp_dayofweek'] ) ){
582
+ $local_business_details['saswp_dayofweek'] = $_POST['saswp_dayofweek'];
583
+ }
584
+ if ( isset( $_POST['local_price_range'] ) ){
585
+ $local_business_details['local_price_range'] = $_POST['local_price_range'];
586
+ }
587
+
588
+ update_post_meta( $post_id, 'saswp_local_business_details', $local_business_details );
589
+
590
+ }
591
+
592
+