Orbit Fox by ThemeIsle - Version 2.5.0

Version Description

  • 2018-06-22
Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 Orbit Fox by ThemeIsle
Version 2.5.0
Comparing to
See all releases

Code changes from version 2.4.7 to 2.5.0

Files changed (39) hide show
  1. CHANGELOG.md +8 -0
  2. core/app/abstract/class-orbit-fox-module-abstract.php +295 -217
  3. core/app/class-orbit-fox-admin.php +3 -0
  4. core/app/class-orbit-fox-global-settings.php +3 -0
  5. core/app/helpers/class-orbit-fox-render-helper.php +146 -99
  6. core/app/views/partials/module-panel-tpl.php +15 -6
  7. core/app/views/partials/module-tile-tpl.php +11 -3
  8. core/assets/css/orbit-fox-admin.css +87 -36
  9. core/assets/js/orbit-fox-admin.js +26 -24
  10. core/includes/class-orbit-fox.php +1 -1
  11. languages/themeisle-companion.pot +1211 -481
  12. obfx_modules/companion-legacy/inc/azera-shop/css/style.css +85 -98
  13. obfx_modules/companion-legacy/inc/hestia/common-functions.php +26 -214
  14. obfx_modules/companion-legacy/inc/llorix-one-companion/css/style.css +82 -96
  15. obfx_modules/companion-legacy/init.php +0 -17
  16. obfx_modules/google-analytics/js/script.js +55 -53
  17. obfx_modules/image-cdn/inc/class-orbit-fox-connector.php +228 -0
  18. obfx_modules/image-cdn/inc/class-orbit-fox-image-replacer.php +629 -0
  19. obfx_modules/image-cdn/inc/class-request.php +127 -0
  20. obfx_modules/image-cdn/init.php +391 -0
  21. obfx_modules/menu-icons/js/admin.js +4 -4
  22. obfx_modules/policy-notice/init.php +352 -0
  23. obfx_modules/safe-updates/init.php +555 -0
  24. obfx_modules/safe-updates/js/theme-update-check.js +45 -0
  25. readme.md +15 -3
  26. readme.txt +15 -3
  27. themeisle-companion.php +3 -3
  28. themeisle-hash.json +1 -1
  29. vendor/autoload.php +1 -1
  30. vendor/codeinwp/elementor-extra-widgets/class-elementor-extra-widgets.php +1 -1
  31. vendor/codeinwp/elementor-extra-widgets/composer.json +1 -1
  32. vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php +3 -3
  33. vendor/codeinwp/templates-directory/class-page-templates-directory.php +14 -0
  34. vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php +6 -3
  35. vendor/codeinwp/themeisle-content-forms/composer.json +1 -1
  36. vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php +48 -57
  37. vendor/codeinwp/themeisle-sdk/load.php +1 -1
  38. vendor/composer/autoload_real.php +5 -5
  39. vendor/composer/installed.json +16 -16
CHANGELOG.md CHANGED
@@ -1,4 +1,12 @@
1
 
 
 
 
 
 
 
 
 
2
  ### v2.4.7 - 2018-05-03
3
  **Changes:**
4
  * Add content forms for Beaver Builder
1
 
2
+ ### v2.5.0 - 2018-06-22
3
+ **Changes:**
4
+ * Adds privacy policy module, allows users to set a notice for their visitors.
5
+ * Adds Image CDN and Optimization module in private BETA .
6
+ * Adds Themes Safe Updates module in private BETA.
7
+ * Adds more Elementor templates into the library.
8
+ * Improvements for Hestia enhancements module.
9
+
10
  ### v2.4.7 - 2018-05-03
11
  **Changes:**
12
  * Add content forms for Beaver Builder
core/app/abstract/class-orbit-fox-module-abstract.php CHANGED
@@ -18,15 +18,6 @@
18
  */
19
  abstract class Orbit_Fox_Module_Abstract {
20
 
21
- /**
22
- * Holds the module slug.
23
- *
24
- * @since 1.0.0
25
- * @access protected
26
- * @var string $slug The module slug.
27
- */
28
- protected $slug;
29
-
30
  /**
31
  * Holds the name of the module
32
  *
@@ -35,7 +26,6 @@ abstract class Orbit_Fox_Module_Abstract {
35
  * @var string $name The name of the module.
36
  */
37
  public $name;
38
-
39
  /**
40
  * Holds the description of the module
41
  *
@@ -44,43 +34,54 @@ abstract class Orbit_Fox_Module_Abstract {
44
  * @var string $description The description of the module.
45
  */
46
  public $description;
47
-
48
  /**
49
- * Holds the default setting activation state of the module.
50
  *
51
- * @since 2.1.0
52
- * @access protected
53
- * @var boolean $active_default The default active state of the module.
54
  */
55
- protected $active_default = false;
56
-
57
  /**
58
- * Stores an array of notices
59
  *
60
  * @since 1.0.0
61
  * @access public
62
- * @var array $notices Stores an array of notices to be displayed on the admin panel.
63
  */
64
- protected $notices = array();
65
-
66
  /**
67
- * Confirm intent array. It should contain a title and a subtitle for the confirm intent modal.
68
  *
69
- * @since 2.4.1
70
  * @access public
71
- * @var array $confirm_intent Stores an array of the modal with 'title' and 'subtitle' keys.
72
  */
73
- public $confirm_intent = array();
74
-
75
  /**
76
- * Flags if module should autoload.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  *
78
  * @since 1.0.0
79
  * @access public
80
- * @var bool $auto The flag for automatic activation.
81
  */
82
- public $auto = false;
83
-
84
  /**
85
  * Has an instance of the Orbit_Fox_Loader class used for adding actions and filters.
86
  *
@@ -109,73 +110,39 @@ abstract class Orbit_Fox_Module_Abstract {
109
  protected $version;
110
 
111
  /**
112
- * Stores the localized arrays for both public and admin JS files that need to be loaded.
113
- *
114
- * @access protected
115
- * @var array $localized The localized arrays for both public and admin JS files that need to be loaded.
116
- */
117
- protected $localized = array();
118
-
119
- /**
120
- * Orbit_Fox_Module_Abstract constructor.
121
  *
122
  * @since 1.0.0
123
- * @access public
124
- */
125
- public function __construct() {
126
- $this->slug = str_replace( '_', '-', strtolower( str_replace( '_OBFX_Module', '', get_class( $this ) ) ) );
127
- }
128
-
129
- /**
130
- * Getter method for slug.
131
- *
132
- * @since 2.3.3
133
- * @access public
134
- * @return mixed|string
135
  */
136
- public function get_slug() {
137
- return $this->slug;
138
- }
139
 
140
  /**
141
- * Method to return path to child class in a Reflective Way.
142
- *
143
- * @codeCoverageIgnore
144
  *
145
  * @since 1.0.0
146
  * @access protected
147
- * @return string
148
  */
149
- protected function get_dir() {
150
- $reflector = new ReflectionClass( get_class( $this ) );
151
- return dirname( $reflector->getFileName() );
152
- }
153
 
154
  /**
155
- * Method to return URL to child class in a Reflective Way.
156
- *
157
- * @codeCoverageIgnore
158
  *
159
  * @access protected
160
- * @return string
161
  */
162
- protected function get_url() {
163
- return plugin_dir_url( $this->get_dir() ) . $this->slug;
164
- }
165
 
166
  /**
167
- * Utility method to return active theme dir name.
168
  *
169
  * @since 1.0.0
170
- * @access protected
171
- * @param boolean $is_child Flag for child themes.
172
- * @return string
173
  */
174
- protected function get_active_theme_dir( $is_child = false ) {
175
- if ( $is_child ) {
176
- return basename( get_stylesheet_directory() );
177
- }
178
- return basename( get_template_directory() );
179
  }
180
 
181
  /**
@@ -187,6 +154,7 @@ abstract class Orbit_Fox_Module_Abstract {
187
  * @since 1.0.0
188
  * @updated 2.3.3
189
  * @access public
 
190
  * @param Orbit_Fox_Loader $loader The loader class used to register action hooks and filters.
191
  */
192
  public function register_loader( Orbit_Fox_Loader $loader ) {
@@ -195,6 +163,17 @@ abstract class Orbit_Fox_Module_Abstract {
195
  $this->loader->add_action( $this->get_slug() . '_deactivate', $this, 'deactivate' );
196
  }
197
 
 
 
 
 
 
 
 
 
 
 
 
198
  /**
199
  * Registers the loader.
200
  *
@@ -202,6 +181,7 @@ abstract class Orbit_Fox_Module_Abstract {
202
  *
203
  * @since 1.0.0
204
  * @access public
 
205
  * @param Orbit_Fox_Model $model The loader class used to register action hooks and filters.
206
  */
207
  public function register_model( Orbit_Fox_Model $model ) {
@@ -242,51 +222,57 @@ abstract class Orbit_Fox_Module_Abstract {
242
  }
243
 
244
  /**
245
- * Method to determine if the module is enabled or not.
 
 
 
246
  *
247
  * @since 1.0.0
248
  * @access public
 
 
 
249
  * @return bool
250
  */
251
- public abstract function enable_module();
 
 
252
 
253
  /**
254
- * The method for the module load logic.
 
255
  *
256
- * @since 1.0.0
257
- * @access public
258
- * @return mixed
259
- */
260
- public abstract function load();
261
-
262
- /**
263
- * Method that returns an array of scripts and styles to be loaded
264
- * for the front end part.
265
  *
266
  * @since 1.0.0
267
  * @access public
268
- * @return array
 
 
 
 
269
  */
270
- public abstract function public_enqueue();
 
 
271
 
272
  /**
273
- * Method that returns an array of scripts and styles to be loaded
274
- * for the admin part.
275
  *
276
  * @since 1.0.0
277
  * @access public
278
- * @return array
279
  */
280
- public abstract function admin_enqueue();
281
 
282
  /**
283
- * Method to define the options fields for the module
284
  *
285
  * @since 1.0.0
286
  * @access public
287
- * @return array
288
  */
289
- public abstract function options();
290
 
291
  /**
292
  * Method to define actions and filters needed for the module.
@@ -311,109 +297,125 @@ abstract class Orbit_Fox_Module_Abstract {
311
  if ( $this->auto == true ) {
312
  return true;
313
  }
 
 
 
314
  return $this->model->get_is_module_active( $this->slug, $this->active_default );
315
  }
316
 
317
  /**
318
- * Method to retrieve from model the module status for
319
- * the provided key.
320
  *
321
  * @codeCoverageIgnore
322
  *
323
  * @since 1.0.0
324
  * @access public
325
- * @param string $key Key to look for.
326
- * @return bool
 
 
 
327
  */
328
- final public function get_status( $key ) {
329
- return $this->model->get_module_status( $this->slug, $key );
 
 
 
330
  }
331
 
332
  /**
333
- * Method to update in model the module status for
334
- * the provided key value pair.
335
- *
336
- * @codeCoverageIgnore
337
  *
338
- * @since 1.0.0
339
  * @access public
340
- * @param string $key Key to update.
341
- * @param string $value The new value.
342
- * @return mixed
343
  */
344
- final public function set_status( $key, $value ) {
345
- return $this->model->set_module_status( $this->slug, $key, $value );
346
  }
347
 
348
  /**
349
- * Method to retrieve an option value from model.
350
- *
351
- * @codeCoverageIgnore
352
  *
353
- * @since 1.0.0
354
  * @access public
355
- * @param string $key The option key to retrieve.
356
- * @return bool
357
  */
358
- final public function get_option( $key ) {
359
- $default_options = $this->get_options_defaults();
360
- $db_option = $this->model->get_module_option( $this->slug, $key );
361
- $value = $db_option;
362
- if ( $db_option === false ) {
363
- $value = $default_options[ $key ];
364
- }
365
- return $value;
366
  }
367
 
368
  /**
369
- * Method to update an option key value pair.
 
370
  *
371
  * @codeCoverageIgnore
372
  *
373
  * @since 1.0.0
 
374
  * @access public
375
- * @param string $key The key name.
376
- * @param string $value The new value.
 
 
377
  * @return mixed
378
  */
379
- final public function set_option( $key, $value ) {
380
- return $this->model->set_module_option( $this->slug, $key, $value );
 
 
 
 
381
  }
382
 
383
  /**
384
- * Stub for activate hook.
385
  *
386
- * @since 2.3.3
 
 
387
  * @access public
 
388
  */
389
- public function activate() {}
 
 
 
 
 
 
 
 
 
 
 
390
 
391
  /**
392
- * Stub for deactivate hook.
393
  *
394
- * @since 2.3.3
395
  * @access public
 
396
  */
397
- public function deactivate() {}
398
 
399
  /**
400
- * Method to update a set of options.
401
- * Added in v2.3.3 actions for before and after options save.
402
  *
403
  * @codeCoverageIgnore
404
  *
405
  * @since 1.0.0
406
- * @updated 2.3.3
407
  * @access public
408
- * @param array $options An associative array of options to be
409
- * updated. Eg. ( 'key' => 'new_value' ).
410
- * @return mixed
 
411
  */
412
- final public function set_options( $options ) {
413
- do_action( $this->get_slug() . '_before_options_save', $options );
414
- $result = $this->model->set_module_options( $this->slug, $options );
415
- do_action( $this->get_slug() . '_after_options_save' );
416
- return $result;
 
 
 
 
417
  }
418
 
419
  /**
@@ -435,28 +437,8 @@ abstract class Orbit_Fox_Module_Abstract {
435
  }
436
  $defaults[ $opt['name'] ] = $opt['default'];
437
  }
438
- return $defaults;
439
- }
440
 
441
- /**
442
- * Method to retrieve the options for the module.
443
- *
444
- * @codeCoverageIgnore
445
- *
446
- * @since 1.0.0
447
- * @access public
448
- * @return array
449
- */
450
- final public function get_options() {
451
- $model_options = $this->options();
452
- $options = array();
453
- $index = 0;
454
- foreach ( $model_options as $opt ) {
455
- $options[ $index ] = $opt;
456
- $options[ $index ]['value'] = $this->get_option( $opt['name'] );
457
- $index++;
458
- }
459
- return $options;
460
  }
461
 
462
  /**
@@ -466,6 +448,7 @@ abstract class Orbit_Fox_Module_Abstract {
466
  *
467
  * @since 1.0.0
468
  * @access public
 
469
  * @param string $version The version for the files.
470
  */
471
  final public function set_enqueue( $version ) {
@@ -490,25 +473,23 @@ abstract class Orbit_Fox_Module_Abstract {
490
  }
491
 
492
  /**
493
- * Actually sets the scripts.
494
  *
495
  * @codeCoverageIgnore
496
  *
497
  * @since 1.0.0
498
  * @access private
 
499
  * @param array $enqueue The array of files to enqueue.
500
  * @param string $prefix The string to prefix in the enqueued name.
501
  */
502
- private function set_scripts( $enqueue, $prefix ) {
503
- $sanitized = str_replace( ' ', '-', strtolower( $this->name ) );
504
-
505
  $module_dir = $this->slug;
506
-
507
  if ( ! empty( $enqueue ) ) {
508
- if ( isset( $enqueue['js'] ) && ! empty( $enqueue['js'] ) ) {
509
  $order = 0;
510
  $map = array();
511
- foreach ( $enqueue['js'] as $file_name => $dependencies ) {
512
  if ( $dependencies == false ) {
513
  $dependencies = array();
514
  } else {
@@ -521,52 +502,68 @@ abstract class Orbit_Fox_Module_Abstract {
521
  }
522
  }
523
  $url = filter_var( $file_name, FILTER_SANITIZE_URL );
524
- $resource = plugin_dir_url( $this->get_dir() ) . $module_dir . '/js/' . $file_name . '.js';
525
  if ( ! filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
526
  $resource = $url;
527
  }
528
- $id = 'obfx-module-' . $prefix . '-js-' . $sanitized . '-' . $order;
529
  $map[ $file_name ] = $id;
530
-
531
- wp_enqueue_script(
532
  $id,
533
  $resource,
534
  $dependencies,
535
  $this->version,
536
- false
537
  );
 
 
 
 
 
538
 
539
- // check if we need to enqueue or localize.
540
- if ( array_key_exists( $file_name, $this->localized ) ) {
541
- wp_localize_script(
542
- $id,
543
- str_replace( '-', '_', $sanitized ),
544
- $this->localized[ $file_name ]
545
- );
546
- }
547
- $order++;
548
- }// End foreach().
549
- }// End if().
550
- }// End if().
 
 
 
 
 
 
 
 
551
  }
552
 
553
  /**
554
- * Actually sets the styles.
555
  *
556
  * @codeCoverageIgnore
557
  *
558
  * @since 1.0.0
559
  * @access private
 
560
  * @param array $enqueue The array of files to enqueue.
561
  * @param string $prefix The string to prefix in the enqueued name.
562
  */
563
- private function set_styles( $enqueue, $prefix ) {
 
 
564
  $module_dir = $this->slug;
 
565
  if ( ! empty( $enqueue ) ) {
566
- if ( isset( $enqueue['css'] ) && ! empty( $enqueue['css'] ) ) {
567
  $order = 0;
568
  $map = array();
569
- foreach ( $enqueue['css'] as $file_name => $dependencies ) {
570
  if ( $dependencies == false ) {
571
  $dependencies = array();
572
  } else {
@@ -579,48 +576,56 @@ abstract class Orbit_Fox_Module_Abstract {
579
  }
580
  }
581
  $url = filter_var( $file_name, FILTER_SANITIZE_URL );
582
- $resource = plugin_dir_url( $this->get_dir() ) . $module_dir . '/css/' . $file_name . '.css';
583
  if ( ! filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
584
  $resource = $url;
585
  }
586
- $id = 'obfx-module-' . $prefix . '-css-' . str_replace( ' ', '-', strtolower( $this->name ) ) . '-' . $order;
587
  $map[ $file_name ] = $id;
588
- wp_enqueue_style(
 
589
  $id,
590
  $resource,
591
  $dependencies,
592
  $this->version,
593
- 'all'
594
  );
595
- $order++;
596
- }
597
- }
598
- }
 
 
 
 
 
 
 
 
 
599
  }
600
 
601
  /**
602
- * Sets the scripts for admin from the module array.
603
  *
604
  * @codeCoverageIgnore
605
  *
606
  * @since 1.0.0
607
  * @access public
608
  */
609
- public function set_admin_scripts() {
610
- $this->set_scripts( $this->admin_enqueue(), 'adm' );
611
  }
612
 
613
  /**
614
- * Sets the styles for public from the module array.
615
- *
616
- * @codeCoverageIgnore
617
  *
618
  * @since 1.0.0
619
  * @access public
 
620
  */
621
- public function set_public_styles() {
622
- $this->set_styles( $this->public_enqueue(), 'pub' );
623
- }
624
 
625
  /**
626
  * Sets the scripts for public from the module array.
@@ -634,6 +639,51 @@ abstract class Orbit_Fox_Module_Abstract {
634
  $this->set_scripts( $this->public_enqueue(), 'pub' );
635
  }
636
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
637
  /**
638
  * Utility method to render a view from module.
639
  *
@@ -641,8 +691,10 @@ abstract class Orbit_Fox_Module_Abstract {
641
  *
642
  * @since 1.0.0
643
  * @access protected
 
644
  * @param string $view_name The view name w/o the `-tpl.php` part.
645
  * @param array $args An array of arguments to be passed to the view.
 
646
  * @return string
647
  */
648
  protected function render_view( $view_name, $args = array() ) {
@@ -656,6 +708,32 @@ abstract class Orbit_Fox_Module_Abstract {
656
  if ( file_exists( $file ) ) {
657
  include $file;
658
  }
 
659
  return ob_get_clean();
660
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
661
  }
18
  */
19
  abstract class Orbit_Fox_Module_Abstract {
20
 
 
 
 
 
 
 
 
 
 
21
  /**
22
  * Holds the name of the module
23
  *
26
  * @var string $name The name of the module.
27
  */
28
  public $name;
 
29
  /**
30
  * Holds the description of the module
31
  *
34
  * @var string $description The description of the module.
35
  */
36
  public $description;
 
37
  /**
38
+ * Confirm intent array. It should contain a title and a subtitle for the confirm intent modal.
39
  *
40
+ * @since 2.4.1
41
+ * @access public
42
+ * @var array $confirm_intent Stores an array of the modal with 'title' and 'subtitle' keys.
43
  */
44
+ public $confirm_intent = array();
 
45
  /**
46
+ * Flags if module should autoload.
47
  *
48
  * @since 1.0.0
49
  * @access public
50
+ * @var bool $auto The flag for automatic activation.
51
  */
52
+ public $auto = false;
 
53
  /**
54
+ * Flags module should have the section open.
55
  *
56
+ * @since 2.5.0
57
  * @access public
58
+ * @var bool $show The flag for section opened.
59
  */
60
+ public $show = false;
 
61
  /**
62
+ * Holds the module slug.
63
+ *
64
+ * @since 1.0.0
65
+ * @access protected
66
+ * @var string $slug The module slug.
67
+ */
68
+ protected $slug;
69
+ /**
70
+ * Holds the default setting activation state of the module.
71
+ *
72
+ * @since 2.1.0
73
+ * @access protected
74
+ * @var boolean $active_default The default active state of the module.
75
+ */
76
+ protected $active_default = false;
77
+ /**
78
+ * Stores an array of notices
79
  *
80
  * @since 1.0.0
81
  * @access public
82
+ * @var array $notices Stores an array of notices to be displayed on the admin panel.
83
  */
84
+ protected $notices = array();
 
85
  /**
86
  * Has an instance of the Orbit_Fox_Loader class used for adding actions and filters.
87
  *
110
  protected $version;
111
 
112
  /**
113
+ * Enable module in beta mode..
 
 
 
 
 
 
 
 
114
  *
115
  * @since 1.0.0
116
+ * @access protected
117
+ * @var boolean $beta Is module in beta.
 
 
 
 
 
 
 
 
 
 
118
  */
119
+ public $beta;
 
 
120
 
121
  /**
122
+ * Module needs save buttons.
 
 
123
  *
124
  * @since 1.0.0
125
  * @access protected
126
+ * @var boolean $no_save Should we show the save buttons.
127
  */
128
+ public $no_save = false;
 
 
 
129
 
130
  /**
131
+ * Stores the localized arrays for both public and admin JS files that need to be loaded.
 
 
132
  *
133
  * @access protected
134
+ * @var array $localized The localized arrays for both public and admin JS files that need to be loaded.
135
  */
136
+ protected $localized = array();
 
 
137
 
138
  /**
139
+ * Orbit_Fox_Module_Abstract constructor.
140
  *
141
  * @since 1.0.0
142
+ * @access public
 
 
143
  */
144
+ public function __construct() {
145
+ $this->slug = str_replace( '_', '-', strtolower( str_replace( '_OBFX_Module', '', get_class( $this ) ) ) );
 
 
 
146
  }
147
 
148
  /**
154
  * @since 1.0.0
155
  * @updated 2.3.3
156
  * @access public
157
+ *
158
  * @param Orbit_Fox_Loader $loader The loader class used to register action hooks and filters.
159
  */
160
  public function register_loader( Orbit_Fox_Loader $loader ) {
163
  $this->loader->add_action( $this->get_slug() . '_deactivate', $this, 'deactivate' );
164
  }
165
 
166
+ /**
167
+ * Getter method for slug.
168
+ *
169
+ * @since 2.3.3
170
+ * @access public
171
+ * @return mixed|string
172
+ */
173
+ public function get_slug() {
174
+ return $this->slug;
175
+ }
176
+
177
  /**
178
  * Registers the loader.
179
  *
181
  *
182
  * @since 1.0.0
183
  * @access public
184
+ *
185
  * @param Orbit_Fox_Model $model The loader class used to register action hooks and filters.
186
  */
187
  public function register_model( Orbit_Fox_Model $model ) {
222
  }
223
 
224
  /**
225
+ * Method to retrieve from model the module status for
226
+ * the provided key.
227
+ *
228
+ * @codeCoverageIgnore
229
  *
230
  * @since 1.0.0
231
  * @access public
232
+ *
233
+ * @param string $key Key to look for.
234
+ *
235
  * @return bool
236
  */
237
+ final public function get_status( $key ) {
238
+ return $this->model->get_module_status( $this->slug, $key );
239
+ }
240
 
241
  /**
242
+ * Method to update in model the module status for
243
+ * the provided key value pair.
244
  *
245
+ * @codeCoverageIgnore
 
 
 
 
 
 
 
 
246
  *
247
  * @since 1.0.0
248
  * @access public
249
+ *
250
+ * @param string $key Key to update.
251
+ * @param string $value The new value.
252
+ *
253
+ * @return mixed
254
  */
255
+ final public function set_status( $key, $value ) {
256
+ return $this->model->set_module_status( $this->slug, $key, $value );
257
+ }
258
 
259
  /**
260
+ * Method to determine if the module is enabled or not.
 
261
  *
262
  * @since 1.0.0
263
  * @access public
264
+ * @return bool
265
  */
266
+ public abstract function enable_module();
267
 
268
  /**
269
+ * The method for the module load logic.
270
  *
271
  * @since 1.0.0
272
  * @access public
273
+ * @return mixed
274
  */
275
+ public abstract function load();
276
 
277
  /**
278
  * Method to define actions and filters needed for the module.
297
  if ( $this->auto == true ) {
298
  return true;
299
  }
300
+ if ( ! isset( $this->model ) ) {
301
+ return false;
302
+ }
303
  return $this->model->get_is_module_active( $this->slug, $this->active_default );
304
  }
305
 
306
  /**
307
+ * Method to update an option key value pair.
 
308
  *
309
  * @codeCoverageIgnore
310
  *
311
  * @since 1.0.0
312
  * @access public
313
+ *
314
+ * @param string $key The key name.
315
+ * @param string $value The new value.
316
+ *
317
+ * @return mixed
318
  */
319
+ final public function set_option( $key, $value ) {
320
+ if ( ! isset( $this->model ) ) {
321
+ return false;
322
+ }
323
+ return $this->model->set_module_option( $this->slug, $key, $value );
324
  }
325
 
326
  /**
327
+ * Stub for activate hook.
 
 
 
328
  *
329
+ * @since 2.3.3
330
  * @access public
 
 
 
331
  */
332
+ public function activate() {
 
333
  }
334
 
335
  /**
336
+ * Stub for deactivate hook.
 
 
337
  *
338
+ * @since 2.3.3
339
  * @access public
 
 
340
  */
341
+ public function deactivate() {
 
 
 
 
 
 
 
342
  }
343
 
344
  /**
345
+ * Method to update a set of options.
346
+ * Added in v2.3.3 actions for before and after options save.
347
  *
348
  * @codeCoverageIgnore
349
  *
350
  * @since 1.0.0
351
+ * @updated 2.3.3
352
  * @access public
353
+ *
354
+ * @param array $options An associative array of options to be
355
+ * updated. Eg. ( 'key' => 'new_value' ).
356
+ *
357
  * @return mixed
358
  */
359
+ final public function set_options( $options ) {
360
+ do_action( $this->get_slug() . '_before_options_save', $options );
361
+ $result = $this->model->set_module_options( $this->slug, $options );
362
+ do_action( $this->get_slug() . '_after_options_save' );
363
+
364
+ return $result;
365
  }
366
 
367
  /**
368
+ * Method to retrieve the options for the module.
369
  *
370
+ * @codeCoverageIgnore
371
+ *
372
+ * @since 1.0.0
373
  * @access public
374
+ * @return array
375
  */
376
+ final public function get_options() {
377
+ $model_options = $this->options();
378
+ $options = array();
379
+ $index = 0;
380
+ foreach ( $model_options as $opt ) {
381
+ $options[ $index ] = $opt;
382
+ $options[ $index ]['value'] = $this->get_option( $opt['name'] );
383
+ $index ++;
384
+ }
385
+
386
+ return $options;
387
+ }
388
 
389
  /**
390
+ * Method to define the options fields for the module
391
  *
392
+ * @since 1.0.0
393
  * @access public
394
+ * @return array
395
  */
396
+ public abstract function options();
397
 
398
  /**
399
+ * Method to retrieve an option value from model.
 
400
  *
401
  * @codeCoverageIgnore
402
  *
403
  * @since 1.0.0
 
404
  * @access public
405
+ *
406
+ * @param string $key The option key to retrieve.
407
+ *
408
+ * @return bool
409
  */
410
+ final public function get_option( $key ) {
411
+ $default_options = $this->get_options_defaults();
412
+ $db_option = $this->model->get_module_option( $this->slug, $key );
413
+ $value = $db_option;
414
+ if ( $db_option === false ) {
415
+ $value = isset( $default_options[ $key ] ) ? $default_options[ $key ] : '';
416
+ }
417
+
418
+ return $value;
419
  }
420
 
421
  /**
437
  }
438
  $defaults[ $opt['name'] ] = $opt['default'];
439
  }
 
 
440
 
441
+ return $defaults;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  }
443
 
444
  /**
448
  *
449
  * @since 1.0.0
450
  * @access public
451
+ *
452
  * @param string $version The version for the files.
453
  */
454
  final public function set_enqueue( $version ) {
473
  }
474
 
475
  /**
476
+ * Actually sets the styles.
477
  *
478
  * @codeCoverageIgnore
479
  *
480
  * @since 1.0.0
481
  * @access private
482
+ *
483
  * @param array $enqueue The array of files to enqueue.
484
  * @param string $prefix The string to prefix in the enqueued name.
485
  */
486
+ private function set_styles( $enqueue, $prefix ) {
 
 
487
  $module_dir = $this->slug;
 
488
  if ( ! empty( $enqueue ) ) {
489
+ if ( isset( $enqueue['css'] ) && ! empty( $enqueue['css'] ) ) {
490
  $order = 0;
491
  $map = array();
492
+ foreach ( $enqueue['css'] as $file_name => $dependencies ) {
493
  if ( $dependencies == false ) {
494
  $dependencies = array();
495
  } else {
502
  }
503
  }
504
  $url = filter_var( $file_name, FILTER_SANITIZE_URL );
505
+ $resource = plugin_dir_url( $this->get_dir() ) . $module_dir . '/css/' . $file_name . '.css';
506
  if ( ! filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
507
  $resource = $url;
508
  }
509
+ $id = 'obfx-module-' . $prefix . '-css-' . str_replace( ' ', '-', strtolower( $this->name ) ) . '-' . $order;
510
  $map[ $file_name ] = $id;
511
+ wp_enqueue_style(
 
512
  $id,
513
  $resource,
514
  $dependencies,
515
  $this->version,
516
+ 'all'
517
  );
518
+ $order ++;
519
+ }
520
+ }
521
+ }
522
+ }
523
 
524
+ /**
525
+ * Method that returns an array of scripts and styles to be loaded
526
+ * for the admin part.
527
+ *
528
+ * @since 1.0.0
529
+ * @access public
530
+ * @return array
531
+ */
532
+ public abstract function admin_enqueue();
533
+
534
+ /**
535
+ * Sets the scripts for admin from the module array.
536
+ *
537
+ * @codeCoverageIgnore
538
+ *
539
+ * @since 1.0.0
540
+ * @access public
541
+ */
542
+ public function set_admin_scripts() {
543
+ $this->set_scripts( $this->admin_enqueue(), 'adm' );
544
  }
545
 
546
  /**
547
+ * Actually sets the scripts.
548
  *
549
  * @codeCoverageIgnore
550
  *
551
  * @since 1.0.0
552
  * @access private
553
+ *
554
  * @param array $enqueue The array of files to enqueue.
555
  * @param string $prefix The string to prefix in the enqueued name.
556
  */
557
+ private function set_scripts( $enqueue, $prefix ) {
558
+ $sanitized = str_replace( ' ', '-', strtolower( $this->name ) );
559
+
560
  $module_dir = $this->slug;
561
+
562
  if ( ! empty( $enqueue ) ) {
563
+ if ( isset( $enqueue['js'] ) && ! empty( $enqueue['js'] ) ) {
564
  $order = 0;
565
  $map = array();
566
+ foreach ( $enqueue['js'] as $file_name => $dependencies ) {
567
  if ( $dependencies == false ) {
568
  $dependencies = array();
569
  } else {
576
  }
577
  }
578
  $url = filter_var( $file_name, FILTER_SANITIZE_URL );
579
+ $resource = plugin_dir_url( $this->get_dir() ) . $module_dir . '/js/' . $file_name . '.js';
580
  if ( ! filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
581
  $resource = $url;
582
  }
583
+ $id = 'obfx-module-' . $prefix . '-js-' . $sanitized . '-' . $order;
584
  $map[ $file_name ] = $id;
585
+
586
+ wp_enqueue_script(
587
  $id,
588
  $resource,
589
  $dependencies,
590
  $this->version,
591
+ false
592
  );
593
+
594
+ // check if we need to enqueue or localize.
595
+ if ( array_key_exists( $file_name, $this->localized ) ) {
596
+ wp_localize_script(
597
+ $id,
598
+ str_replace( '-', '_', $sanitized ),
599
+ $this->localized[ $file_name ]
600
+ );
601
+ }
602
+ $order ++;
603
+ }// End foreach().
604
+ }// End if().
605
+ }// End if().
606
  }
607
 
608
  /**
609
+ * Sets the styles for public from the module array.
610
  *
611
  * @codeCoverageIgnore
612
  *
613
  * @since 1.0.0
614
  * @access public
615
  */
616
+ public function set_public_styles() {
617
+ $this->set_styles( $this->public_enqueue(), 'pub' );
618
  }
619
 
620
  /**
621
+ * Method that returns an array of scripts and styles to be loaded
622
+ * for the front end part.
 
623
  *
624
  * @since 1.0.0
625
  * @access public
626
+ * @return array
627
  */
628
+ public abstract function public_enqueue();
 
 
629
 
630
  /**
631
  * Sets the scripts for public from the module array.
639
  $this->set_scripts( $this->public_enqueue(), 'pub' );
640
  }
641
 
642
+ /**
643
+ * Method to return URL to child class in a Reflective Way.
644
+ *
645
+ * @codeCoverageIgnore
646
+ *
647
+ * @access protected
648
+ * @return string
649
+ */
650
+ protected function get_url() {
651
+ return plugin_dir_url( $this->get_dir() ) . $this->slug;
652
+ }
653
+
654
+ /**
655
+ * Method to return path to child class in a Reflective Way.
656
+ *
657
+ * @codeCoverageIgnore
658
+ *
659
+ * @since 1.0.0
660
+ * @access protected
661
+ * @return string
662
+ */
663
+ protected function get_dir() {
664
+ $reflector = new ReflectionClass( get_class( $this ) );
665
+
666
+ return dirname( $reflector->getFileName() );
667
+ }
668
+
669
+ /**
670
+ * Utility method to return active theme dir name.
671
+ *
672
+ * @since 1.0.0
673
+ * @access protected
674
+ *
675
+ * @param boolean $is_child Flag for child themes.
676
+ *
677
+ * @return string
678
+ */
679
+ protected function get_active_theme_dir( $is_child = false ) {
680
+ if ( $is_child ) {
681
+ return basename( get_stylesheet_directory() );
682
+ }
683
+
684
+ return basename( get_template_directory() );
685
+ }
686
+
687
  /**
688
  * Utility method to render a view from module.
689
  *
691
  *
692
  * @since 1.0.0
693
  * @access protected
694
+ *
695
  * @param string $view_name The view name w/o the `-tpl.php` part.
696
  * @param array $args An array of arguments to be passed to the view.
697
+ *
698
  * @return string
699
  */
700
  protected function render_view( $view_name, $args = array() ) {
708
  if ( file_exists( $file ) ) {
709
  include $file;
710
  }
711
+
712
  return ob_get_clean();
713
  }
714
+ /**
715
+ * Check if the users is choosen to show this in beta.
716
+ *
717
+ * @param int $percent Amount of users to show.
718
+ *
719
+ * @return bool Random result.
720
+ */
721
+ protected function is_lucky_user( $percent = 10 ) {
722
+ $force_beta = isset( $_GET['force_beta'] ) && $_GET['force_beta'] === 'yes';
723
+ if ( $force_beta ) {
724
+ update_option( 'obfx_beta_show_' . $this->get_slug(), 'yes' );
725
+
726
+ return true;
727
+ }
728
+ $luck = get_option( 'obfx_beta_show_' . $this->get_slug() );
729
+ if ( ! empty( $luck ) ) {
730
+ return $luck === 'yes';
731
+ }
732
+ $luck = rand( 1, 100 );
733
+
734
+ $luck = $luck <= $percent;
735
+ update_option( 'obfx_beta_show_' . $this->get_slug(), $luck ? 'yes' : 'no' );
736
+
737
+ return $luck;
738
+ }
739
  }
core/app/class-orbit-fox-admin.php CHANGED
@@ -356,6 +356,7 @@ class Orbit_Fox_Admin {
356
  'name' => $module->name,
357
  'description' => $module->description,
358
  'checked' => $checked,
 
359
  'confirm_intent' => $module->confirm_intent,
360
  );
361
  $tiles .= $rdh->get_partial( 'module-tile', $data );
@@ -376,6 +377,8 @@ class Orbit_Fox_Admin {
376
  'name' => $module->name,
377
  'active' => $module->get_is_active(),
378
  'description' => $module->description,
 
 
379
  'options_fields' => $options_fields,
380
  )
381
  );
356
  'name' => $module->name,
357
  'description' => $module->description,
358
  'checked' => $checked,
359
+ 'beta' => $module->beta,
360
  'confirm_intent' => $module->confirm_intent,
361
  );
362
  $tiles .= $rdh->get_partial( 'module-tile', $data );
377
  'name' => $module->name,
378
  'active' => $module->get_is_active(),
379
  'description' => $module->description,
380
+ 'show' => $module->show,
381
+ 'no_save' => $module->no_save,
382
  'options_fields' => $options_fields,
383
  )
384
  );
core/app/class-orbit-fox-global-settings.php CHANGED
@@ -69,7 +69,10 @@ class Orbit_Fox_Global_Settings {
69
  'template-directory',
70
  'menu-icons',
71
  'mystock-import',
 
72
  'beaver-widgets',
 
 
73
  )
74
  );
75
  }// End if().
69
  'template-directory',
70
  'menu-icons',
71
  'mystock-import',
72
+ 'policy-notice',
73
  'beaver-widgets',
74
+ 'safe-updates',
75
+ 'image-cdn',
76
  )
77
  );
78
  }// End if().
core/app/helpers/class-orbit-fox-render-helper.php CHANGED
@@ -72,6 +72,60 @@ class Orbit_Fox_Render_Helper {
72
  return ob_get_clean();
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  /**
76
  * Merges specific defaults with general ones.
77
  *
@@ -102,61 +156,46 @@ class Orbit_Fox_Render_Helper {
102
  }
103
 
104
  /**
105
- * Method to set field value.
106
  *
107
  * @since 1.0.0
108
  * @access private
109
  *
110
  * @param array $option The option from the module.
 
111
  *
112
  * @return mixed
113
  */
114
- private function set_field_value( $option = array() ) {
115
- $field_value = $option['default'];
116
- if ( isset( $option['value'] ) && $option['value'] != '' ) {
117
- $field_value = $option['value'];
118
  }
119
 
120
- return $field_value;
121
- }
122
-
123
- /**
124
- * Method to return a title for element if needed.
125
- *
126
- * @since 1.0.0
127
- * @access private
128
- *
129
- * @param string $element_id The option id field.
130
- * @param string $title The option title field.
131
- *
132
- * @return string
133
- */
134
- private function get_title( $element_id, $title ) {
135
- $display_title = '';
136
- if ( $title ) {
137
- $display_title = '<label class="form-label" for="' . $element_id . '">' . $title . '</label>';
138
- }
139
 
140
- return $display_title;
141
  }
142
 
143
  /**
144
- * Method to return a description for element if needed.
145
  *
146
  * @since 1.0.0
147
  * @access private
148
  *
149
- * @param string $description The option description field.
150
  *
151
- * @return string
152
  */
153
- private function get_description( $description ) {
154
- $display_description = '';
155
- if ( $description ) {
156
- $display_description = '<p><small>' . $description . '</small></p>';
157
  }
158
 
159
- return $display_description;
160
  }
161
 
162
  /**
@@ -196,50 +235,42 @@ class Orbit_Fox_Render_Helper {
196
  }
197
 
198
  /**
199
- * DRY method to generate checkbox or radio field types
200
  *
201
  * @since 1.0.0
202
  * @access private
203
  *
204
- * @param string $type The field type ( checkbox | radio ).
205
- * @param string $field_value The field value.
206
- * @param string $checked The checked flag.
207
- * @param string $label The option label.
208
- * @param array $option The option from the module.
209
  *
210
  * @return string
211
  */
212
- private function generate_check_type( $type = 'radio', $field_value, $checked, $label, $option = array() ) {
213
- return '
214
- <label class="form-' . $type . ' ' . $option['class'] . '">
215
- <input type="' . $type . '" name="' . $option['name'] . '" value="' . $field_value . '" ' . $checked . ' />
216
- <i class="form-icon"></i> ' . $label . '
217
- </label>
218
- ';
219
  }
220
 
221
  /**
222
- * Render an input text field.
223
  *
224
  * @since 1.0.0
225
  * @access private
226
  *
227
- * @param array $option The option from the module.
228
- * @param bool $is_email Render an email input instead of text.
229
  *
230
- * @return mixed
231
  */
232
- private function field_text( $option = array(), $is_email = false ) {
233
- $input_type = 'text';
234
- if ( $is_email === true ) {
235
- $input_type = 'email';
236
  }
237
 
238
- $field_value = $this->set_field_value( $option );
239
- $field = '<input class="form-input ' . $option['class'] . '" type="' . esc_attr( $input_type ) . '" id="' . $option['id'] . '" name="' . $option['name'] . '" placeholder="' . $option['placeholder'] . '" value="' . $field_value . '">';
240
- $field = $this->wrap_element( $option, $field );
241
-
242
- return $field;
243
  }
244
 
245
  /**
@@ -314,6 +345,29 @@ class Orbit_Fox_Render_Helper {
314
  return $field;
315
  }
316
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
317
  /**
318
  * Render a checkbox field.
319
  *
@@ -362,6 +416,23 @@ class Orbit_Fox_Render_Helper {
362
  return $field;
363
  }
364
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365
  /**
366
  * Render a toggle field.
367
  *
@@ -376,10 +447,13 @@ class Orbit_Fox_Render_Helper {
376
  if ( ! isset( $option['link-id'] ) ) {
377
  $option['link-id'] = $option['id'];
378
  }
 
 
 
379
  $field = '
380
- <a id="' . esc_attr( $option['link-id'] ) . '" class="' . esc_attr( $option['link-class'] ) . '" href="' . esc_url( $option['url'] ) . '">' .
381
- wp_kses_post( $option['text'] )
382
- . '</a>';
383
 
384
  $field = $this->wrap_element( $option, $field );
385
 
@@ -387,51 +461,24 @@ class Orbit_Fox_Render_Helper {
387
  }
388
 
389
  /**
390
- * Method to render option to a field.
391
  *
392
  * @since 1.0.0
393
- * @access public
394
  *
395
- * @param array $option The option from the module..
 
396
  *
397
  * @return mixed
398
  */
399
- public function render_option( $option = array() ) {
 
400
 
401
- $option = $this->sanitize_option( $option );
402
- switch ( $option['type'] ) {
403
- case 'text':
404
- return $this->field_text( $option );
405
- break;
406
- case 'email':
407
- return $this->field_text( $option, true );
408
- break;
409
- case 'textarea':
410
- return $this->field_textarea( $option );
411
- break;
412
- case 'select':
413
- return $this->field_select( $option );
414
- break;
415
- case 'radio':
416
- return $this->field_radio( $option );
417
- break;
418
- case 'checkbox':
419
- return $this->field_checkbox( $option );
420
- break;
421
- case 'toggle':
422
- return $this->field_toggle( $option );
423
- break;
424
- case 'custom':
425
- return apply_filters( 'obfx_custom_control_' . $option['id'], '' );
426
- break;
427
- case 'link':
428
- return $this->field_link( $option );
429
- break;
430
- default:
431
- return __( 'No option found for provided type', 'themeisle-companion' );
432
- break;
433
- }
434
 
 
435
  }
436
 
437
 
72
  return ob_get_clean();
73
  }
74
 
75
+ /**
76
+ * Method to render option to a field.
77
+ *
78
+ * @since 1.0.0
79
+ * @access public
80
+ *
81
+ * @param array $option The option from the module..
82
+ *
83
+ * @return mixed
84
+ */
85
+ public function render_option( $option = array() ) {
86
+
87
+ $option = $this->sanitize_option( $option );
88
+ switch ( $option['type'] ) {
89
+ case 'text':
90
+ return $this->field_text( $option );
91
+ break;
92
+ case 'email':
93
+ return $this->field_text( $option, true );
94
+ break;
95
+ case 'textarea':
96
+ return $this->field_textarea( $option );
97
+ break;
98
+ case 'select':
99
+ return $this->field_select( $option );
100
+ break;
101
+ case 'radio':
102
+ return $this->field_radio( $option );
103
+ break;
104
+ case 'checkbox':
105
+ return $this->field_checkbox( $option );
106
+ break;
107
+ case 'toggle':
108
+ return $this->field_toggle( $option );
109
+ break;
110
+ case 'title':
111
+ return $this->field_title( $option );
112
+ break;
113
+ case 'custom':
114
+ return apply_filters( 'obfx_custom_control_' . $option['id'], '' );
115
+ break;
116
+ case 'link':
117
+ return $this->field_link( $option );
118
+ break;
119
+ case 'password':
120
+ return $this->field_password( $option );
121
+ break;
122
+ default:
123
+ return __( 'No option found for provided type', 'themeisle-companion' );
124
+ break;
125
+ }
126
+
127
+ }
128
+
129
  /**
130
  * Merges specific defaults with general ones.
131
  *
156
  }
157
 
158
  /**
159
+ * Render an input text field.
160
  *
161
  * @since 1.0.0
162
  * @access private
163
  *
164
  * @param array $option The option from the module.
165
+ * @param bool $is_email Render an email input instead of text.
166
  *
167
  * @return mixed
168
  */
169
+ private function field_text( $option = array(), $is_email = false ) {
170
+ $input_type = 'text';
171
+ if ( $is_email === true ) {
172
+ $input_type = 'email';
173
  }
174
 
175
+ $field_value = $this->set_field_value( $option );
176
+ $field = '<input class="form-input ' . $option['class'] . '" type="' . esc_attr( $input_type ) . '" id="' . $option['id'] . '" name="' . $option['name'] . '" placeholder="' . $option['placeholder'] . '" value="' . $field_value . '">';
177
+ $field = $this->wrap_element( $option, $field );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
 
179
+ return $field;
180
  }
181
 
182
  /**
183
+ * Method to set field value.
184
  *
185
  * @since 1.0.0
186
  * @access private
187
  *
188
+ * @param array $option The option from the module.
189
  *
190
+ * @return mixed
191
  */
192
+ private function set_field_value( $option = array() ) {
193
+ $field_value = $option['default'];
194
+ if ( isset( $option['value'] ) && $option['value'] != '' ) {
195
+ $field_value = $option['value'];
196
  }
197
 
198
+ return $field_value;
199
  }
200
 
201
  /**
235
  }
236
 
237
  /**
238
+ * Method to return a title for element if needed.
239
  *
240
  * @since 1.0.0
241
  * @access private
242
  *
243
+ * @param string $element_id The option id field.
244
+ * @param string $title The option title field.
 
 
 
245
  *
246
  * @return string
247
  */
248
+ private function get_title( $element_id, $title ) {
249
+ $display_title = '';
250
+ if ( $title ) {
251
+ $display_title = '<label class="form-label" for="' . $element_id . '">' . $title . '</label>';
252
+ }
253
+
254
+ return $display_title;
255
  }
256
 
257
  /**
258
+ * Method to return a description for element if needed.
259
  *
260
  * @since 1.0.0
261
  * @access private
262
  *
263
+ * @param string $description The option description field.
 
264
  *
265
+ * @return string
266
  */
267
+ private function get_description( $description ) {
268
+ $display_description = '';
269
+ if ( $description ) {
270
+ $display_description = '<p><small>' . $description . '</small></p>';
271
  }
272
 
273
+ return $display_description;
 
 
 
 
274
  }
275
 
276
  /**
345
  return $field;
346
  }
347
 
348
+ /**
349
+ * DRY method to generate checkbox or radio field types
350
+ *
351
+ * @since 1.0.0
352
+ * @access private
353
+ *
354
+ * @param string $type The field type ( checkbox | radio ).
355
+ * @param string $field_value The field value.
356
+ * @param string $checked The checked flag.
357
+ * @param string $label The option label.
358
+ * @param array $option The option from the module.
359
+ *
360
+ * @return string
361
+ */
362
+ private function generate_check_type( $type = 'radio', $field_value, $checked, $label, $option = array() ) {
363
+ return '
364
+ <label class="form-' . $type . ' ' . $option['class'] . '">
365
+ <input type="' . $type . '" name="' . $option['name'] . '" value="' . $field_value . '" ' . $checked . ' />
366
+ <i class="form-icon"></i> ' . $label . '
367
+ </label>
368
+ ';
369
+ }
370
+
371
  /**
372
  * Render a checkbox field.
373
  *
416
  return $field;
417
  }
418
 
419
+ /**
420
+ * Render a title field.
421
+ *
422
+ * @since 2.5.0
423
+ * @access private
424
+ *
425
+ * @param array $option The option from the module.
426
+ *
427
+ * @return mixed
428
+ */
429
+ private function field_title( $option = array() ) {
430
+
431
+ $field = $this->wrap_element( $option, '' );
432
+
433
+ return $field;
434
+ }
435
+
436
  /**
437
  * Render a toggle field.
438
  *
447
  if ( ! isset( $option['link-id'] ) ) {
448
  $option['link-id'] = $option['id'];
449
  }
450
+ if ( ! isset( $option['target'] ) ) {
451
+ $option['target'] = '';
452
+ }
453
  $field = '
454
+ <a id="' . esc_attr( $option['link-id'] ) . '" target="' . esc_attr( $option['target'] ) . '" class="' . esc_attr( isset( $option['link-class'] ) ? $option['link-class'] : '' ) . '" href="' . esc_url( $option['url'] ) . '">' .
455
+ wp_kses_post( $option['text'] )
456
+ . '</a>';
457
 
458
  $field = $this->wrap_element( $option, $field );
459
 
461
  }
462
 
463
  /**
464
+ * Render an input password field.
465
  *
466
  * @since 1.0.0
467
+ * @access private
468
  *
469
+ * @param array $option The option from the module.
470
+ * @param bool $is_email Render an email input instead of text.
471
  *
472
  * @return mixed
473
  */
474
+ private function field_password( $option = array(), $is_email = false ) {
475
+ $input_type = 'password';
476
 
477
+ $field_value = $this->set_field_value( $option );
478
+ $field = '<input class="form-input ' . $option['class'] . '" type="' . esc_attr( $input_type ) . '" id="' . $option['id'] . '" name="' . $option['name'] . '" placeholder="' . $option['placeholder'] . '" value="' . $field_value . '">';
479
+ $field = $this->wrap_element( $option, $field );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
480
 
481
+ return $field;
482
  }
483
 
484
 
core/app/views/partials/module-panel-tpl.php CHANGED
@@ -30,17 +30,24 @@ if ( ! isset( $description ) ) {
30
  if ( ! isset( $options_fields ) ) {
31
  $options_fields = __( 'No options provided.', 'themeisle-companion' );
32
  }
33
-
34
- $display = '';
35
  $disabled_fields = '';
36
  if ( ! $active ) {
37
- $display = 'style="display: none;"';
38
  $disabled_fields = 'disabled';
39
  }
 
 
 
 
 
 
 
40
  ?>
41
- <div id="obfx-mod-<?php echo $slug; ?>" class="panel options" <?php echo $display; ?>>
42
  <div class="panel-header">
43
- <button class="btn btn-action circle btn-expand" style="float: right; margin-right: 10px;">
 
44
  <i class="dashicons dashicons-arrow-down-alt2"></i>
45
  </button>
46
  <div class="panel-title"><?php echo $name; ?></div>
@@ -50,7 +57,7 @@ if ( ! $active ) {
50
  <span>Mock text for Toast Element</span>
51
  </div>
52
  </div>
53
- <form id="obfx-module-form-<?php echo $slug; ?>" class="obfx-module-form">
54
  <fieldset <?php echo $disabled_fields; ?> >
55
  <input type="hidden" name="module-slug" value="<?php echo $slug; ?>">
56
  <input type="hidden" name="noance" value="<?php echo $noance; ?>">
@@ -58,10 +65,12 @@ if ( ! $active ) {
58
  <?php echo $options_fields; ?>
59
  <div class="divider"></div>
60
  </div>
 
61
  <div class="panel-footer text-right">
62
  <button class="btn obfx-mod-btn-cancel" disabled>Cancel</button>
63
  <button type="submit" class="btn btn-primary obfx-mod-btn-save" disabled>Save</button>
64
  </div>
 
65
  </fieldset>
66
  </form>
67
  </div>
30
  if ( ! isset( $options_fields ) ) {
31
  $options_fields = __( 'No options provided.', 'themeisle-companion' );
32
  }
33
+ $styles = array();
 
34
  $disabled_fields = '';
35
  if ( ! $active ) {
36
+ $styles [] = 'display: none';
37
  $disabled_fields = 'disabled';
38
  }
39
+ $btn_class = '';
40
+ if ( isset( $show ) && $show ) {
41
+ $btn_class = 'active';
42
+
43
+ }
44
+ $styles = sprintf( 'style="%s"', implode( ':', $styles ) );
45
+
46
  ?>
47
+ <div id="obfx-mod-<?php echo $slug; ?>" class="panel options <?php echo esc_attr( $btn_class ); ?>" <?php echo $styles; ?>>
48
  <div class="panel-header">
49
+ <button class="btn btn-action circle btn-expand <?php echo esc_attr( $btn_class ); ?>"
50
+ style="float: right; margin-right: 10px;">
51
  <i class="dashicons dashicons-arrow-down-alt2"></i>
52
  </button>
53
  <div class="panel-title"><?php echo $name; ?></div>
57
  <span>Mock text for Toast Element</span>
58
  </div>
59
  </div>
60
+ <form id="obfx-module-form-<?php echo $slug; ?>" class="obfx-module-form <?php echo esc_attr( $btn_class ); ?> ">
61
  <fieldset <?php echo $disabled_fields; ?> >
62
  <input type="hidden" name="module-slug" value="<?php echo $slug; ?>">
63
  <input type="hidden" name="noance" value="<?php echo $noance; ?>">
65
  <?php echo $options_fields; ?>
66
  <div class="divider"></div>
67
  </div>
68
+ <?php if ( isset( $no_save ) && $no_save === false ) : ?>
69
  <div class="panel-footer text-right">
70
  <button class="btn obfx-mod-btn-cancel" disabled>Cancel</button>
71
  <button type="submit" class="btn btn-primary obfx-mod-btn-save" disabled>Save</button>
72
  </div>
73
+ <?php endif; ?>
74
  </fieldset>
75
  </form>
76
  </div>
core/app/views/partials/module-tile-tpl.php CHANGED
@@ -21,13 +21,16 @@ if ( ! isset( $description ) ) {
21
  if ( ! isset( $checked ) ) {
22
  $checked = '';
23
  }
 
 
 
24
 
25
  $toggle_class = 'obfx-mod-switch';
26
 
27
  if ( ! empty( $confirm_intent ) ) {
28
 
29
  $toggle_class .= ' obfx-mod-confirm-intent';
30
- $modal = '
31
  <div id="' . esc_attr( $slug ) . '" class="modal">
32
  <a href="#close" class="close-confirm-intent modal-overlay" aria-label="Close"></a>
33
  <div class="modal-container">
@@ -58,9 +61,14 @@ $noance = wp_create_nonce( 'obfx_activate_mod_' . $slug );
58
  <div class="tile-action">
59
  <div class="form-group">
60
  <label class="form-switch">
61
- <input class="<?php echo esc_attr( $toggle_class ); ?>" type="checkbox" name="<?php echo $slug; ?>" value="<?php echo $noance; ?>" <?php echo $checked; ?> >
62
- <i class="form-icon"></i><?php echo __( 'Activate', 'themeisle-companion' ); ?>
 
 
63
  </label>
 
 
 
64
  <?php
65
  if ( ! empty( $modal ) ) {
66
  echo wp_kses_post( $modal );
21
  if ( ! isset( $checked ) ) {
22
  $checked = '';
23
  }
24
+ if ( ! isset( $beta ) ) {
25
+ $beta = false;
26
+ }
27
 
28
  $toggle_class = 'obfx-mod-switch';
29
 
30
  if ( ! empty( $confirm_intent ) ) {
31
 
32
  $toggle_class .= ' obfx-mod-confirm-intent';
33
+ $modal = '
34
  <div id="' . esc_attr( $slug ) . '" class="modal">
35
  <a href="#close" class="close-confirm-intent modal-overlay" aria-label="Close"></a>
36
  <div class="modal-container">
61
  <div class="tile-action">
62
  <div class="form-group">
63
  <label class="form-switch">
64
+ <input class="<?php echo esc_attr( $toggle_class ); ?>" type="checkbox" name="<?php echo $slug; ?>"
65
+ value="<?php echo $noance; ?>" <?php echo $checked; ?> >
66
+ <i class="form-icon"></i><?php echo __( 'Activate', 'themeisle-companion' ); ?>
67
+
68
  </label>
69
+ <?php if ( $beta ) { ?>
70
+ <p class="obfx-beta-module"><?php echo __( 'Beta module', 'themeisle-companion' ); ?></p>
71
+ <?php } ?>
72
  <?php
73
  if ( ! empty( $modal ) ) {
74
  echo wp_kses_post( $modal );
core/assets/css/orbit-fox-admin.css CHANGED
@@ -8,7 +8,7 @@
8
  * Extends Spectre.css Library
9
  */
10
  /*
11
- Version: 2.4.7
12
  */
13
 
14
  /* Document
@@ -708,57 +708,61 @@ html {
708
  }
709
 
710
  .obfx-wrapper .btn.btn-success {
711
- background: #32b643;
712
  border-color: #2faa3f;
713
- color: #fff
 
714
  }
715
 
716
  .obfx-wrapper .btn.btn-success:focus {
717
- box-shadow: 0 0 0 .1rem rgba(50,182,67,.2)
718
  }
719
 
720
- .obfx-wrapper .btn.btn-success:focus,.obfx-wrapper .btn.btn-success:hover {
721
- background: #30ae40;
722
  border-color: #2da23c;
723
- color: #fff
 
724
  }
725
 
726
- .obfx-wrapper .btn.btn-success.active,.obfx-wrapper .btn.btn-success:active {
727
- background: #2a9a39;
728
  border-color: #278e34;
729
- color: #fff
 
730
  }
731
 
732
  .obfx-wrapper .btn.btn-success.loading::after {
733
  border-bottom-color: #fff;
734
- border-left-color: #fff
735
  }
736
 
737
  .obfx-wrapper .btn.btn-error {
738
- background: #e85600;
739
  border-color: #d95000;
740
- color: #fff
 
741
  }
742
 
743
  .obfx-wrapper .btn.btn-error:focus {
744
- box-shadow: 0 0 0 .1rem rgba(232,86,0,.2)
745
  }
746
 
747
- .obfx-wrapper .btn.btn-error:focus,.obfx-wrapper .btn.btn-error:hover {
748
- background: #de5200;
749
  border-color: #cf4d00;
750
- color: #fff
 
751
  }
752
 
753
- .obfx-wrapper .btn.btn-error.active,.obfx-wrapper .btn.btn-error:active {
754
- background: #c44900;
755
  border-color: #b54300;
756
- color: #fff
 
757
  }
758
 
759
  .obfx-wrapper .btn.btn-error.loading::after {
760
  border-bottom-color: #fff;
761
- border-left-color: #fff
762
  }
763
 
764
  .obfx-wrapper .btn.btn-link {
@@ -931,10 +935,6 @@ html {
931
  color: #acb3c2;
932
  }
933
 
934
- .obfx-wrapper .form-input::-moz-placeholder {
935
- color: #acb3c2;
936
- }
937
-
938
  .obfx-wrapper .form-input:-ms-input-placeholder {
939
  color: #acb3c2;
940
  }
@@ -2670,7 +2670,7 @@ html {
2670
 
2671
  .obfx-wrapper .modal-container {
2672
  display: block;
2673
- padding: 1rem .8rem;
2674
  border-radius: 0.2rem;
2675
  background: #fff;
2676
  box-shadow: 0 0.4rem 1rem rgba(69, 77, 93, 0.3);
@@ -3636,16 +3636,28 @@ html {
3636
  transition: -webkit-transform 0.5s ease;
3637
  transition: transform 0.5s ease;
3638
  transition: transform 0.5s ease, -webkit-transform 0.5s ease;
3639
- -webkit-transform: rotate( 180deg );
3640
- -ms-transform: rotate( 180deg );
3641
- transform: rotate( 180deg );
 
 
 
 
 
 
 
 
 
 
 
 
3642
  }
3643
 
3644
  .obfx-wrapper .panel.options {
3645
  overflow: hidden;
3646
- height: 75px;
3647
- -webkit-transition: height .3s;
3648
- transition: height .3s;
3649
  }
3650
 
3651
  /** TEMPORARY FIX FOR SOCIAL SHARING STYLE **/
@@ -3679,11 +3691,11 @@ html {
3679
  }
3680
 
3681
  .obfx-google {
3682
- max-width: 20px;
3683
  overflow: hidden;
3684
- width:16px;
3685
- top: -2px;
3686
  position: relative;
 
 
 
3687
  margin-right: 5px;
3688
  font-size: 25px;
3689
  }
@@ -3705,4 +3717,43 @@ html {
3705
  .obfx-row {
3706
  padding: 10px 0;
3707
  }
3708
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  * Extends Spectre.css Library
9
  */
10
  /*
11
+ Version: 2.5.0
12
  */
13
 
14
  /* Document
708
  }
709
 
710
  .obfx-wrapper .btn.btn-success {
 
711
  border-color: #2faa3f;
712
+ color: #fff;
713
+ background: #32b643;
714
  }
715
 
716
  .obfx-wrapper .btn.btn-success:focus {
717
+ box-shadow: 0 0 0 0.1rem rgba(50, 182, 67, 0.2);
718
  }
719
 
720
+ .obfx-wrapper .btn.btn-success:focus,
721
+ .obfx-wrapper .btn.btn-success:hover {
722
  border-color: #2da23c;
723
+ color: #fff;
724
+ background: #30ae40;
725
  }
726
 
727
+ .obfx-wrapper .btn.btn-success.active,
728
+ .obfx-wrapper .btn.btn-success:active {
729
  border-color: #278e34;
730
+ color: #fff;
731
+ background: #2a9a39;
732
  }
733
 
734
  .obfx-wrapper .btn.btn-success.loading::after {
735
  border-bottom-color: #fff;
736
+ border-left-color: #fff;
737
  }
738
 
739
  .obfx-wrapper .btn.btn-error {
 
740
  border-color: #d95000;
741
+ color: #fff;
742
+ background: #e85600;
743
  }
744
 
745
  .obfx-wrapper .btn.btn-error:focus {
746
+ box-shadow: 0 0 0 0.1rem rgba(232, 86, 0, 0.2);
747
  }
748
 
749
+ .obfx-wrapper .btn.btn-error:focus,
750
+ .obfx-wrapper .btn.btn-error:hover {
751
  border-color: #cf4d00;
752
+ color: #fff;
753
+ background: #de5200;
754
  }
755
 
756
+ .obfx-wrapper .btn.btn-error.active,
757
+ .obfx-wrapper .btn.btn-error:active {
758
  border-color: #b54300;
759
+ color: #fff;
760
+ background: #c44900;
761
  }
762
 
763
  .obfx-wrapper .btn.btn-error.loading::after {
764
  border-bottom-color: #fff;
765
+ border-left-color: #fff;
766
  }
767
 
768
  .obfx-wrapper .btn.btn-link {
935
  color: #acb3c2;
936
  }
937
 
 
 
 
 
938
  .obfx-wrapper .form-input:-ms-input-placeholder {
939
  color: #acb3c2;
940
  }
2670
 
2671
  .obfx-wrapper .modal-container {
2672
  display: block;
2673
+ padding: 1rem 0.8rem;
2674
  border-radius: 0.2rem;
2675
  background: #fff;
2676
  box-shadow: 0 0.4rem 1rem rgba(69, 77, 93, 0.3);
3636
  transition: -webkit-transform 0.5s ease;
3637
  transition: transform 0.5s ease;
3638
  transition: transform 0.5s ease, -webkit-transform 0.5s ease;
3639
+ -webkit-transform: rotate(180deg);
3640
+ -ms-transform: rotate(180deg);
3641
+ transform: rotate(180deg);
3642
+ }
3643
+
3644
+ .obfx-wrapper .panel.options .obfx-module-form.active {
3645
+ display: block;
3646
+ }
3647
+
3648
+ .obfx-wrapper .panel.options .obfx-module-form {
3649
+ display: none;
3650
+ }
3651
+
3652
+ .obfx-wrapper .panel.options.active {
3653
+ max-height: 1000px;
3654
  }
3655
 
3656
  .obfx-wrapper .panel.options {
3657
  overflow: hidden;
3658
+ max-height: 90px;
3659
+ -webkit-transition: max-height 0.3s ease-out;
3660
+ transition: max-height 0.3s ease-out;
3661
  }
3662
 
3663
  /** TEMPORARY FIX FOR SOCIAL SHARING STYLE **/
3691
  }
3692
 
3693
  .obfx-google {
 
3694
  overflow: hidden;
 
 
3695
  position: relative;
3696
+ top: -2px;
3697
+ width: 16px;
3698
+ max-width: 20px;
3699
  margin-right: 5px;
3700
  font-size: 25px;
3701
  }
3717
  .obfx-row {
3718
  padding: 10px 0;
3719
  }
3720
+ }
3721
+
3722
+ .obfx-wrapper p.obfx-beta-module {
3723
+ color: #ca4a1f;
3724
+ font-size: 80%;
3725
+ line-height: 1.8rem;
3726
+ text-align: center;
3727
+ }
3728
+
3729
+ .obfx-img-logout {
3730
+ position: relative;
3731
+ top: -15px;
3732
+ }
3733
+
3734
+ #obfx-register-service {
3735
+ position: absolute;
3736
+ left: 270px;
3737
+ }
3738
+
3739
+ .obfx-loggedin-show {
3740
+ display: none;
3741
+ }
3742
+
3743
+ .obfx-img-logged-in.obfx-loggedin-hide {
3744
+ display: none;
3745
+ }
3746
+
3747
+ .obfx-img-logged-in.obfx-loggedin-show {
3748
+ display: block;
3749
+ }
3750
+
3751
+ .obfx-img-cdn-replacer-switch {
3752
+ width: 70%;
3753
+ }
3754
+
3755
+ .obfx-sf-feedback-notice {
3756
+ width: 100%;
3757
+ margin-bottom: 10px;
3758
+ text-align: center;
3759
+ }
core/assets/js/orbit-fox-admin.js CHANGED
@@ -50,11 +50,13 @@ var obfx_admin = function ( $ ) {
50
  $(
51
  function () {
52
  // Scroll to module if url hash.
53
- $(document).ready(function() {
54
- var hash = $( '#' + window.location.hash.substr( 1 ) );
55
- hash.find('.btn-expand').click();
56
- scrollToAnchor( hash );
57
- });
 
 
58
 
59
  $( '.obfx-mod-switch' ).on(
60
  'click', function () {
@@ -85,21 +87,21 @@ var obfx_admin = function ( $ ) {
85
  formSwitch.removeClass( 'loading' );
86
  if ( response.type === 'success' ) {
87
  var modulePanel = $( '#obfx-mod-' + name );
88
- if ( checked ) {
89
- $( modulePanel ).find( 'fieldset' ).removeAttr( 'disabled' );
90
- $( modulePanel ).show();
91
- if ( modal ) {
92
- modal.addClass( 'active' );
93
- } else {
94
- $( modulePanel ).find( '.btn-expand' ).click();
95
- scrollToAnchor( modulePanel );
96
- }
97
  } else {
98
- $( modulePanel ).hide();
99
- $( modulePanel ).find( 'fieldset' ).attr( 'disabled', true );
100
  }
 
 
 
 
101
  } else {
102
- switch_ref.attr( 'checked', !switch_ref.attr( 'checked' ) );
103
  }
104
  }, 'json'
105
  );
@@ -107,7 +109,7 @@ var obfx_admin = function ( $ ) {
107
  );
108
 
109
  function scrollToAnchor(anchor_id){
110
- if( anchor_id.length ) {
111
  $( 'html,body' ).animate( { scrollTop: anchor_id.offset().top }, 'slow' );
112
  }
113
  }
@@ -120,10 +122,10 @@ var obfx_admin = function ( $ ) {
120
  var name = switch_ref.attr( 'name' );
121
  var optionsPanel = $( '#obfx-mod-' + name );
122
  optionsPanel.find( '.btn-expand' ).click();
123
- scrollToAnchor(optionsPanel);
124
- optionsPanel.find( '.form-input:first-of-type' ).focus();
125
 
126
- }
127
  );
128
 
129
  $( '.close-confirm-intent' ).on(
@@ -149,11 +151,11 @@ var obfx_admin = function ( $ ) {
149
  'click', function () {
150
  if ( $( this ).hasClass( 'active' ) ) {
151
  $( this ).removeClass( 'active' );
152
- $( this ).closest( '.panel-header' ).siblings( '.obfx-module-form' ).removeClass( 'active' );
153
- $( this ).closest( '.panel.options' ).css( 'height', '75px' );
154
  } else {
155
  $( this ).addClass( 'active' );
156
- $( this ).closest( '.panel.options' ).css( 'height', 'auto' );
157
  }
158
  }
159
  );
50
  $(
51
  function () {
52
  // Scroll to module if url hash.
53
+ $( document ).ready(
54
+ function() {
55
+ var hash = $( '#' + window.location.hash.substr( 1 ) );
56
+ hash.find( '.btn-expand' ).click();
57
+ scrollToAnchor( hash );
58
+ }
59
+ );
60
 
61
  $( '.obfx-mod-switch' ).on(
62
  'click', function () {
87
  formSwitch.removeClass( 'loading' );
88
  if ( response.type === 'success' ) {
89
  var modulePanel = $( '#obfx-mod-' + name );
90
+ if ( checked ) {
91
+ $( modulePanel ).find( 'fieldset' ).removeAttr( 'disabled' );
92
+ $( modulePanel ).show();
93
+ if ( modal ) {
94
+ modal.addClass( 'active' );
 
 
 
 
95
  } else {
96
+ $( modulePanel ).find( '.btn-expand' ).click();
97
+ scrollToAnchor( modulePanel );
98
  }
99
+ } else {
100
+ $( modulePanel ).hide();
101
+ $( modulePanel ).find( 'fieldset' ).attr( 'disabled', true );
102
+ }
103
  } else {
104
+ switch_ref.attr( 'checked', ! switch_ref.attr( 'checked' ) );
105
  }
106
  }, 'json'
107
  );
109
  );
110
 
111
  function scrollToAnchor(anchor_id){
112
+ if ( anchor_id.length ) {
113
  $( 'html,body' ).animate( { scrollTop: anchor_id.offset().top }, 'slow' );
114
  }
115
  }
122
  var name = switch_ref.attr( 'name' );
123
  var optionsPanel = $( '#obfx-mod-' + name );
124
  optionsPanel.find( '.btn-expand' ).click();
125
+ scrollToAnchor( optionsPanel );
126
+ optionsPanel.find( '.form-input:first-of-type' ).focus();
127
 
128
+ }
129
  );
130
 
131
  $( '.close-confirm-intent' ).on(
151
  'click', function () {
152
  if ( $( this ).hasClass( 'active' ) ) {
153
  $( this ).removeClass( 'active' );
154
+ $( this ).closest( '.panel-header' ).siblings( '.obfx-module-form' ).removeClass( 'active' ).parent().removeClass('active');
155
+
156
  } else {
157
  $( this ).addClass( 'active' );
158
+ $( this ).closest( '.panel-header' ).siblings( '.obfx-module-form' ).addClass( 'active' ).parent().addClass( 'active' );
159
  }
160
  }
161
  );
core/includes/class-orbit-fox.php CHANGED
@@ -69,7 +69,7 @@ class Orbit_Fox {
69
 
70
  $this->plugin_name = 'orbit-fox';
71
 
72
- $this->version = '2.4.7';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
69
 
70
  $this->plugin_name = 'orbit-fox';
71
 
72
+ $this->version = '2.5.0';
73
 
74
  $this->load_dependencies();
75
  $this->set_locale();
languages/themeisle-companion.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Orbit Fox Companion 2.2.7\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Codeinwp/orbit-fox/issues\n"
7
- "POT-Creation-Date: 2018-01-11 15:29:17+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -25,7 +25,7 @@ msgstr ""
25
  "X-Textdomain-Support: yes\n"
26
 
27
  #: obfx_modules/beaver-widgets/modules/services/services.php:64
28
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:426
29
  msgid "1"
30
  msgstr ""
31
 
@@ -45,7 +45,7 @@ msgstr ""
45
  msgid "5"
46
  msgstr ""
47
 
48
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:167
49
  msgid "50"
50
  msgstr ""
51
 
@@ -61,52 +61,62 @@ msgstr ""
61
  msgid "General Settings"
62
  msgstr ""
63
 
64
- #: core/app/class-orbit-fox-admin.php:156
65
- #: core/app/class-orbit-fox-admin.php:212
 
 
 
 
 
 
 
 
 
 
66
  msgid "Could not process the request!"
67
  msgstr ""
68
 
69
- #: core/app/class-orbit-fox-admin.php:182
70
  msgid "No module found! No data was updated."
71
  msgstr ""
72
 
73
- #: core/app/class-orbit-fox-admin.php:188
74
  msgid "Something went wrong, data might not be saved!"
75
  msgstr ""
76
 
77
- #: core/app/class-orbit-fox-admin.php:192
78
  msgid "Options updated, successfully!"
79
  msgstr ""
80
 
81
- #: core/app/class-orbit-fox-admin.php:238
82
  msgid "No module found!"
83
  msgstr ""
84
 
85
- #: core/app/class-orbit-fox-admin.php:242
86
  msgid "Something went wrong, can not change module status!"
87
  msgstr ""
88
 
89
- #: core/app/class-orbit-fox-admin.php:246
90
  msgid "Module status changed!"
91
  msgstr ""
92
 
93
- #: core/app/class-orbit-fox-admin.php:338
94
  msgid "No modules found."
95
  msgstr ""
96
 
97
- #: core/app/class-orbit-fox-admin.php:339
98
  msgid "Please contact support for more help."
99
  msgstr ""
100
 
101
- #: core/app/class-orbit-fox-admin.php:346
102
  msgid "No active modules."
103
  msgstr ""
104
 
105
- #: core/app/class-orbit-fox-admin.php:347
106
  msgid "Activate a module using the toggles above."
107
  msgstr ""
108
 
109
- #: core/app/helpers/class-orbit-fox-render-helper.php:356
110
  msgid "No option found for provided type"
111
  msgstr ""
112
 
@@ -155,10 +165,18 @@ msgid "Module Description ..."
155
  msgstr ""
156
 
157
  #: core/app/views/partials/module-tile-tpl.php:42
158
- #: obfx_modules/template-directory/init.php:423
 
 
 
 
159
  msgid "Activate"
160
  msgstr ""
161
 
 
 
 
 
162
  #: obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle_field.php:26
163
  msgid "Yes"
164
  msgstr ""
@@ -172,15 +190,15 @@ msgid "Margins"
172
  msgstr ""
173
 
174
  #: obfx_modules/beaver-widgets/inc/common-functions.php:26
175
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:739
176
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:797
177
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:477
178
  msgid "Padding"
179
  msgstr ""
180
 
181
  #: obfx_modules/beaver-widgets/inc/common-functions.php:30
182
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:191
183
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:190
184
  msgid "Top"
185
  msgstr ""
186
 
@@ -209,12 +227,12 @@ msgstr ""
209
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:187
210
  #: obfx_modules/beaver-widgets/modules/services/services.php:106
211
  #: obfx_modules/beaver-widgets/modules/services/services.php:185
212
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:553
213
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:589
214
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:635
215
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:274
216
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:186
217
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:295
218
  msgid "Left"
219
  msgstr ""
220
 
@@ -227,17 +245,17 @@ msgstr ""
227
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:188
228
  #: obfx_modules/beaver-widgets/modules/services/services.php:108
229
  #: obfx_modules/beaver-widgets/modules/services/services.php:187
230
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:561
231
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:597
232
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:643
233
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:282
234
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:194
235
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:303
236
  msgid "Right"
237
  msgstr ""
238
 
239
  #: obfx_modules/beaver-widgets/inc/common-functions.php:64
240
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:776
241
  msgid "Typography"
242
  msgstr ""
243
 
@@ -274,9 +292,9 @@ msgid "Font style"
274
  msgstr ""
275
 
276
  #: obfx_modules/beaver-widgets/inc/common-functions.php:100
277
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1137
278
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:821
279
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:512
280
  msgid "Normal"
281
  msgstr ""
282
 
@@ -297,11 +315,15 @@ msgid "Letter spacing"
297
  msgstr ""
298
 
299
  #: obfx_modules/beaver-widgets/init.php:25
300
- msgid "Beaver Builder Widgets"
 
301
  msgstr ""
302
 
303
  #: obfx_modules/beaver-widgets/init.php:26
304
- msgid "Custom Beaver Builder Widgets."
 
 
 
305
  msgstr ""
306
 
307
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/frontend.php:100
@@ -314,7 +336,7 @@ msgid "Custom Query"
314
  msgstr ""
315
 
316
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:32
317
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:162
318
  msgid "Post Type"
319
  msgstr ""
320
 
@@ -337,7 +359,7 @@ msgstr ""
337
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:54
338
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:206
339
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-testimonial.php:168
340
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:410
341
  msgid "Author"
342
  msgstr ""
343
 
@@ -347,8 +369,8 @@ msgstr ""
347
 
348
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:56
349
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:207
350
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:246
351
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:411
352
  msgid "Date"
353
  msgstr ""
354
 
@@ -373,7 +395,7 @@ msgid "Meta Value (Numeric)"
373
  msgstr ""
374
 
375
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:62
376
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:250
377
  msgid "Random"
378
  msgstr ""
379
 
@@ -385,13 +407,16 @@ msgstr ""
385
  #: obfx_modules/companion-legacy/inc/rhea/widgets/hours.widget.php:202
386
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:87
387
  #: obfx_modules/companion-legacy/inc/rhea/widgets/progress-bar.widget.php:62
 
 
 
388
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:167
389
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:247
390
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:331
391
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:856
392
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:96
393
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:97
394
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:317
395
  msgid "Title"
396
  msgstr ""
397
 
@@ -451,13 +476,13 @@ msgid "Display type"
451
  msgstr ""
452
 
453
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:205
454
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:202
455
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:405
456
  msgid "Grid"
457
  msgstr ""
458
 
459
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:206
460
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:203
461
  msgid "List"
462
  msgstr ""
463
 
@@ -501,6 +526,9 @@ msgstr ""
501
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:28
502
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:33
503
  #: obfx_modules/beaver-widgets/modules/services/services.php:33
 
 
 
504
  msgid "Orbit Fox Modules"
505
  msgstr ""
506
 
@@ -540,11 +568,11 @@ msgstr ""
540
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:186
541
  #: obfx_modules/beaver-widgets/modules/services/services.php:107
542
  #: obfx_modules/beaver-widgets/modules/services/services.php:186
543
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:557
544
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:593
545
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:639
546
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:278
547
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:299
548
  msgid "Center"
549
  msgstr ""
550
 
@@ -600,8 +628,8 @@ msgstr ""
600
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:156
601
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:74
602
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:97
603
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:115
604
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:143
605
  msgid "p"
606
  msgstr ""
607
 
@@ -626,24 +654,25 @@ msgid "If icons doesn't show you have to enqueue FontAwesome in your theme."
626
  msgstr ""
627
 
628
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:203
629
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:404
630
  msgid "Display"
631
  msgstr ""
632
 
633
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:208
634
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:173
635
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:186
636
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:412
 
637
  msgid "Category"
638
  msgstr ""
639
 
640
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:209
641
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:413
642
  msgid "Tags"
643
  msgstr ""
644
 
645
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:210
646
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:414
647
  msgid "Comments"
648
  msgstr ""
649
 
@@ -672,8 +701,8 @@ msgid "Read more text"
672
  msgstr ""
673
 
674
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:273
675
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:523
676
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:524
677
  msgid "Read more"
678
  msgstr ""
679
 
@@ -705,9 +734,9 @@ msgstr ""
705
 
706
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:49
707
  #: obfx_modules/beaver-widgets/modules/services/services.php:47
708
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:466
709
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:975
710
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:281
711
  msgid "Content"
712
  msgstr ""
713
 
@@ -721,50 +750,58 @@ msgstr ""
721
 
722
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:68
723
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:91
724
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:109
725
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:137
726
  msgid "h1"
727
  msgstr ""
728
 
729
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:69
730
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:92
731
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:110
732
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:138
733
  msgid "h2"
734
  msgstr ""
735
 
736
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:70
737
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:93
738
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:111
739
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:139
740
  msgid "h3"
741
  msgstr ""
742
 
743
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:71
744
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:94
745
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:112
746
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:140
747
  msgid "h4"
748
  msgstr ""
749
 
750
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:72
751
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:95
752
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:113
753
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:141
754
  msgid "h5"
755
  msgstr ""
756
 
757
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:73
758
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:96
759
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:114
760
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:142
761
  msgid "h6"
762
  msgstr ""
763
 
764
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:79
 
 
 
 
 
 
765
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:91
766
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:124
767
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:125
 
 
768
  msgid "Subtitle"
769
  msgstr ""
770
 
@@ -777,24 +814,24 @@ msgid "Subtitle tag"
777
  msgstr ""
778
 
779
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:103
780
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:157
781
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:471
782
  msgid "Price Tag"
783
  msgstr ""
784
 
785
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:107
786
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:495
787
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1032
788
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:165
789
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:166
790
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:535
791
  msgid "Price"
792
  msgstr ""
793
 
794
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:116
795
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:176
796
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:177
797
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:501
798
  msgid "Currency"
799
  msgstr ""
800
 
@@ -803,26 +840,26 @@ msgid "Currency position"
803
  msgstr ""
804
 
805
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:128
806
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:189
807
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:347
808
  msgid "Before"
809
  msgstr ""
810
 
811
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:129
812
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:190
813
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:348
814
  msgid "After"
815
  msgstr ""
816
 
817
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:134
818
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:199
819
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:569
820
  msgid "Period"
821
  msgstr ""
822
 
823
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:135
824
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:200
825
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:201
826
  msgid "/month"
827
  msgstr ""
828
 
@@ -833,26 +870,26 @@ msgstr ""
833
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:149
834
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:560
835
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-features-section.php:103
836
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:227
837
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:231
838
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:235
839
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:253
840
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:138
841
  msgid "Feature"
842
  msgstr ""
843
 
844
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:156
845
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:161
846
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:508
847
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:536
848
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1107
849
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:307
850
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:758
851
  msgid "Button"
852
  msgstr ""
853
 
854
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:160
855
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:522
856
  msgid "Button text"
857
  msgstr ""
858
 
@@ -893,12 +930,13 @@ msgstr ""
893
 
894
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:256
895
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:264
 
896
  msgid "Background"
897
  msgstr ""
898
 
899
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:260
900
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:114
901
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:111
902
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:180
903
  msgid "Type"
904
  msgstr ""
@@ -906,12 +944,12 @@ msgstr ""
906
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:263
907
  #: obfx_modules/beaver-widgets/modules/services/services.php:153
908
  #: obfx_modules/beaver-widgets/modules/services/services.php:192
909
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:879
910
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:938
911
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:998
912
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1061
913
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:343
914
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:373
915
  msgid "Color"
916
  msgstr ""
917
 
@@ -995,9 +1033,9 @@ msgstr ""
995
  #: obfx_modules/companion-legacy/inc/rhea/widgets/features.widget.php:84
996
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:176
997
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-testimonial.php:195
998
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:250
999
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:315
1000
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:113
1001
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:167
1002
  msgid "Text"
1003
  msgstr ""
@@ -1030,17 +1068,19 @@ msgstr ""
1030
  #: obfx_modules/beaver-widgets/modules/services/services.php:237
1031
  #: obfx_modules/companion-legacy/inc/rhea/widgets/features.widget.php:65
1032
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:72
1033
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:258
1034
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:334
1035
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:118
1036
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:143
1037
  msgid "Icon"
1038
  msgstr ""
1039
 
1040
  #: obfx_modules/beaver-widgets/modules/services/services.php:31
1041
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:39
1042
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:77
1043
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:84
 
 
1044
  msgid "Services"
1045
  msgstr ""
1046
 
@@ -1063,7 +1103,7 @@ msgid "Position"
1063
  msgstr ""
1064
 
1065
  #: obfx_modules/beaver-widgets/modules/services/services.php:113
1066
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:260
1067
  msgid "Size"
1068
  msgstr ""
1069
 
@@ -1076,88 +1116,231 @@ msgid "Content style"
1076
  msgstr ""
1077
 
1078
  #: obfx_modules/beaver-widgets/modules/services/services.php:182
1079
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:585
1080
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:631
1081
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:270
1082
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:289
1083
  msgid "Alignment"
1084
  msgstr ""
1085
 
1086
  #: obfx_modules/beaver-widgets/modules/services/services.php:247
1087
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:170
1088
  msgid "Link to"
1089
  msgstr ""
1090
 
1091
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:149
1092
- msgid "1-800-123-4567"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1093
  msgstr ""
1094
 
1095
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:150
1096
- msgid "tel:1-800-123-4567"
 
1097
  msgstr ""
1098
 
1099
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:153
1100
- msgid "friends@themeisle.com"
 
 
 
1101
  msgstr ""
1102
 
1103
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:154
1104
- msgid "mailto:friends@themeisle.com"
 
1105
  msgstr ""
1106
 
1107
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:161
1108
- msgid "Facebook"
 
 
 
1109
  msgstr ""
1110
 
1111
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:162
1112
- msgid "www.facebook.com"
 
1113
  msgstr ""
1114
 
1115
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:165
1116
- msgid "Twitter"
 
1117
  msgstr ""
1118
 
1119
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:166
1120
- msgid "www.twitter.com"
 
 
 
1121
  msgstr ""
1122
 
1123
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:169
1124
- msgid "Google"
 
 
 
1125
  msgstr ""
1126
 
1127
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:170
1128
- msgid "www.google.com"
 
1129
  msgstr ""
1130
 
1131
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:173
1132
- msgid "Linkedin"
 
 
 
 
 
1133
  msgstr ""
1134
 
1135
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:174
1136
- msgid "www.linkedin.com"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1137
  msgstr ""
1138
 
1139
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:177
1140
- msgid "Instagram"
 
1141
  msgstr ""
1142
 
1143
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:178
1144
- msgid "www.instagram.com"
 
1145
  msgstr ""
1146
 
1147
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:181
1148
- msgid "Pinterest"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
  msgstr ""
1150
 
1151
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:182
1152
- msgid "www.pinterest.com"
 
 
 
1153
  msgstr ""
1154
 
1155
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:185
1156
- msgid "Youtube"
 
 
 
 
 
1157
  msgstr ""
1158
 
1159
- #: obfx_modules/companion-legacy/inc/hestia/common-functions.php:186
1160
- msgid "www.youtube.com"
 
 
 
1161
  msgstr ""
1162
 
1163
  #: obfx_modules/companion-legacy/inc/hestia/functions.php:66
@@ -1177,11 +1360,11 @@ msgstr ""
1177
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:38
1178
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:51
1179
  #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:29
1180
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:179
1181
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:186
1182
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:193
1183
  #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:32
1184
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:31
1185
  msgid ""
1186
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
1187
  "tempor incididunt ut labore et dolore magna aliqua."
@@ -1189,11 +1372,13 @@ msgstr ""
1189
 
1190
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:34
1191
  #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:31
 
 
1192
  msgid "Meet our team"
1193
  msgstr ""
1194
 
1195
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:47
1196
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:30
1197
  msgid "What clients say"
1198
  msgstr ""
1199
 
@@ -1224,9 +1409,9 @@ msgstr ""
1224
 
1225
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-features-section.php:24
1226
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-features-section.php:34
1227
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:215
1228
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:609
1229
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:673
1230
  msgid "Features"
1231
  msgstr ""
1232
 
@@ -1260,12 +1445,12 @@ msgid "Background Image"
1260
  msgstr ""
1261
 
1262
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-ribbon-section.php:80
1263
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-ribbon-section.php:35
1264
  msgid "Subscribe to our Newsletter"
1265
  msgstr ""
1266
 
1267
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-ribbon-section.php:98
1268
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-ribbon-section.php:38
1269
  msgid "Subscribe"
1270
  msgstr ""
1271
 
@@ -1277,17 +1462,12 @@ msgstr ""
1277
  #: obfx_modules/companion-legacy/inc/rhea/widgets/features.widget.php:88
1278
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-clients.php:115
1279
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:183
1280
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:315
1281
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:370
1282
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:325
1283
  msgid "Link"
1284
  msgstr ""
1285
 
1286
- #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-team-section.php:24
1287
- #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-team-section.php:34
1288
- msgid "Team"
1289
- msgstr ""
1290
-
1291
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-team-section.php:99
1292
  msgid "Team Content"
1293
  msgstr ""
@@ -1300,11 +1480,6 @@ msgstr ""
1300
  msgid "Team Member"
1301
  msgstr ""
1302
 
1303
- #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-testimonials-section.php:24
1304
- #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-testimonials-section.php:34
1305
- msgid "Testimonials"
1306
- msgstr ""
1307
-
1308
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-testimonials-section.php:99
1309
  msgid "Testimonials Content"
1310
  msgstr ""
@@ -1317,113 +1492,113 @@ msgstr ""
1317
  msgid "Testimonial"
1318
  msgstr ""
1319
 
1320
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:178
1321
  msgid "Responsive"
1322
  msgstr ""
1323
 
1324
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:185
1325
  msgid "Quality"
1326
  msgstr ""
1327
 
1328
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:192
1329
  msgid "Support"
1330
  msgstr ""
1331
 
1332
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:212
1333
  msgid "Desmond Purpleson"
1334
  msgstr ""
1335
 
1336
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:213
1337
  msgid "CEO"
1338
  msgstr ""
1339
 
1340
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:214
1341
  msgid ""
1342
  "Locavore pinterest chambray affogato art party, forage coloring book "
1343
  "typewriter. Bitters cold selfies, retro celiac sartorial mustache."
1344
  msgstr ""
1345
 
1346
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:243
1347
  msgid "Parsley Pepperspray"
1348
  msgstr ""
1349
 
1350
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:244
1351
  msgid "Marketing Specialist"
1352
  msgstr ""
1353
 
1354
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:245
1355
  msgid ""
1356
  "Craft beer salvia celiac mlkshk. Pinterest celiac tumblr, portland salvia "
1357
  "skateboard cliche thundercats. Tattooed chia austin hell."
1358
  msgstr ""
1359
 
1360
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:274
1361
  msgid "Desmond Eagle"
1362
  msgstr ""
1363
 
1364
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:275
1365
  msgid "Graphic Designer"
1366
  msgstr ""
1367
 
1368
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:276
1369
  msgid ""
1370
  "Pok pok direct trade godard street art, poutine fam typewriter food truck "
1371
  "narwhal kombucha wolf cardigan butcher whatever pickled you."
1372
  msgstr ""
1373
 
1374
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:305
1375
  msgid "Ruby Von Rails"
1376
  msgstr ""
1377
 
1378
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:306
1379
  msgid "Lead Developer"
1380
  msgstr ""
1381
 
1382
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:307
1383
  msgid ""
1384
  "Small batch vexillologist 90's blue bottle stumptown bespoke. Pok pok tilde "
1385
  "fixie chartreuse, VHS gluten-free selfies wolf hot."
1386
  msgstr ""
1387
 
1388
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:181
1389
  msgid "Inverness McKenzie"
1390
  msgstr ""
1391
 
1392
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:182
1393
  msgid "Business Owner"
1394
  msgstr ""
1395
 
1396
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:183
1397
  msgid ""
1398
  "\"We have no regrets! After using your product my business skyrocketed! I "
1399
  "made back the purchase price in just 48 hours! I couldn't have asked for "
1400
  "more than this.\""
1401
  msgstr ""
1402
 
1403
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:188
1404
  msgid "Hanson Deck"
1405
  msgstr ""
1406
 
1407
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:189
1408
  msgid "Independent Artist"
1409
  msgstr ""
1410
 
1411
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:190
1412
  msgid ""
1413
  "\"Your company is truly upstanding and is behind its product 100 percent. "
1414
  "Hestia is worth much more than I paid. I like Hestia more each day because "
1415
  "it makes easier.\""
1416
  msgstr ""
1417
 
1418
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:195
1419
  msgid "Natalya Undergrowth"
1420
  msgstr ""
1421
 
1422
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:196
1423
  msgid "Freelancer"
1424
  msgstr ""
1425
 
1426
- #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:197
1427
  msgid ""
1428
  "\"Thank you for making it painless, pleasant and most of all hassle free! I "
1429
  "am so pleased with this product. Dude, your stuff is great! I will refer "
@@ -1481,7 +1656,7 @@ msgid "Google Maps URL"
1481
  msgstr ""
1482
 
1483
  #: obfx_modules/companion-legacy/inc/rhea/widgets/contact.widget.php:77
1484
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:114
1485
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:54
1486
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:55
1487
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:170
@@ -1597,8 +1772,8 @@ msgstr ""
1597
 
1598
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:96
1599
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-team.php:285
1600
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:126
1601
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:364
1602
  msgid "Description"
1603
  msgstr ""
1604
 
@@ -1618,6 +1793,153 @@ msgstr ""
1618
  msgid "Percentage"
1619
  msgstr ""
1620
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1621
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-clients.php:24
1622
  msgid "Zerif - Clients widget"
1623
  msgstr ""
@@ -1631,10 +1953,10 @@ msgstr ""
1631
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:192
1632
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-team.php:348
1633
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-testimonial.php:202
1634
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:275
1635
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:792
1636
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:122
1637
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:162
1638
  msgid "Image"
1639
  msgstr ""
1640
 
@@ -1713,505 +2035,908 @@ msgstr ""
1713
  msgid "Author details"
1714
  msgstr ""
1715
 
1716
- #: obfx_modules/companion-legacy/init.php:72
1717
  msgid "%s enhancements "
1718
  msgstr ""
1719
 
1720
- #: obfx_modules/companion-legacy/init.php:73
1721
  msgid "Module containing frontpage improvements for %s theme."
1722
  msgstr ""
1723
 
1724
- #: obfx_modules/companion-legacy/init.php:167
1725
  msgid "Search icon"
1726
  msgstr ""
1727
 
1728
- #: obfx_modules/companion-legacy/init.php:169
1729
  msgid "All Icons"
1730
  msgstr ""
1731
 
1732
- #: obfx_modules/elementor-widgets/init.php:41
1733
- msgid "Elementor Modules"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1734
  msgstr ""
1735
 
1736
- #: obfx_modules/elementor-widgets/init.php:42
1737
- msgid "Adds new Elementor Widgets."
 
 
1738
  msgstr ""
1739
 
1740
- #: obfx_modules/elementor-widgets/init.php:130
1741
  #: vendor/codeinwp/themeisle-content-forms/class-content-form-base.php:170
1742
  msgid "Orbit Fox Addons"
1743
  msgstr ""
1744
 
1745
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:30
1746
  msgid "Post Type Grid"
1747
  msgstr ""
1748
 
1749
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:153
1750
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:667
1751
  msgid "Grid Options"
1752
  msgstr ""
1753
 
1754
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:199
1755
  msgid "Style"
1756
  msgstr ""
1757
 
1758
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:213
1759
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:729
1760
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:467
1761
  msgid "Items"
1762
  msgstr ""
1763
 
1764
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:214
1765
  msgid "How many items?"
1766
  msgstr ""
1767
 
1768
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:224
1769
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:209
1770
  msgid "Columns"
1771
  msgstr ""
1772
 
1773
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:243
1774
  msgid "Order by"
1775
  msgstr ""
1776
 
1777
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:248
1778
  msgid "Modified date"
1779
  msgstr ""
1780
 
1781
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:249
1782
  msgid "Comment count"
1783
  msgstr ""
1784
 
1785
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:259
1786
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:620
1787
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1318
1788
  msgid "Pagination"
1789
  msgstr ""
1790
 
1791
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:283
1792
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:339
1793
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:394
1794
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:474
1795
  msgid "Hide"
1796
  msgstr ""
1797
 
1798
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:293
1799
  msgid "Image height"
1800
  msgstr ""
1801
 
1802
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:350
1803
  msgid "Tag"
1804
  msgstr ""
1805
 
1806
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:386
1807
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:915
1808
  msgid "Meta"
1809
  msgstr ""
1810
 
1811
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:424
1812
  msgid "No. of Categories"
1813
  msgstr ""
1814
 
1815
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:425
1816
  msgid "How many categories to display?"
1817
  msgstr ""
1818
 
1819
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:438
1820
  msgid "No. of Tags"
1821
  msgstr ""
1822
 
1823
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:439
1824
  msgid "How many tags to display?"
1825
  msgstr ""
1826
 
1827
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:450
1828
  msgid "Remove icons"
1829
  msgstr ""
1830
 
1831
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:485
 
 
 
 
1832
  msgid "Length (words)"
1833
  msgstr ""
1834
 
1835
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:486
1836
  msgid "Length of content (words)"
1837
  msgstr ""
1838
 
1839
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:549
1840
  msgid "Button alignment"
1841
  msgstr ""
1842
 
1843
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:565
1844
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:286
1845
  msgid "Justified"
1846
  msgstr ""
1847
 
1848
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:676
1849
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:414
1850
  msgid "Columns margin"
1851
  msgstr ""
1852
 
1853
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:698
1854
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:436
1855
  msgid "Rows margin"
1856
  msgstr ""
1857
 
1858
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:752
1859
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:804
1860
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:785
1861
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:490
1862
  msgid "Border Radius"
1863
  msgstr ""
1864
 
1865
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:833
1866
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:895
1867
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:955
1868
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1016
1869
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1080
1870
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1330
1871
  msgid "Margin"
1872
  msgstr ""
1873
 
1874
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1150
1875
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1220
1876
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:829
1877
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:878
1878
  msgid "Text Color"
1879
  msgstr ""
1880
 
1881
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1171
1882
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1241
1883
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:844
1884
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:893
1885
  msgid "Background Color"
1886
  msgstr ""
1887
 
1888
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1207
1889
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:870
1890
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:538
1891
  msgid "Hover"
1892
  msgstr ""
1893
 
1894
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1279
1895
  msgid "Button padding"
1896
  msgstr ""
1897
 
1898
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1296
1899
  msgid "Button border radius"
1900
  msgstr ""
1901
 
1902
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1521
 
 
 
 
 
 
 
 
 
 
1903
  msgid "No reviews"
1904
  msgstr ""
1905
 
1906
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1521
1907
  msgid "1 review"
1908
  msgstr ""
1909
 
1910
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1521
1911
  msgid "% reviews"
1912
  msgstr ""
1913
 
1914
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1523
1915
  msgid "No comments"
1916
  msgstr ""
1917
 
1918
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1523
1919
  msgid "1 comment"
1920
  msgstr ""
1921
 
1922
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1523
1923
  msgid "% comments"
1924
  msgstr ""
1925
 
1926
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1737
1927
- msgid "Previous"
1928
  msgstr ""
1929
 
1930
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-posts-grid.php:1738
1931
- msgid "Next"
1932
  msgstr ""
1933
 
1934
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:30
1935
  msgid "Pricing Table"
1936
  msgstr ""
1937
 
1938
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:88
1939
  msgid "Plan Title"
1940
  msgstr ""
1941
 
1942
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:98
1943
  msgid "Pricing Plan"
1944
  msgstr ""
1945
 
1946
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:106
1947
  msgid "Title HTML tag"
1948
  msgstr ""
1949
 
1950
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:134
1951
  msgid "Subtitle HTML Tag"
1952
  msgstr ""
1953
 
1954
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:178
1955
  msgid "$"
1956
  msgstr ""
1957
 
1958
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:186
1959
  msgid "Currency Position"
1960
  msgstr ""
1961
 
1962
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:222
1963
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:252
1964
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:137
1965
  msgid "Plan Features"
1966
  msgstr ""
1967
 
1968
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:226
1969
  msgid "First"
1970
  msgstr ""
1971
 
1972
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:230
1973
  msgid "Second"
1974
  msgstr ""
1975
 
1976
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:234
1977
  msgid "Third"
1978
  msgstr ""
1979
 
1980
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:242
1981
  msgid "Accented Text"
1982
  msgstr ""
1983
 
1984
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:243
1985
  msgid "Appears before feature text"
1986
  msgstr ""
1987
 
1988
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:245
1989
  msgid "Accent"
1990
  msgstr ""
1991
 
1992
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:316
1993
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:317
1994
  msgid "Buy Now"
1995
  msgstr ""
1996
 
1997
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:326
1998
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:172
1999
  msgid "https://example.com"
2000
  msgstr ""
2001
 
2002
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:344
2003
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:182
2004
  msgid "Icon Position"
2005
  msgstr ""
2006
 
2007
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:360
2008
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:733
2009
  msgid "Icon Spacing"
2010
  msgstr ""
2011
 
2012
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:385
2013
  msgid "Header"
2014
  msgstr ""
2015
 
2016
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:393
2017
  msgid "Header Padding"
2018
  msgstr ""
2019
 
2020
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:406
2021
  msgid "Title Color"
2022
  msgstr ""
2023
 
2024
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:431
2025
  msgid "Subtitle Color"
2026
  msgstr ""
2027
 
2028
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:456
2029
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:492
2030
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:618
2031
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:766
2032
  msgid "Section Background"
2033
  msgstr ""
2034
 
2035
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:480
2036
  msgid "Price Box Padding"
2037
  msgstr ""
2038
 
2039
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:510
2040
  msgid "Currency Color"
2041
  msgstr ""
2042
 
2043
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:544
2044
  msgid "Price Color"
2045
  msgstr ""
2046
 
2047
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:578
2048
  msgid "Period Color"
2049
  msgstr ""
2050
 
2051
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:628
2052
  msgid "Features List Padding"
2053
  msgstr ""
2054
 
2055
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:639
2056
  msgid "Accented"
2057
  msgstr ""
2058
 
2059
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:649
2060
  msgid "Accented Color"
2061
  msgstr ""
2062
 
2063
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:682
2064
  msgid "Features Color"
2065
  msgstr ""
2066
 
2067
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:707
2068
  msgid "Icons"
2069
  msgstr ""
2070
 
2071
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:716
2072
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:153
2073
  msgid "Icon Color"
2074
  msgstr ""
2075
 
2076
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-pricing-table.php:917
2077
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:562
2078
  msgid "Transition Duration"
2079
  msgstr ""
2080
 
2081
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:88
2082
  msgid "Award-Winning​"
2083
  msgstr ""
2084
 
2085
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:89
2086
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:96
2087
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:103
2088
  msgid "Add some text here to describe your services to the page visitors.​"
2089
  msgstr ""
2090
 
2091
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:95
2092
  msgid "Professional​"
2093
  msgstr ""
2094
 
2095
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:102
2096
  msgid "Consulting​"
2097
  msgstr ""
2098
 
2099
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:131
2100
  msgid "Title & Description"
2101
  msgstr ""
2102
 
2103
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:132
2104
  msgid "Service Title"
2105
  msgstr ""
2106
 
2107
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:232
2108
  msgid "Icon / Image"
2109
  msgstr ""
2110
 
2111
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:239
2112
- #: obfx_modules/elementor-widgets/widgets/class-obfx-elementor-widget-services.php:326
2113
  msgid "Spacing"
2114
  msgstr ""
2115
 
2116
- #: obfx_modules/menu-icons/init.php:33
2117
- msgid "Menu Icons"
 
 
2118
  msgstr ""
2119
 
2120
- #: obfx_modules/menu-icons/init.php:34
2121
- msgid "Module to define menu icons for navigation."
2122
  msgstr ""
2123
 
2124
- #: obfx_modules/menu-icons/init.php:147
2125
- msgid "Powered by %s plugin"
2126
  msgstr ""
2127
 
2128
- #: obfx_modules/mystock-import/inc/photos.php:28
2129
- #: obfx_modules/mystock-import/init.php:187
2130
- msgid "Deselect"
 
 
 
 
 
 
2131
  msgstr ""
2132
 
2133
- #: obfx_modules/mystock-import/init.php:49
2134
- msgid "Mystock Import"
 
 
 
 
2135
  msgstr ""
2136
 
2137
- #: obfx_modules/mystock-import/init.php:50
2138
- msgid "Module to import images directly from"
 
 
 
 
 
2139
  msgstr ""
2140
 
2141
- #: obfx_modules/mystock-import/init.php:136
2142
- #: obfx_modules/mystock-import/init.php:144
2143
- #: obfx_modules/mystock-import/init.php:152
2144
- #: obfx_modules/mystock-import/init.php:157
2145
- msgid "Image failed to upload"
2146
  msgstr ""
2147
 
2148
- #: obfx_modules/mystock-import/init.php:231
2149
- msgid "Fetching data"
2150
  msgstr ""
2151
 
2152
- #: obfx_modules/mystock-import/init.php:232
2153
- msgid "Downloading image. Please wait..."
2154
  msgstr ""
2155
 
2156
- #: obfx_modules/mystock-import/init.php:233
2157
- msgid "Your image was imported. Go to Media Library tab to use it."
 
 
2158
  msgstr ""
2159
 
2160
- #: obfx_modules/mystock-import/init.php:234
2161
- msgid "Loading more photos..."
2162
  msgstr ""
2163
 
2164
- #: obfx_modules/mystock-import/init.php:235
2165
- msgid "MyStock Library"
2166
  msgstr ""
2167
 
2168
- #: obfx_modules/mystock-import/init.php:236
2169
- msgid "Import & set featured image"
 
 
2170
  msgstr ""
2171
 
2172
- #: obfx_modules/mystock-import/init.php:237
2173
- msgid "Import & insert image"
2174
  msgstr ""
2175
 
2176
- #: obfx_modules/social-sharing/init.php:30
2177
- msgid "Social Sharing Module"
2178
  msgstr ""
2179
 
2180
- #: obfx_modules/social-sharing/init.php:31
2181
- msgid "Add basic social sharing to your posts and pages."
2182
  msgstr ""
2183
 
2184
- #: obfx_modules/social-sharing/views/hestia-social-sharing-tpl.php:36
2185
- msgid "Share on "
 
 
2186
  msgstr ""
2187
 
2188
- #: obfx_modules/template-directory/init.php:30
2189
- msgid "Template Directory Module"
2190
  msgstr ""
2191
 
2192
- #: obfx_modules/template-directory/init.php:31
 
 
 
 
2193
  msgid ""
2194
- "The awesome template directory is aiming to provide a wide range of "
2195
- "templates that you can import straight into your website."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2196
  msgstr ""
2197
 
2198
- #: obfx_modules/template-directory/init.php:160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2199
  msgid "A new Orbit Fox Template"
2200
  msgstr ""
2201
 
2202
- #: obfx_modules/template-directory/init.php:162
2203
  msgid "This is an awesome Orbit Fox Template."
2204
  msgstr ""
2205
 
2206
- #: obfx_modules/template-directory/init.php:165
2207
  msgid "Elementor Page Builder"
2208
  msgstr ""
2209
 
2210
- #: obfx_modules/template-directory/init.php:170
2211
  msgid "About Our Business"
2212
  msgstr ""
2213
 
2214
- #: obfx_modules/template-directory/init.php:171
2215
  msgid ""
2216
  "Use this layout to present your business in a fancy way. Add an interactive "
2217
  "header, shwocase your services via progress bars, introduce your team "
@@ -2219,11 +2944,11 @@ msgid ""
2219
  "beautify the design by adding catchy images."
2220
  msgstr ""
2221
 
2222
- #: obfx_modules/template-directory/init.php:177
2223
  msgid "Contact Us"
2224
  msgstr ""
2225
 
2226
- #: obfx_modules/template-directory/init.php:178
2227
  msgid ""
2228
  "A clean and simple template for your Contact page, where we integrated our "
2229
  "Pirate Forms plugin. It will let your customers send you a message using an "
@@ -2231,11 +2956,11 @@ msgid ""
2231
  "business, completes the section."
2232
  msgstr ""
2233
 
2234
- #: obfx_modules/template-directory/init.php:184
2235
  msgid "Pricing"
2236
  msgstr ""
2237
 
2238
- #: obfx_modules/template-directory/init.php:185
2239
  msgid ""
2240
  "If you plan to sell your products online, this layout offers you elegant "
2241
  "pricing tables so you can differentiate the features and services for your "
@@ -2243,11 +2968,11 @@ msgid ""
2243
  "where you can answer people's questions."
2244
  msgstr ""
2245
 
2246
- #: obfx_modules/template-directory/init.php:191
2247
  msgid "Material Homepage"
2248
  msgstr ""
2249
 
2250
- #: obfx_modules/template-directory/init.php:192
2251
  msgid ""
2252
  "This layout could be your main website homepage (or you can use it as an "
2253
  "alternative homepage, if you wish). It was built on material design and "
@@ -2255,11 +2980,11 @@ msgid ""
2255
  "plans, and other sections that you can add yourself by customizing it."
2256
  msgstr ""
2257
 
2258
- #: obfx_modules/template-directory/init.php:198
2259
  msgid "Ether - Landing Page"
2260
  msgstr ""
2261
 
2262
- #: obfx_modules/template-directory/init.php:199
2263
  msgid ""
2264
  "An elegant and modern landing page for e-commerce, coming with a clean "
2265
  "interface, beautiful typography, photo galleries, and call to action. If "
@@ -2267,11 +2992,11 @@ msgid ""
2267
  "layout to tell people why they should buy it."
2268
  msgstr ""
2269
 
2270
- #: obfx_modules/template-directory/init.php:205
2271
  msgid "Jason - Landing Page"
2272
  msgstr ""
2273
 
2274
- #: obfx_modules/template-directory/init.php:206
2275
  msgid ""
2276
  "A classy template for freelancers, where you can put your skills and "
2277
  "knowldge in the spotlight for potential clients. Talk about yourself, your "
@@ -2279,11 +3004,11 @@ msgid ""
2279
  "designed to feature one-page scrolling."
2280
  msgstr ""
2281
 
2282
- #: obfx_modules/template-directory/init.php:212
2283
  msgid "Pulse - Landing Page"
2284
  msgstr ""
2285
 
2286
- #: obfx_modules/template-directory/init.php:213
2287
  msgid ""
2288
  "A good-looking landing page for products and apps, built to mark the "
2289
  "features and services that they offer. The layout provides customer "
@@ -2292,11 +3017,11 @@ msgid ""
2292
  "template might help."
2293
  msgstr ""
2294
 
2295
- #: obfx_modules/template-directory/init.php:219
2296
  msgid "Ascend - Landing Page"
2297
  msgstr ""
2298
 
2299
- #: obfx_modules/template-directory/init.php:220
2300
  msgid ""
2301
  "A resume-like template, built for outdoor enthusiasts and nature lovers. "
2302
  "Its design and layout make it flexible for any other purpose too, so do not "
@@ -2304,22 +3029,22 @@ msgid ""
2304
  "business-oriented."
2305
  msgstr ""
2306
 
2307
- #: obfx_modules/template-directory/init.php:226
2308
  msgid "Path - Landing Page"
2309
  msgstr ""
2310
 
2311
- #: obfx_modules/template-directory/init.php:227
2312
  msgid ""
2313
  "If you are a business consultant - agency or working on your own - have a "
2314
  "look at this template! It comes with a clean design, call to action, "
2315
  "statistics, and sections that put your services first."
2316
  msgstr ""
2317
 
2318
- #: obfx_modules/template-directory/init.php:233
2319
  msgid "Mocha - Landing Page"
2320
  msgstr ""
2321
 
2322
- #: obfx_modules/template-directory/init.php:234
2323
  msgid ""
2324
  "An elegant and modern template for cafes and pubs, where you can display "
2325
  "your menu in a mouth-watering way. Call to action, blog posts, attractive "
@@ -2327,59 +3052,86 @@ msgid ""
2327
  "people to stop by."
2328
  msgstr ""
2329
 
2330
- #: obfx_modules/template-directory/init.php:281
2331
- #: obfx_modules/template-directory/views/template-directory-page-tpl.php:19
2332
- msgid "Orbit Fox Template Directory"
2333
- msgstr ""
2334
-
2335
- #: obfx_modules/template-directory/init.php:281
2336
  msgid "Template Directory"
2337
  msgstr ""
2338
 
2339
- #: obfx_modules/template-directory/init.php:412
2340
  msgid "Install and activate"
2341
  msgstr ""
2342
 
2343
- #: obfx_modules/template-directory/views/template-directory-page-tpl.php:24
 
 
 
 
2344
  msgid "More Details"
2345
  msgstr ""
2346
 
2347
- #: obfx_modules/template-directory/views/template-directory-page-tpl.php:32
2348
  msgid "Preview"
2349
  msgstr ""
2350
 
2351
- #: obfx_modules/template-directory/views/template-directory-page-tpl.php:107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2352
  msgid "Collapse"
2353
  msgstr ""
2354
 
2355
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:72
 
 
 
 
 
 
 
 
 
 
 
 
2356
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:130
2357
  msgid "Fields"
2358
  msgstr ""
2359
 
2360
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:77
2361
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:97
2362
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:100
2363
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:103
2364
  msgid "Field"
2365
  msgstr ""
2366
 
2367
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:87
2368
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:99
2369
  msgid "Form Settings"
2370
  msgstr ""
2371
 
2372
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:107
2373
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:138
2374
  msgid "Label"
2375
  msgstr ""
2376
 
2377
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:115
2378
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:171
2379
  msgid "Textarea"
2380
  msgstr ""
2381
 
2382
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:116
2383
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:168
2384
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:62
2385
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:63
@@ -2387,16 +3139,16 @@ msgstr ""
2387
  msgid "Password"
2388
  msgstr ""
2389
 
2390
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:121
2391
  msgid "Is required?"
2392
  msgstr ""
2393
 
2394
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:123
2395
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:159
2396
  msgid "Required"
2397
  msgstr ""
2398
 
2399
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:124
2400
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:160
2401
  msgid "Optional"
2402
  msgstr ""
@@ -2409,12 +3161,6 @@ msgstr ""
2409
  msgid "A contact form."
2410
  msgstr ""
2411
 
2412
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-contact.php:21
2413
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-newsletter.php:21
2414
- #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-registration.php:21
2415
- msgid "OrbitFox Modules"
2416
- msgstr ""
2417
-
2418
  #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-newsletter.php:19
2419
  msgid "Newsletter"
2420
  msgstr ""
@@ -2432,14 +3178,14 @@ msgid "A sign up form."
2432
  msgstr ""
2433
 
2434
  #: vendor/codeinwp/themeisle-content-forms/beaver/includes/frontend.php:19
2435
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:255
2436
  msgid "The %s setting is required!"
2437
  msgstr ""
2438
 
2439
  #: vendor/codeinwp/themeisle-content-forms/beaver/includes/frontend.php:40
2440
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:84
2441
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:85
2442
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:269
2443
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-gutenberg.php:98
2444
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:72
2445
  msgid "Submit"
@@ -2530,17 +3276,6 @@ msgid ""
2530
  "form settings on "
2531
  msgstr ""
2532
 
2533
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:291
2534
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:303
2535
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-newsletter.php:256
2536
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-newsletter.php:268
2537
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:220
2538
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:232
2539
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-server.php:144
2540
- #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-server.php:156
2541
- msgid "Cheatin&#8217; huh?"
2542
- msgstr ""
2543
-
2544
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:147
2545
  msgid "Placeholder"
2546
  msgstr ""
@@ -2670,20 +3405,15 @@ msgstr ""
2670
  msgid "Invalid Data "
2671
  msgstr ""
2672
 
2673
- #: vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-endpoints.php:238
2674
- msgid "%s not found"
2675
- msgstr ""
2676
-
2677
- #: vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-endpoints.php:299
2678
- msgid "Invalid %"
2679
- msgstr ""
2680
-
2681
  #. Plugin URI of the plugin/theme
2682
  msgid "https://themeisle.com/plugins/orbit-fox-companion"
2683
  msgstr ""
2684
 
2685
  #. Description of the plugin/theme
2686
- msgid "Enhances ThemeIsle's themes with extra functionality."
 
 
 
2687
  msgstr ""
2688
 
2689
  #. Author of the plugin/theme
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Orbit Fox Companion 2.4.7\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Codeinwp/orbit-fox/issues\n"
7
+ "POT-Creation-Date: 2018-06-21 17:36:15+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
25
  "X-Textdomain-Support: yes\n"
26
 
27
  #: obfx_modules/beaver-widgets/modules/services/services.php:64
28
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:439
29
  msgid "1"
30
  msgstr ""
31
 
45
  msgid "5"
46
  msgstr ""
47
 
48
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:168
49
  msgid "50"
50
  msgstr ""
51
 
61
  msgid "General Settings"
62
  msgstr ""
63
 
64
+ #: core/app/class-orbit-fox-admin.php:144
65
+ msgid ""
66
+ "You have activated Orbit Fox plugin! Go to the %s to get started with the "
67
+ "extra features."
68
+ msgstr ""
69
+
70
+ #: core/app/class-orbit-fox-admin.php:144
71
+ msgid "Dashboard Page"
72
+ msgstr ""
73
+
74
+ #: core/app/class-orbit-fox-admin.php:190
75
+ #: core/app/class-orbit-fox-admin.php:246
76
  msgid "Could not process the request!"
77
  msgstr ""
78
 
79
+ #: core/app/class-orbit-fox-admin.php:216
80
  msgid "No module found! No data was updated."
81
  msgstr ""
82
 
83
+ #: core/app/class-orbit-fox-admin.php:222
84
  msgid "Something went wrong, data might not be saved!"
85
  msgstr ""
86
 
87
+ #: core/app/class-orbit-fox-admin.php:226
88
  msgid "Options updated, successfully!"
89
  msgstr ""
90
 
91
+ #: core/app/class-orbit-fox-admin.php:272
92
  msgid "No module found!"
93
  msgstr ""
94
 
95
+ #: core/app/class-orbit-fox-admin.php:276
96
  msgid "Something went wrong, can not change module status!"
97
  msgstr ""
98
 
99
+ #: core/app/class-orbit-fox-admin.php:281
100
  msgid "Module status changed!"
101
  msgstr ""
102
 
103
+ #: core/app/class-orbit-fox-admin.php:396
104
  msgid "No modules found."
105
  msgstr ""
106
 
107
+ #: core/app/class-orbit-fox-admin.php:397
108
  msgid "Please contact support for more help."
109
  msgstr ""
110
 
111
+ #: core/app/class-orbit-fox-admin.php:404
112
  msgid "No active modules."
113
  msgstr ""
114
 
115
+ #: core/app/class-orbit-fox-admin.php:405
116
  msgid "Activate a module using the toggles above."
117
  msgstr ""
118
 
119
+ #: core/app/helpers/class-orbit-fox-render-helper.php:123
120
  msgid "No option found for provided type"
121
  msgstr ""
122
 
165
  msgstr ""
166
 
167
  #: core/app/views/partials/module-tile-tpl.php:42
168
+ msgid "Got it!"
169
+ msgstr ""
170
+
171
+ #: core/app/views/partials/module-tile-tpl.php:66
172
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:426
173
  msgid "Activate"
174
  msgstr ""
175
 
176
+ #: core/app/views/partials/module-tile-tpl.php:70
177
+ msgid "Beta module"
178
+ msgstr ""
179
+
180
  #: obfx_modules/beaver-widgets/custom-fields/toggle-field/toggle_field.php:26
181
  msgid "Yes"
182
  msgstr ""
190
  msgstr ""
191
 
192
  #: obfx_modules/beaver-widgets/inc/common-functions.php:26
193
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:765
194
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:798
195
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:478
196
  msgid "Padding"
197
  msgstr ""
198
 
199
  #: obfx_modules/beaver-widgets/inc/common-functions.php:30
200
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:191
201
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:191
202
  msgid "Top"
203
  msgstr ""
204
 
227
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:187
228
  #: obfx_modules/beaver-widgets/modules/services/services.php:106
229
  #: obfx_modules/beaver-widgets/modules/services/services.php:185
230
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:579
231
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:615
232
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:661
233
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:275
234
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:187
235
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:296
236
  msgid "Left"
237
  msgstr ""
238
 
245
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:188
246
  #: obfx_modules/beaver-widgets/modules/services/services.php:108
247
  #: obfx_modules/beaver-widgets/modules/services/services.php:187
248
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:587
249
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:623
250
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:669
251
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:283
252
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:195
253
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:304
254
  msgid "Right"
255
  msgstr ""
256
 
257
  #: obfx_modules/beaver-widgets/inc/common-functions.php:64
258
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:777
259
  msgid "Typography"
260
  msgstr ""
261
 
292
  msgstr ""
293
 
294
  #: obfx_modules/beaver-widgets/inc/common-functions.php:100
295
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1163
296
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:822
297
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:513
298
  msgid "Normal"
299
  msgstr ""
300
 
315
  msgstr ""
316
 
317
  #: obfx_modules/beaver-widgets/init.php:25
318
+ #: obfx_modules/elementor-widgets/init.php:30
319
+ msgid "Page builder widgets"
320
  msgstr ""
321
 
322
  #: obfx_modules/beaver-widgets/init.php:26
323
+ #: obfx_modules/elementor-widgets/init.php:31
324
+ msgid ""
325
+ "Adds widgets to the most popular builders: Elementor or Beaver. More to "
326
+ "come!"
327
  msgstr ""
328
 
329
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/frontend.php:100
336
  msgstr ""
337
 
338
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:32
339
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:175
340
  msgid "Post Type"
341
  msgstr ""
342
 
359
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:54
360
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:206
361
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-testimonial.php:168
362
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:423
363
  msgid "Author"
364
  msgstr ""
365
 
369
 
370
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:56
371
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:207
372
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:259
373
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:424
374
  msgid "Date"
375
  msgstr ""
376
 
395
  msgstr ""
396
 
397
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:62
398
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:263
399
  msgid "Random"
400
  msgstr ""
401
 
407
  #: obfx_modules/companion-legacy/inc/rhea/widgets/hours.widget.php:202
408
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:87
409
  #: obfx_modules/companion-legacy/inc/rhea/widgets/progress-bar.widget.php:62
410
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:130
411
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:228
412
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:287
413
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:167
414
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:260
415
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:344
416
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:882
417
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:97
418
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:98
419
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:318
420
  msgid "Title"
421
  msgstr ""
422
 
476
  msgstr ""
477
 
478
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:205
479
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:215
480
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:406
481
  msgid "Grid"
482
  msgstr ""
483
 
484
  #: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:206
485
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:216
486
  msgid "List"
487
  msgstr ""
488
 
526
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:28
527
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:33
528
  #: obfx_modules/beaver-widgets/modules/services/services.php:33
529
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-contact.php:21
530
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-newsletter.php:21
531
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-registration.php:21
532
  msgid "Orbit Fox Modules"
533
  msgstr ""
534
 
568
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:186
569
  #: obfx_modules/beaver-widgets/modules/services/services.php:107
570
  #: obfx_modules/beaver-widgets/modules/services/services.php:186
571
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:583
572
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:619
573
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:665
574
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:279
575
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:300
576
  msgid "Center"
577
  msgstr ""
578
 
628
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:156
629
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:74
630
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:97
631
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:116
632
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:144
633
  msgid "p"
634
  msgstr ""
635
 
654
  msgstr ""
655
 
656
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:203
657
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:417
658
  msgid "Display"
659
  msgstr ""
660
 
661
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:208
662
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:186
663
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:199
664
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:425
665
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:167
666
  msgid "Category"
667
  msgstr ""
668
 
669
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:209
670
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:426
671
  msgid "Tags"
672
  msgstr ""
673
 
674
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:210
675
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:427
676
  msgid "Comments"
677
  msgstr ""
678
 
701
  msgstr ""
702
 
703
  #: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:273
704
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:549
705
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:550
706
  msgid "Read more"
707
  msgstr ""
708
 
734
 
735
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:49
736
  #: obfx_modules/beaver-widgets/modules/services/services.php:47
737
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:479
738
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1001
739
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:282
740
  msgid "Content"
741
  msgstr ""
742
 
750
 
751
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:68
752
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:91
753
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:110
754
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:138
755
  msgid "h1"
756
  msgstr ""
757
 
758
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:69
759
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:92
760
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:111
761
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:139
762
  msgid "h2"
763
  msgstr ""
764
 
765
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:70
766
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:93
767
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:112
768
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:140
769
  msgid "h3"
770
  msgstr ""
771
 
772
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:71
773
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:94
774
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:113
775
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:141
776
  msgid "h4"
777
  msgstr ""
778
 
779
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:72
780
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:95
781
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:114
782
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:142
783
  msgid "h5"
784
  msgstr ""
785
 
786
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:73
787
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:96
788
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:115
789
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:143
790
  msgid "h6"
791
  msgstr ""
792
 
793
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:79
794
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:48
795
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:111
796
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:182
797
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:48
798
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:111
799
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:182
800
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:91
801
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:142
802
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:240
803
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:125
804
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:126
805
  msgid "Subtitle"
806
  msgstr ""
807
 
814
  msgstr ""
815
 
816
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:103
817
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:158
818
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:472
819
  msgid "Price Tag"
820
  msgstr ""
821
 
822
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:107
823
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:521
824
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1058
825
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:166
826
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:167
827
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:536
828
  msgid "Price"
829
  msgstr ""
830
 
831
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:116
832
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:177
833
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:178
834
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:502
835
  msgid "Currency"
836
  msgstr ""
837
 
840
  msgstr ""
841
 
842
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:128
843
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:190
844
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:348
845
  msgid "Before"
846
  msgstr ""
847
 
848
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:129
849
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:191
850
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:349
851
  msgid "After"
852
  msgstr ""
853
 
854
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:134
855
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:200
856
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:570
857
  msgid "Period"
858
  msgstr ""
859
 
860
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:135
861
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:201
862
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:202
863
  msgid "/month"
864
  msgstr ""
865
 
870
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:149
871
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:560
872
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-features-section.php:103
873
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:228
874
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:232
875
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:236
876
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:254
877
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:139
878
  msgid "Feature"
879
  msgstr ""
880
 
881
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:156
882
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:161
883
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:534
884
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:562
885
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1133
886
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:308
887
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:759
888
  msgid "Button"
889
  msgstr ""
890
 
891
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:160
892
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:548
893
  msgid "Button text"
894
  msgstr ""
895
 
930
 
931
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:256
932
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:264
933
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:252
934
  msgid "Background"
935
  msgstr ""
936
 
937
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:260
938
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:115
939
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:112
940
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:180
941
  msgid "Type"
942
  msgstr ""
944
  #: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:263
945
  #: obfx_modules/beaver-widgets/modules/services/services.php:153
946
  #: obfx_modules/beaver-widgets/modules/services/services.php:192
947
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:905
948
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:964
949
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1024
950
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1087
951
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:344
952
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:374
953
  msgid "Color"
954
  msgstr ""
955
 
1033
  #: obfx_modules/companion-legacy/inc/rhea/widgets/features.widget.php:84
1034
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:176
1035
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-testimonial.php:195
1036
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:251
1037
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:316
1038
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:114
1039
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:167
1040
  msgid "Text"
1041
  msgstr ""
1068
  #: obfx_modules/beaver-widgets/modules/services/services.php:237
1069
  #: obfx_modules/companion-legacy/inc/rhea/widgets/features.widget.php:65
1070
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:72
1071
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:259
1072
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:335
1073
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:119
1074
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:144
1075
  msgid "Icon"
1076
  msgstr ""
1077
 
1078
  #: obfx_modules/beaver-widgets/modules/services/services.php:31
1079
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_services_section.php:20
1080
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-services-section.php:24
1081
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:38
1082
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:78
1083
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:85
1084
  msgid "Services"
1085
  msgstr ""
1086
 
1103
  msgstr ""
1104
 
1105
  #: obfx_modules/beaver-widgets/modules/services/services.php:113
1106
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:261
1107
  msgid "Size"
1108
  msgstr ""
1109
 
1116
  msgstr ""
1117
 
1118
  #: obfx_modules/beaver-widgets/modules/services/services.php:182
1119
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:611
1120
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:657
1121
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:271
1122
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:290
1123
  msgid "Alignment"
1124
  msgstr ""
1125
 
1126
  #: obfx_modules/beaver-widgets/modules/services/services.php:247
1127
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:171
1128
  msgid "Link to"
1129
  msgstr ""
1130
 
1131
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:13
1132
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:13
1133
+ msgid "Services section"
1134
+ msgstr ""
1135
+
1136
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:26
1137
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:26
1138
+ msgid "Disable the Services section?"
1139
+ msgstr ""
1140
+
1141
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:33
1142
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_services_section.php:3
1143
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:33
1144
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-services-section.php:7
1145
+ msgid "Our Services"
1146
+ msgstr ""
1147
+
1148
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:37
1149
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:100
1150
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:171
1151
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:37
1152
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:100
1153
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:171
1154
+ msgid "Main title"
1155
+ msgstr ""
1156
+
1157
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:44
1158
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:107
1159
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_services_section.php:4
1160
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_team_section.php:8
1161
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:44
1162
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:107
1163
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-services-section.php:8
1164
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-team-section.php:9
1165
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:300
1166
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:305
1167
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:310
1168
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:315
1169
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:597
1170
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:602
1171
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:607
1172
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:612
1173
+ msgid "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
1174
+ msgstr ""
1175
+
1176
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:61
1177
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:61
1178
+ msgid "Add new service box"
1179
+ msgstr ""
1180
+
1181
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:76
1182
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:76
1183
+ msgid "Team section"
1184
  msgstr ""
1185
 
1186
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:89
1187
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:89
1188
+ msgid "Disable the Team section?"
1189
  msgstr ""
1190
 
1191
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:96
1192
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_team_section.php:6
1193
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:96
1194
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-team-section.php:7
1195
+ msgid "Our Team"
1196
  msgstr ""
1197
 
1198
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:122
1199
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:122
1200
+ msgid "Team Background"
1201
  msgstr ""
1202
 
1203
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:134
1204
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:134
1205
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:180
1206
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:192
1207
+ msgid "Add new team member"
1208
  msgstr ""
1209
 
1210
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:147
1211
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:147
1212
+ msgid "Testimonials section"
1213
  msgstr ""
1214
 
1215
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:160
1216
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:160
1217
+ msgid "Disable the Testimonials section?"
1218
  msgstr ""
1219
 
1220
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:167
1221
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_happy_customers_section.php:6
1222
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:167
1223
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/happy-customers-section.php:7
1224
+ msgid "Happy Customers"
1225
  msgstr ""
1226
 
1227
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:178
1228
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_happy_customers_section.php:7
1229
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:178
1230
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/happy-customers-section.php:8
1231
+ msgid "Cloud computing subscription model out of the box proactive solution."
1232
  msgstr ""
1233
 
1234
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/settings.php:195
1235
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/settings.php:195
1236
+ msgid "Add new testimonial"
1237
  msgstr ""
1238
 
1239
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-services-section.php:16
1240
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-services-section.php:21
1241
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-services-section.php:26
1242
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-services-section.php:18
1243
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-services-section.php:24
1244
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-services-section.php:30
1245
+ msgid "Lorem Ipsum"
1246
  msgstr ""
1247
 
1248
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-services-section.php:17
1249
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-services-section.php:22
1250
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-services-section.php:27
1251
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-services-section.php:19
1252
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-services-section.php:25
1253
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-services-section.php:31
1254
+ msgid ""
1255
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla nec purus "
1256
+ "feugiat, molestie ipsum et, consequat nibh. Etiam non elit dui. Nullam vel "
1257
+ "eros sit amet arcu vestibulum accumsan in in leo."
1258
+ msgstr ""
1259
+
1260
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-team-section.php:16
1261
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-team-section.php:16
1262
+ msgid "Albert Jacobs"
1263
+ msgstr ""
1264
+
1265
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-team-section.php:17
1266
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-team-section.php:17
1267
+ msgid "Founder & CEO"
1268
+ msgstr ""
1269
+
1270
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-team-section.php:21
1271
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-team-section.php:21
1272
+ msgid "Tonya Garcia"
1273
  msgstr ""
1274
 
1275
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-team-section.php:22
1276
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-team-section.php:22
1277
+ msgid "Account Manager"
1278
  msgstr ""
1279
 
1280
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-team-section.php:26
1281
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-team-section.php:26
1282
+ msgid "Linda Guthrie"
1283
  msgstr ""
1284
 
1285
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-team-section.php:27
1286
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-team-section.php:27
1287
+ msgid "Business Development"
1288
+ msgstr ""
1289
+
1290
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:17
1291
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:23
1292
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:29
1293
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:16
1294
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:22
1295
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:28
1296
+ msgid "Happy Customer"
1297
+ msgstr ""
1298
+
1299
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:18
1300
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:24
1301
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:30
1302
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:17
1303
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:23
1304
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:29
1305
+ msgid "Lorem ipsum"
1306
+ msgstr ""
1307
+
1308
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:19
1309
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:25
1310
+ #: obfx_modules/companion-legacy/inc/azera-shop/inc/translations/translations-testimonials-section.php:31
1311
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:18
1312
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:24
1313
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/inc/translations/translations-testimonials-section.php:30
1314
+ msgid ""
1315
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla nec purus "
1316
+ "feugiat, molestie ipsum et, consequat nibh. Etiam non elit dui. Nullam vel "
1317
+ "eros sit amet arcu vestibulum accumsan in in leo. Fusce malesuada vulputate "
1318
+ "faucibus. Integer in hendrerit nisi. Praesent a hendrerit urna. In non "
1319
+ "imperdiet elit, sed molestie odio. Fusce ac metus non purus sollicitudin "
1320
+ "laoreet."
1321
  msgstr ""
1322
 
1323
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_happy_customers_section.php:23
1324
+ #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-testimonials-section.php:24
1325
+ #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-testimonials-section.php:34
1326
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/happy-customers-section.php:23
1327
+ msgid "Testimonials"
1328
  msgstr ""
1329
 
1330
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_happy_customers_section.php:79
1331
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_team_section.php:63
1332
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_team_section.php:67
1333
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/happy-customers-section.php:77
1334
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-team-section.php:72
1335
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-team-section.php:77
1336
+ msgid "Avatar"
1337
  msgstr ""
1338
 
1339
+ #: obfx_modules/companion-legacy/inc/azera-shop/sections/azera_shop_our_team_section.php:21
1340
+ #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-team-section.php:24
1341
+ #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-team-section.php:34
1342
+ #: obfx_modules/companion-legacy/inc/llorix-one-companion/sections/our-team-section.php:27
1343
+ msgid "Team"
1344
  msgstr ""
1345
 
1346
  #: obfx_modules/companion-legacy/inc/hestia/functions.php:66
1360
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:38
1361
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:51
1362
  #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:29
1363
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:187
1364
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:194
1365
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:201
1366
  #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:32
1367
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:29
1368
  msgid ""
1369
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
1370
  "tempor incididunt ut labore et dolore magna aliqua."
1372
 
1373
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:34
1374
  #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:31
1375
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:126
1376
+ #: obfx_modules/companion-legacy/inc/shop-isle/template-about.php:81
1377
  msgid "Meet our team"
1378
  msgstr ""
1379
 
1380
  #: obfx_modules/companion-legacy/inc/hestia/inc/customizer.php:47
1381
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:28
1382
  msgid "What clients say"
1383
  msgstr ""
1384
 
1409
 
1410
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-features-section.php:24
1411
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-features-section.php:34
1412
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:216
1413
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:610
1414
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:674
1415
  msgid "Features"
1416
  msgstr ""
1417
 
1445
  msgstr ""
1446
 
1447
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-ribbon-section.php:80
1448
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-ribbon-section.php:39
1449
  msgid "Subscribe to our Newsletter"
1450
  msgstr ""
1451
 
1452
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-ribbon-section.php:98
1453
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-ribbon-section.php:42
1454
  msgid "Subscribe"
1455
  msgstr ""
1456
 
1462
  #: obfx_modules/companion-legacy/inc/rhea/widgets/features.widget.php:88
1463
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-clients.php:115
1464
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:183
1465
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:328
1466
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:383
1467
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:326
1468
  msgid "Link"
1469
  msgstr ""
1470
 
 
 
 
 
 
1471
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-team-section.php:99
1472
  msgid "Team Content"
1473
  msgstr ""
1480
  msgid "Team Member"
1481
  msgstr ""
1482
 
 
 
 
 
 
1483
  #: obfx_modules/companion-legacy/inc/hestia/inc/features/feature-testimonials-section.php:99
1484
  msgid "Testimonials Content"
1485
  msgstr ""
1492
  msgid "Testimonial"
1493
  msgstr ""
1494
 
1495
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:186
1496
  msgid "Responsive"
1497
  msgstr ""
1498
 
1499
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:193
1500
  msgid "Quality"
1501
  msgstr ""
1502
 
1503
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:200
1504
  msgid "Support"
1505
  msgstr ""
1506
 
1507
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:252
1508
  msgid "Desmond Purpleson"
1509
  msgstr ""
1510
 
1511
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:253
1512
  msgid "CEO"
1513
  msgstr ""
1514
 
1515
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:254
1516
  msgid ""
1517
  "Locavore pinterest chambray affogato art party, forage coloring book "
1518
  "typewriter. Bitters cold selfies, retro celiac sartorial mustache."
1519
  msgstr ""
1520
 
1521
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:283
1522
  msgid "Parsley Pepperspray"
1523
  msgstr ""
1524
 
1525
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:284
1526
  msgid "Marketing Specialist"
1527
  msgstr ""
1528
 
1529
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:285
1530
  msgid ""
1531
  "Craft beer salvia celiac mlkshk. Pinterest celiac tumblr, portland salvia "
1532
  "skateboard cliche thundercats. Tattooed chia austin hell."
1533
  msgstr ""
1534
 
1535
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:314
1536
  msgid "Desmond Eagle"
1537
  msgstr ""
1538
 
1539
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:315
1540
  msgid "Graphic Designer"
1541
  msgstr ""
1542
 
1543
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:316
1544
  msgid ""
1545
  "Pok pok direct trade godard street art, poutine fam typewriter food truck "
1546
  "narwhal kombucha wolf cardigan butcher whatever pickled you."
1547
  msgstr ""
1548
 
1549
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:345
1550
  msgid "Ruby Von Rails"
1551
  msgstr ""
1552
 
1553
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:346
1554
  msgid "Lead Developer"
1555
  msgstr ""
1556
 
1557
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:347
1558
  msgid ""
1559
  "Small batch vexillologist 90's blue bottle stumptown bespoke. Pok pok tilde "
1560
  "fixie chartreuse, VHS gluten-free selfies wolf hot."
1561
  msgstr ""
1562
 
1563
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:213
1564
  msgid "Inverness McKenzie"
1565
  msgstr ""
1566
 
1567
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:214
1568
  msgid "Business Owner"
1569
  msgstr ""
1570
 
1571
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:215
1572
  msgid ""
1573
  "\"We have no regrets! After using your product my business skyrocketed! I "
1574
  "made back the purchase price in just 48 hours! I couldn't have asked for "
1575
  "more than this.\""
1576
  msgstr ""
1577
 
1578
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:220
1579
  msgid "Hanson Deck"
1580
  msgstr ""
1581
 
1582
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:221
1583
  msgid "Independent Artist"
1584
  msgstr ""
1585
 
1586
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:222
1587
  msgid ""
1588
  "\"Your company is truly upstanding and is behind its product 100 percent. "
1589
  "Hestia is worth much more than I paid. I like Hestia more each day because "
1590
  "it makes easier.\""
1591
  msgstr ""
1592
 
1593
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:227
1594
  msgid "Natalya Undergrowth"
1595
  msgstr ""
1596
 
1597
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:228
1598
  msgid "Freelancer"
1599
  msgstr ""
1600
 
1601
+ #: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:229
1602
  msgid ""
1603
  "\"Thank you for making it painless, pleasant and most of all hassle free! I "
1604
  "am so pleased with this product. Dude, your stuff is great! I will refer "
1656
  msgstr ""
1657
 
1658
  #: obfx_modules/companion-legacy/inc/rhea/widgets/contact.widget.php:77
1659
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:115
1660
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:54
1661
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:55
1662
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:170
1772
 
1773
  #: obfx_modules/companion-legacy/inc/rhea/widgets/icon-box.widget.php:96
1774
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-team.php:285
1775
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:127
1776
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:365
1777
  msgid "Description"
1778
  msgstr ""
1779
 
1793
  msgid "Percentage"
1794
  msgstr ""
1795
 
1796
+ #: obfx_modules/companion-legacy/inc/shop-isle/content-slider.php:16
1797
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:50
1798
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:57
1799
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:64
1800
+ msgid "ShopIsle"
1801
+ msgstr ""
1802
+
1803
+ #: obfx_modules/companion-legacy/inc/shop-isle/content-slider.php:16
1804
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:51
1805
+ msgid "WooCommerce Theme"
1806
+ msgstr ""
1807
+
1808
+ #: obfx_modules/companion-legacy/inc/shop-isle/content-slider.php:16
1809
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:52
1810
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:59
1811
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:66
1812
+ msgid "FIND OUT MORE"
1813
+ msgstr ""
1814
+
1815
+ #: obfx_modules/companion-legacy/inc/shop-isle/content-slider.php:16
1816
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:58
1817
+ msgid "Hight quality store"
1818
+ msgstr ""
1819
+
1820
+ #: obfx_modules/companion-legacy/inc/shop-isle/content-slider.php:16
1821
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:65
1822
+ msgid "Responsive Theme"
1823
+ msgstr ""
1824
+
1825
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:23
1826
+ msgid ""
1827
+ "To customize the About us Page you need to first select the template "
1828
+ "\"About us page\" for the page you want to use for this purpose. Then open "
1829
+ "that page in the browser and press \"Customize\" in the top bar."
1830
+ msgstr ""
1831
+
1832
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:23
1833
+ msgid "Need further assistance? Check out this"
1834
+ msgstr ""
1835
+
1836
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:23
1837
+ msgid "doc"
1838
+ msgstr ""
1839
+
1840
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:33
1841
+ msgid "Slider section"
1842
+ msgstr ""
1843
+
1844
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:74
1845
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:85
1846
+ msgid "Add new slide"
1847
+ msgstr ""
1848
+
1849
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:84
1850
+ msgid "Slide"
1851
+ msgstr ""
1852
+
1853
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:95
1854
+ msgid "Slider shortcode"
1855
+ msgstr ""
1856
+
1857
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:96
1858
+ msgid ""
1859
+ "You can replace the homepage slider with any plugin you like, just copy the "
1860
+ "shortcode generated and paste it here."
1861
+ msgstr ""
1862
+
1863
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:110
1864
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:199
1865
+ msgid "About us page"
1866
+ msgstr ""
1867
+
1868
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:113
1869
+ msgid "Our team"
1870
+ msgstr ""
1871
+
1872
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:119
1873
+ msgid "About us page - our team"
1874
+ msgstr ""
1875
+
1876
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:138
1877
+ #: obfx_modules/companion-legacy/inc/shop-isle/template-about.php:82
1878
+ msgid "An awesome way to introduce the members of your team."
1879
+ msgstr ""
1880
+
1881
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:191
1882
+ msgid "Team member"
1883
+ msgstr ""
1884
+
1885
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:211
1886
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:263
1887
+ msgid "Video"
1888
+ msgstr ""
1889
+
1890
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:217
1891
+ msgid "About us page - video"
1892
+ msgstr ""
1893
+
1894
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:224
1895
+ #: obfx_modules/companion-legacy/inc/shop-isle/template-about.php:140
1896
+ msgid "Presentation"
1897
+ msgstr ""
1898
+
1899
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:236
1900
+ #: obfx_modules/companion-legacy/inc/shop-isle/template-about.php:141
1901
+ msgid "What the video about our new products"
1902
+ msgstr ""
1903
+
1904
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:270
1905
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:283
1906
+ #: obfx_modules/companion-legacy/inc/shop-isle/template-about.php:162
1907
+ msgid "Our advantages"
1908
+ msgstr ""
1909
+
1910
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:276
1911
+ msgid "About us page - our advantages"
1912
+ msgstr ""
1913
+
1914
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:299
1915
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:596
1916
+ msgid "Ideas and concepts"
1917
+ msgstr ""
1918
+
1919
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:304
1920
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:601
1921
+ msgid "Designs & interfaces"
1922
+ msgstr ""
1923
+
1924
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:309
1925
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:606
1926
+ msgid "Highly customizable"
1927
+ msgstr ""
1928
+
1929
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:314
1930
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:611
1931
+ msgid "Easy to use"
1932
+ msgstr ""
1933
+
1934
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:321
1935
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:333
1936
+ msgid "Add new advantage"
1937
+ msgstr ""
1938
+
1939
+ #: obfx_modules/companion-legacy/inc/shop-isle/customizer.php:332
1940
+ msgid "Advantage"
1941
+ msgstr ""
1942
+
1943
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-clients.php:24
1944
  msgid "Zerif - Clients widget"
1945
  msgstr ""
1953
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-focus.php:192
1954
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-team.php:348
1955
  #: obfx_modules/companion-legacy/inc/zerif-lite/widgets/widget-testimonial.php:202
1956
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:288
1957
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:818
1958
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:123
1959
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:163
1960
  msgid "Image"
1961
  msgstr ""
1962
 
2035
  msgid "Author details"
2036
  msgstr ""
2037
 
2038
+ #: obfx_modules/companion-legacy/init.php:84
2039
  msgid "%s enhancements "
2040
  msgstr ""
2041
 
2042
+ #: obfx_modules/companion-legacy/init.php:85
2043
  msgid "Module containing frontpage improvements for %s theme."
2044
  msgstr ""
2045
 
2046
+ #: obfx_modules/companion-legacy/init.php:210
2047
  msgid "Search icon"
2048
  msgstr ""
2049
 
2050
+ #: obfx_modules/companion-legacy/init.php:212
2051
  msgid "All Icons"
2052
  msgstr ""
2053
 
2054
+ #: obfx_modules/google-analytics/init.php:31
2055
+ msgid "Analytics Integration"
2056
+ msgstr ""
2057
+
2058
+ #: obfx_modules/google-analytics/init.php:32
2059
+ msgid "A module to integrate Google Analytics into your site easily."
2060
+ msgstr ""
2061
+
2062
+ #: obfx_modules/google-analytics/init.php:220
2063
+ msgid "Authenticate with Google"
2064
+ msgstr ""
2065
+
2066
+ #: obfx_modules/google-analytics/init.php:225
2067
+ msgid "Select a tracking code"
2068
+ msgstr ""
2069
+
2070
+ #: obfx_modules/google-analytics/init.php:243
2071
+ msgid "Refresh Accounts"
2072
+ msgstr ""
2073
+
2074
+ #: obfx_modules/google-analytics/init.php:259
2075
+ msgid "Unregister Site"
2076
+ msgstr ""
2077
+
2078
+ #: obfx_modules/image-cdn/inc/class-orbit-fox-connector.php:214
2079
+ #: obfx_modules/image-cdn/inc/class-orbit-fox-connector.php:226
2080
+ #: obfx_modules/image-cdn/inc/class-orbit-fox-image-replacer.php:614
2081
+ #: obfx_modules/image-cdn/inc/class-orbit-fox-image-replacer.php:626
2082
+ #: vendor/codeinwp/elementor-extra-widgets/class-elementor-extra-widgets.php:251
2083
+ #: vendor/codeinwp/elementor-extra-widgets/class-elementor-extra-widgets.php:263
2084
+ #: vendor/codeinwp/full-width-page-templates/builders/class-elementor-full-width-templates.php:107
2085
+ #: vendor/codeinwp/full-width-page-templates/builders/class-elementor-full-width-templates.php:119
2086
+ #: vendor/codeinwp/full-width-page-templates/class-full-width-templates.php:188
2087
+ #: vendor/codeinwp/full-width-page-templates/class-full-width-templates.php:200
2088
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:560
2089
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:572
2090
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:291
2091
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:303
2092
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-newsletter.php:256
2093
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-newsletter.php:268
2094
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:220
2095
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:232
2096
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-server.php:144
2097
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-server.php:156
2098
+ msgid "Cheatin&#8217; huh?"
2099
+ msgstr ""
2100
+
2101
+ #: obfx_modules/image-cdn/init.php:43
2102
+ msgid "Image Optimization &amp; CDN Module"
2103
+ msgstr ""
2104
+
2105
+ #: obfx_modules/image-cdn/init.php:44
2106
+ msgid ""
2107
+ "Let us take care of you images sizes. With this feature we'll compress and "
2108
+ "resize every image on your website.<br/> <strong>* Requires account on "
2109
+ "orbitfox.com</strong>"
2110
+ msgstr ""
2111
+
2112
+ #: obfx_modules/image-cdn/init.php:79
2113
+ msgid " Image Traffic"
2114
+ msgstr ""
2115
+
2116
+ #: obfx_modules/image-cdn/init.php:124
2117
+ msgid "Logged in as"
2118
+ msgstr ""
2119
+
2120
+ #: obfx_modules/image-cdn/init.php:125
2121
+ msgid "Your private CDN url"
2122
+ msgstr ""
2123
+
2124
+ #: obfx_modules/image-cdn/init.php:126
2125
+ msgid "This month traffic usage"
2126
+ msgstr ""
2127
+
2128
+ #: obfx_modules/image-cdn/init.php:127
2129
+ msgid "Your traffic quota"
2130
+ msgstr ""
2131
+
2132
+ #: obfx_modules/image-cdn/init.php:128
2133
+ msgid ""
2134
+ "You can use our image service and CDN in the limit of <span "
2135
+ "class=\"obfx-img-traffic-quota\">"
2136
+ msgstr ""
2137
+
2138
+ #: obfx_modules/image-cdn/init.php:209
2139
+ msgid "Your OrbitFox api key"
2140
+ msgstr ""
2141
+
2142
+ #: obfx_modules/image-cdn/init.php:210
2143
+ msgid "Connect with Orbitfox"
2144
+ msgstr ""
2145
+
2146
+ #: obfx_modules/image-cdn/init.php:230
2147
+ msgid "Connect to OrbitFox service"
2148
+ msgstr ""
2149
+
2150
+ #: obfx_modules/image-cdn/init.php:244
2151
+ msgid "Clear OrbitFox API key"
2152
+ msgstr ""
2153
+
2154
+ #: obfx_modules/menu-icons/init.php:33
2155
+ msgid "Menu Icons"
2156
+ msgstr ""
2157
+
2158
+ #: obfx_modules/menu-icons/init.php:34
2159
+ msgid "Module to define menu icons for navigation."
2160
+ msgstr ""
2161
+
2162
+ #: obfx_modules/menu-icons/init.php:155
2163
+ msgid "Powered by %s plugin"
2164
+ msgstr ""
2165
+
2166
+ #: obfx_modules/menu-icons/init.php:248
2167
+ msgid "theme"
2168
+ msgstr ""
2169
+
2170
+ #: obfx_modules/menu-icons/init.php:259
2171
+ msgid "plugin"
2172
+ msgstr ""
2173
+
2174
+ #: obfx_modules/menu-icons/init.php:262
2175
+ msgid ""
2176
+ "There appears to be a conflict with the %s %s. This module may not work as "
2177
+ "expected."
2178
+ msgstr ""
2179
+
2180
+ #: obfx_modules/mystock-import/inc/photos.php:28
2181
+ #: obfx_modules/mystock-import/init.php:187
2182
+ msgid "Deselect"
2183
+ msgstr ""
2184
+
2185
+ #: obfx_modules/mystock-import/init.php:49
2186
+ msgid "Mystock Import"
2187
+ msgstr ""
2188
+
2189
+ #: obfx_modules/mystock-import/init.php:50
2190
+ msgid "Module to import images directly from"
2191
+ msgstr ""
2192
+
2193
+ #: obfx_modules/mystock-import/init.php:136
2194
+ #: obfx_modules/mystock-import/init.php:144
2195
+ #: obfx_modules/mystock-import/init.php:152
2196
+ #: obfx_modules/mystock-import/init.php:157
2197
+ msgid "Image failed to upload"
2198
+ msgstr ""
2199
+
2200
+ #: obfx_modules/mystock-import/init.php:231
2201
+ msgid "Fetching data"
2202
+ msgstr ""
2203
+
2204
+ #: obfx_modules/mystock-import/init.php:232
2205
+ msgid "Downloading image. Please wait..."
2206
+ msgstr ""
2207
+
2208
+ #: obfx_modules/mystock-import/init.php:233
2209
+ msgid "Your image was imported. Go to Media Library tab to use it."
2210
+ msgstr ""
2211
+
2212
+ #: obfx_modules/mystock-import/init.php:234
2213
+ msgid "Loading more photos..."
2214
+ msgstr ""
2215
+
2216
+ #: obfx_modules/mystock-import/init.php:235
2217
+ msgid "MyStock Library"
2218
+ msgstr ""
2219
+
2220
+ #: obfx_modules/mystock-import/init.php:236
2221
+ msgid "Import & set featured image"
2222
+ msgstr ""
2223
+
2224
+ #: obfx_modules/mystock-import/init.php:237
2225
+ msgid "Import & insert image"
2226
+ msgstr ""
2227
+
2228
+ #: obfx_modules/policy-notice/init.php:28
2229
+ msgid "Policy Notice"
2230
+ msgstr ""
2231
+
2232
+ #: obfx_modules/policy-notice/init.php:29
2233
+ msgid ""
2234
+ "A simple notice bar which will help you inform users about your website "
2235
+ "policy."
2236
+ msgstr ""
2237
+
2238
+ #: obfx_modules/policy-notice/init.php:94
2239
+ msgid ""
2240
+ "Allow OrbitFox to display a bottom bar with info about the website Private "
2241
+ "Policy."
2242
+ msgstr ""
2243
+
2244
+ #: obfx_modules/policy-notice/init.php:101
2245
+ msgid "Policy description"
2246
+ msgstr ""
2247
+
2248
+ #: obfx_modules/policy-notice/init.php:103
2249
+ msgid ""
2250
+ "This website uses cookies to improve your experience. We'll assume you "
2251
+ "accept this policy as long as you are using this website"
2252
+ msgstr ""
2253
+
2254
+ #: obfx_modules/policy-notice/init.php:117
2255
+ msgid "Policy Page"
2256
+ msgstr ""
2257
+
2258
+ #: obfx_modules/policy-notice/init.php:126
2259
+ msgid "Policy Button Label"
2260
+ msgstr ""
2261
+
2262
+ #: obfx_modules/policy-notice/init.php:128
2263
+ msgid "View Policy"
2264
+ msgstr ""
2265
+
2266
+ #: obfx_modules/policy-notice/init.php:190
2267
+ msgid "Agree"
2268
+ msgstr ""
2269
+
2270
+ #: obfx_modules/policy-notice/init.php:330
2271
+ msgid "Default Core Policy"
2272
+ msgstr ""
2273
+
2274
+ #: obfx_modules/safe-updates/init.php:34
2275
+ msgid "Safe Updates"
2276
+ msgstr ""
2277
+
2278
+ #: obfx_modules/safe-updates/init.php:35
2279
+ msgid ""
2280
+ "OrbitFox will give you visual feedback on how your current theme updates "
2281
+ "will affect your site. For the moment this is available only for "
2282
+ "wordpress.org themes."
2283
+ msgstr ""
2284
+
2285
+ #: obfx_modules/safe-updates/init.php:275
2286
+ msgid ""
2287
+ "According to OrbitFox<sup>&copy;</sup> there is a visual difference of %1$s "
2288
+ "&#37; between your current version and the latest one. "
2289
+ msgstr ""
2290
+
2291
+ #: obfx_modules/safe-updates/init.php:280
2292
+ msgid "View report"
2293
+ msgstr ""
2294
+
2295
+ #: obfx_modules/safe-updates/init.php:282
2296
+ msgid "Is very likely that the update is safe. "
2297
+ msgstr ""
2298
+
2299
+ #: obfx_modules/safe-updates/init.php:332
2300
+ msgid ""
2301
+ "Unfortunately, our service is available only if your are using an "
2302
+ "wordpress.org theme. We are still working to extend this feature to custom "
2303
+ "and premium themes soon. "
2304
+ msgstr ""
2305
+
2306
+ #: obfx_modules/safe-updates/init.php:335
2307
+ msgid ""
2308
+ "OrbitFox<sup>&copy;</sup> will need your current theme slug in order to run "
2309
+ "a visual comparison report between your current and latest version. We will "
2310
+ "need your consent in order to do this. <br/>Read <a href=\"\">more</a> "
2311
+ "about this process."
2312
+ msgstr ""
2313
+
2314
+ #: obfx_modules/safe-updates/init.php:337
2315
+ msgid "Allow"
2316
+ msgstr ""
2317
+
2318
+ #: obfx_modules/safe-updates/init.php:392
2319
+ msgid ""
2320
+ "For the moment there is no update for your current theme. We will display a "
2321
+ "notice on the themes page as soon as there is one."
2322
+ msgstr ""
2323
+
2324
+ #: obfx_modules/safe-updates/init.php:460
2325
+ msgid "Safe updates disabled"
2326
+ msgstr ""
2327
+
2328
+ #: obfx_modules/social-sharing/init.php:30
2329
+ msgid "Social Sharing Module"
2330
+ msgstr ""
2331
+
2332
+ #: obfx_modules/social-sharing/init.php:31
2333
+ msgid ""
2334
+ "Add basic social sharing to your posts and pages. Check out the %s to learn "
2335
+ "more!"
2336
+ msgstr ""
2337
+
2338
+ #: obfx_modules/social-sharing/init.php:31
2339
+ msgid "demo"
2340
+ msgstr ""
2341
+
2342
+ #: obfx_modules/social-sharing/views/hestia-social-sharing-tpl.php:36
2343
+ msgid "Share on "
2344
+ msgstr ""
2345
+
2346
+ #: obfx_modules/template-directory/init.php:30
2347
+ msgid "Template Directory Module"
2348
+ msgstr ""
2349
+
2350
+ #: obfx_modules/template-directory/init.php:31
2351
+ msgid ""
2352
+ "The awesome template directory is aiming to provide a wide range of "
2353
+ "templates that you can import straight into your website."
2354
+ msgstr ""
2355
+
2356
+ #: obfx_modules/template-directory/init.php:98
2357
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:20
2358
+ msgid "Orbit Fox Template Directory"
2359
+ msgstr ""
2360
+
2361
+ #: obfx_modules/uptime-monitor/init.php:31
2362
+ msgid "Uptime Monitor"
2363
+ msgstr ""
2364
+
2365
+ #: obfx_modules/uptime-monitor/init.php:32
2366
+ msgid "A module to notify when you website goes down."
2367
+ msgstr ""
2368
+
2369
+ #: obfx_modules/uptime-monitor/init.php:33
2370
+ msgid "One more step..."
2371
  msgstr ""
2372
 
2373
+ #: obfx_modules/uptime-monitor/init.php:33
2374
+ msgid ""
2375
+ "In order to use the uptime service, we will need your e-mail address, where "
2376
+ "we will send downtime alerts."
2377
  msgstr ""
2378
 
2379
+ #: vendor/codeinwp/elementor-extra-widgets/class-elementor-extra-widgets.php:53
2380
  #: vendor/codeinwp/themeisle-content-forms/class-content-form-base.php:170
2381
  msgid "Orbit Fox Addons"
2382
  msgstr ""
2383
 
2384
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:30
2385
  msgid "Post Type Grid"
2386
  msgstr ""
2387
 
2388
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:166
2389
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:693
2390
  msgid "Grid Options"
2391
  msgstr ""
2392
 
2393
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:212
2394
  msgid "Style"
2395
  msgstr ""
2396
 
2397
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:226
2398
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:755
2399
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:468
2400
  msgid "Items"
2401
  msgstr ""
2402
 
2403
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:227
2404
  msgid "How many items?"
2405
  msgstr ""
2406
 
2407
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:237
2408
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:210
2409
  msgid "Columns"
2410
  msgstr ""
2411
 
2412
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:256
2413
  msgid "Order by"
2414
  msgstr ""
2415
 
2416
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:261
2417
  msgid "Modified date"
2418
  msgstr ""
2419
 
2420
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:262
2421
  msgid "Comment count"
2422
  msgstr ""
2423
 
2424
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:272
2425
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:646
2426
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1344
2427
  msgid "Pagination"
2428
  msgstr ""
2429
 
2430
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:296
2431
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:352
2432
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:407
2433
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:487
2434
  msgid "Hide"
2435
  msgstr ""
2436
 
2437
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:306
2438
  msgid "Image height"
2439
  msgstr ""
2440
 
2441
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:363
2442
  msgid "Tag"
2443
  msgstr ""
2444
 
2445
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:399
2446
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:941
2447
  msgid "Meta"
2448
  msgstr ""
2449
 
2450
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:437
2451
  msgid "No. of Categories"
2452
  msgstr ""
2453
 
2454
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:438
2455
  msgid "How many categories to display?"
2456
  msgstr ""
2457
 
2458
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:451
2459
  msgid "No. of Tags"
2460
  msgstr ""
2461
 
2462
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:452
2463
  msgid "How many tags to display?"
2464
  msgstr ""
2465
 
2466
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:463
2467
  msgid "Remove icons"
2468
  msgstr ""
2469
 
2470
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:497
2471
+ msgid "Show full content"
2472
+ msgstr ""
2473
+
2474
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:508
2475
  msgid "Length (words)"
2476
  msgstr ""
2477
 
2478
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:509
2479
  msgid "Length of content (words)"
2480
  msgstr ""
2481
 
2482
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:575
2483
  msgid "Button alignment"
2484
  msgstr ""
2485
 
2486
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:591
2487
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:287
2488
  msgid "Justified"
2489
  msgstr ""
2490
 
2491
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:702
2492
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:415
2493
  msgid "Columns margin"
2494
  msgstr ""
2495
 
2496
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:724
2497
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:437
2498
  msgid "Rows margin"
2499
  msgstr ""
2500
 
2501
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:778
2502
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:830
2503
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:786
2504
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:491
2505
  msgid "Border Radius"
2506
  msgstr ""
2507
 
2508
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:859
2509
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:921
2510
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:981
2511
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1042
2512
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1106
2513
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1356
2514
  msgid "Margin"
2515
  msgstr ""
2516
 
2517
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1176
2518
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1246
2519
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:830
2520
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:879
2521
  msgid "Text Color"
2522
  msgstr ""
2523
 
2524
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1197
2525
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1267
2526
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:845
2527
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:894
2528
  msgid "Background Color"
2529
  msgstr ""
2530
 
2531
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1233
2532
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:871
2533
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:539
2534
  msgid "Hover"
2535
  msgstr ""
2536
 
2537
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1305
2538
  msgid "Button padding"
2539
  msgstr ""
2540
 
2541
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1322
2542
  msgid "Button border radius"
2543
  msgstr ""
2544
 
2545
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1483
2546
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:62
2547
+ msgid "Previous"
2548
+ msgstr ""
2549
+
2550
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1484
2551
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:64
2552
+ msgid "Next"
2553
+ msgstr ""
2554
+
2555
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1617
2556
  msgid "No reviews"
2557
  msgstr ""
2558
 
2559
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1617
2560
  msgid "1 review"
2561
  msgstr ""
2562
 
2563
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1617
2564
  msgid "% reviews"
2565
  msgstr ""
2566
 
2567
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1619
2568
  msgid "No comments"
2569
  msgstr ""
2570
 
2571
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1619
2572
  msgid "1 comment"
2573
  msgstr ""
2574
 
2575
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php:1619
2576
  msgid "% comments"
2577
  msgstr ""
2578
 
2579
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/premium-placeholder.php:77
2580
+ msgid "This widget is part of the pro version of Sizzify."
2581
  msgstr ""
2582
 
2583
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/premium-placeholder.php:79
2584
+ msgid "Upgrade Here!"
2585
  msgstr ""
2586
 
2587
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:29
2588
  msgid "Pricing Table"
2589
  msgstr ""
2590
 
2591
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:89
2592
  msgid "Plan Title"
2593
  msgstr ""
2594
 
2595
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:99
2596
  msgid "Pricing Plan"
2597
  msgstr ""
2598
 
2599
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:107
2600
  msgid "Title HTML tag"
2601
  msgstr ""
2602
 
2603
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:135
2604
  msgid "Subtitle HTML Tag"
2605
  msgstr ""
2606
 
2607
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:179
2608
  msgid "$"
2609
  msgstr ""
2610
 
2611
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:187
2612
  msgid "Currency Position"
2613
  msgstr ""
2614
 
2615
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:223
2616
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:253
2617
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:138
2618
  msgid "Plan Features"
2619
  msgstr ""
2620
 
2621
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:227
2622
  msgid "First"
2623
  msgstr ""
2624
 
2625
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:231
2626
  msgid "Second"
2627
  msgstr ""
2628
 
2629
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:235
2630
  msgid "Third"
2631
  msgstr ""
2632
 
2633
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:243
2634
  msgid "Accented Text"
2635
  msgstr ""
2636
 
2637
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:244
2638
  msgid "Appears before feature text"
2639
  msgstr ""
2640
 
2641
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:246
2642
  msgid "Accent"
2643
  msgstr ""
2644
 
2645
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:317
2646
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:318
2647
  msgid "Buy Now"
2648
  msgstr ""
2649
 
2650
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:327
2651
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:173
2652
  msgid "https://example.com"
2653
  msgstr ""
2654
 
2655
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:345
2656
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:183
2657
  msgid "Icon Position"
2658
  msgstr ""
2659
 
2660
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:361
2661
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:734
2662
  msgid "Icon Spacing"
2663
  msgstr ""
2664
 
2665
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:386
2666
  msgid "Header"
2667
  msgstr ""
2668
 
2669
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:394
2670
  msgid "Header Padding"
2671
  msgstr ""
2672
 
2673
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:407
2674
  msgid "Title Color"
2675
  msgstr ""
2676
 
2677
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:432
2678
  msgid "Subtitle Color"
2679
  msgstr ""
2680
 
2681
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:457
2682
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:493
2683
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:619
2684
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:767
2685
  msgid "Section Background"
2686
  msgstr ""
2687
 
2688
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:481
2689
  msgid "Price Box Padding"
2690
  msgstr ""
2691
 
2692
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:511
2693
  msgid "Currency Color"
2694
  msgstr ""
2695
 
2696
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:545
2697
  msgid "Price Color"
2698
  msgstr ""
2699
 
2700
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:579
2701
  msgid "Period Color"
2702
  msgstr ""
2703
 
2704
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:629
2705
  msgid "Features List Padding"
2706
  msgstr ""
2707
 
2708
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:640
2709
  msgid "Accented"
2710
  msgstr ""
2711
 
2712
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:650
2713
  msgid "Accented Color"
2714
  msgstr ""
2715
 
2716
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:683
2717
  msgid "Features Color"
2718
  msgstr ""
2719
 
2720
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:708
2721
  msgid "Icons"
2722
  msgstr ""
2723
 
2724
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:717
2725
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:154
2726
  msgid "Icon Color"
2727
  msgstr ""
2728
 
2729
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/pricing-table.php:918
2730
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:563
2731
  msgid "Transition Duration"
2732
  msgstr ""
2733
 
2734
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:89
2735
  msgid "Award-Winning​"
2736
  msgstr ""
2737
 
2738
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:90
2739
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:97
2740
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:104
2741
  msgid "Add some text here to describe your services to the page visitors.​"
2742
  msgstr ""
2743
 
2744
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:96
2745
  msgid "Professional​"
2746
  msgstr ""
2747
 
2748
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:103
2749
  msgid "Consulting​"
2750
  msgstr ""
2751
 
2752
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:132
2753
  msgid "Title & Description"
2754
  msgstr ""
2755
 
2756
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:133
2757
  msgid "Service Title"
2758
  msgstr ""
2759
 
2760
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:233
2761
  msgid "Icon / Image"
2762
  msgstr ""
2763
 
2764
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:240
2765
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/elementor/services.php:327
2766
  msgid "Spacing"
2767
  msgstr ""
2768
 
2769
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/best-products.php:13
2770
+ msgid ""
2771
+ "Woo Best Selling Products - designed for use with the Elementor Page "
2772
+ "Builder plugin"
2773
  msgstr ""
2774
 
2775
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/best-products.php:17
2776
+ msgid "Woo Best Selling Products"
2777
  msgstr ""
2778
 
2779
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/best-products.php:55
2780
+ msgid "Best Sellers"
2781
  msgstr ""
2782
 
2783
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/best-products.php:134
2784
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/featured-products.php:140
2785
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/popular-products.php:139
2786
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/products-categories.php:141
2787
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/recent-products.php:137
2788
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/sale-products.php:137
2789
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:155
2790
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget.php:150
2791
+ msgid "Title:"
2792
  msgstr ""
2793
 
2794
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/best-products.php:140
2795
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/featured-products.php:146
2796
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/popular-products.php:145
2797
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/recent-products.php:143
2798
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/sale-products.php:143
2799
+ msgid "Number of products to show:"
2800
  msgstr ""
2801
 
2802
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/best-products.php:146
2803
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/featured-products.php:152
2804
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/popular-products.php:151
2805
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/products-categories.php:153
2806
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/recent-products.php:149
2807
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/sale-products.php:149
2808
+ msgid "Number of Columns:"
2809
  msgstr ""
2810
 
2811
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/featured-products.php:13
2812
+ msgid ""
2813
+ "Woo Featured Products - designed for use with the Elementor Page Builder "
2814
+ "plugin"
 
2815
  msgstr ""
2816
 
2817
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/featured-products.php:17
2818
+ msgid "Woo Featured Products"
2819
  msgstr ""
2820
 
2821
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/featured-products.php:55
2822
+ msgid "Recommended For You"
2823
  msgstr ""
2824
 
2825
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/popular-products.php:13
2826
+ msgid ""
2827
+ "Woo Popular Products - designed for use with the Elementor Page Builder "
2828
+ "plugin"
2829
  msgstr ""
2830
 
2831
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/popular-products.php:17
2832
+ msgid "Woo Popular Products"
2833
  msgstr ""
2834
 
2835
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/popular-products.php:55
2836
+ msgid "Fan Favorites"
2837
  msgstr ""
2838
 
2839
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/products-categories.php:13
2840
+ msgid ""
2841
+ "Woo Product Categories - designed for use with the Elementor Page Builder "
2842
+ "plugin"
2843
  msgstr ""
2844
 
2845
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/products-categories.php:17
2846
+ msgid "Woo Product Categories"
2847
  msgstr ""
2848
 
2849
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/products-categories.php:55
2850
+ msgid "Shop By Categories"
2851
  msgstr ""
2852
 
2853
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/products-categories.php:147
2854
+ msgid "Number of categories to show:"
2855
  msgstr ""
2856
 
2857
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/recent-products.php:13
2858
+ msgid ""
2859
+ "Woo Recent Products - designed for use with the Elementor Page Builder "
2860
+ "plugin"
2861
  msgstr ""
2862
 
2863
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/recent-products.php:17
2864
+ msgid "Woo Recent Products"
2865
  msgstr ""
2866
 
2867
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/recent-products.php:55
2868
+ msgid "New In"
2869
+ msgstr ""
2870
+
2871
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/sale-products.php:13
2872
  msgid ""
2873
+ "Woo On Sale Products - designed for use with the Elementor Page Builder "
2874
+ "plugin"
2875
+ msgstr ""
2876
+
2877
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/sale-products.php:17
2878
+ msgid "Woo On Sale Products"
2879
+ msgstr ""
2880
+
2881
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/woo/sale-products.php:55
2882
+ msgid "On Sale"
2883
+ msgstr ""
2884
+
2885
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:13
2886
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget.php:13
2887
+ msgid ""
2888
+ "Recent posts with featured image - ideal for use with Elementor Page "
2889
+ "Builder plugin"
2890
+ msgstr ""
2891
+
2892
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:17
2893
+ msgid "EAW: Elementor Posts By Category"
2894
+ msgstr ""
2895
+
2896
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:161
2897
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget.php:156
2898
+ msgid "Number of posts to show:"
2899
  msgstr ""
2900
 
2901
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:185
2902
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget.php:164
2903
+ msgid "Display post excerpt?"
2904
+ msgstr ""
2905
+
2906
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget-plus.php:189
2907
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget.php:168
2908
+ msgid "Excerpt length to show:"
2909
+ msgstr ""
2910
+
2911
+ #: vendor/codeinwp/elementor-extra-widgets/widgets/wp/eaw-posts-widget.php:17
2912
+ msgid "EAW: Elementor Recent Posts"
2913
+ msgstr ""
2914
+
2915
+ #: vendor/codeinwp/full-width-page-templates/class-full-width-templates.php:38
2916
+ msgid "Page Builder - Full Width - Blank"
2917
+ msgstr ""
2918
+
2919
+ #: vendor/codeinwp/full-width-page-templates/class-full-width-templates.php:39
2920
+ msgid "Page Builder - Full Width"
2921
+ msgstr ""
2922
+
2923
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:166
2924
  msgid "A new Orbit Fox Template"
2925
  msgstr ""
2926
 
2927
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:168
2928
  msgid "This is an awesome Orbit Fox Template."
2929
  msgstr ""
2930
 
2931
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:171
2932
  msgid "Elementor Page Builder"
2933
  msgstr ""
2934
 
2935
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:176
2936
  msgid "About Our Business"
2937
  msgstr ""
2938
 
2939
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:177
2940
  msgid ""
2941
  "Use this layout to present your business in a fancy way. Add an interactive "
2942
  "header, shwocase your services via progress bars, introduce your team "
2944
  "beautify the design by adding catchy images."
2945
  msgstr ""
2946
 
2947
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:183
2948
  msgid "Contact Us"
2949
  msgstr ""
2950
 
2951
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:184
2952
  msgid ""
2953
  "A clean and simple template for your Contact page, where we integrated our "
2954
  "Pirate Forms plugin. It will let your customers send you a message using an "
2956
  "business, completes the section."
2957
  msgstr ""
2958
 
2959
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:190
2960
  msgid "Pricing"
2961
  msgstr ""
2962
 
2963
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:191
2964
  msgid ""
2965
  "If you plan to sell your products online, this layout offers you elegant "
2966
  "pricing tables so you can differentiate the features and services for your "
2968
  "where you can answer people's questions."
2969
  msgstr ""
2970
 
2971
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:197
2972
  msgid "Material Homepage"
2973
  msgstr ""
2974
 
2975
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:198
2976
  msgid ""
2977
  "This layout could be your main website homepage (or you can use it as an "
2978
  "alternative homepage, if you wish). It was built on material design and "
2980
  "plans, and other sections that you can add yourself by customizing it."
2981
  msgstr ""
2982
 
2983
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:204
2984
  msgid "Ether - Landing Page"
2985
  msgstr ""
2986
 
2987
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:205
2988
  msgid ""
2989
  "An elegant and modern landing page for e-commerce, coming with a clean "
2990
  "interface, beautiful typography, photo galleries, and call to action. If "
2992
  "layout to tell people why they should buy it."
2993
  msgstr ""
2994
 
2995
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:211
2996
  msgid "Jason - Landing Page"
2997
  msgstr ""
2998
 
2999
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:212
3000
  msgid ""
3001
  "A classy template for freelancers, where you can put your skills and "
3002
  "knowldge in the spotlight for potential clients. Talk about yourself, your "
3004
  "designed to feature one-page scrolling."
3005
  msgstr ""
3006
 
3007
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:218
3008
  msgid "Pulse - Landing Page"
3009
  msgstr ""
3010
 
3011
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:219
3012
  msgid ""
3013
  "A good-looking landing page for products and apps, built to mark the "
3014
  "features and services that they offer. The layout provides customer "
3017
  "template might help."
3018
  msgstr ""
3019
 
3020
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:225
3021
  msgid "Ascend - Landing Page"
3022
  msgstr ""
3023
 
3024
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:226
3025
  msgid ""
3026
  "A resume-like template, built for outdoor enthusiasts and nature lovers. "
3027
  "Its design and layout make it flexible for any other purpose too, so do not "
3029
  "business-oriented."
3030
  msgstr ""
3031
 
3032
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:232
3033
  msgid "Path - Landing Page"
3034
  msgstr ""
3035
 
3036
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:233
3037
  msgid ""
3038
  "If you are a business consultant - agency or working on your own - have a "
3039
  "look at this template! It comes with a clean design, call to action, "
3040
  "statistics, and sections that put your services first."
3041
  msgstr ""
3042
 
3043
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:239
3044
  msgid "Mocha - Landing Page"
3045
  msgstr ""
3046
 
3047
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:240
3048
  msgid ""
3049
  "An elegant and modern template for cafes and pubs, where you can display "
3050
  "your menu in a mouth-watering way. Call to action, blog posts, attractive "
3052
  "people to stop by."
3053
  msgstr ""
3054
 
3055
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:289
 
 
 
 
 
3056
  msgid "Template Directory"
3057
  msgstr ""
3058
 
3059
+ #: vendor/codeinwp/templates-directory/class-page-templates-directory.php:415
3060
  msgid "Install and activate"
3061
  msgstr ""
3062
 
3063
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:21
3064
+ msgid "Sync Templates"
3065
+ msgstr ""
3066
+
3067
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:33
3068
  msgid "More Details"
3069
  msgstr ""
3070
 
3071
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:44
3072
  msgid "Preview"
3073
  msgstr ""
3074
 
3075
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:59
3076
+ msgid "Close"
3077
+ msgstr ""
3078
+
3079
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:66
3080
+ msgid "Import"
3081
+ msgstr ""
3082
+
3083
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:68
3084
+ msgid "See Pro Version"
3085
+ msgstr ""
3086
+
3087
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:101
3088
+ msgid "Required Plugins"
3089
+ msgstr ""
3090
+
3091
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:132
3092
  msgid "Collapse"
3093
  msgstr ""
3094
 
3095
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:137
3096
+ msgid "Enter desktop preview mode"
3097
+ msgstr ""
3098
+
3099
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:140
3100
+ msgid "Enter tablet preview mode"
3101
+ msgstr ""
3102
+
3103
+ #: vendor/codeinwp/templates-directory/views/template-directory-page-tpl.php:143
3104
+ msgid "Enter mobile preview mode"
3105
+ msgstr ""
3106
+
3107
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:73
3108
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:130
3109
  msgid "Fields"
3110
  msgstr ""
3111
 
3112
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:78
3113
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:98
3114
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:101
3115
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:104
3116
  msgid "Field"
3117
  msgstr ""
3118
 
3119
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:88
3120
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:99
3121
  msgid "Form Settings"
3122
  msgstr ""
3123
 
3124
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:108
3125
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:138
3126
  msgid "Label"
3127
  msgstr ""
3128
 
3129
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:116
3130
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:171
3131
  msgid "Textarea"
3132
  msgstr ""
3133
 
3134
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:117
3135
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:168
3136
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:62
3137
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:63
3139
  msgid "Password"
3140
  msgstr ""
3141
 
3142
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:122
3143
  msgid "Is required?"
3144
  msgstr ""
3145
 
3146
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:124
3147
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:159
3148
  msgid "Required"
3149
  msgstr ""
3150
 
3151
+ #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:125
3152
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:160
3153
  msgid "Optional"
3154
  msgstr ""
3161
  msgid "A contact form."
3162
  msgstr ""
3163
 
 
 
 
 
 
 
3164
  #: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-newsletter.php:19
3165
  msgid "Newsletter"
3166
  msgstr ""
3178
  msgstr ""
3179
 
3180
  #: vendor/codeinwp/themeisle-content-forms/beaver/includes/frontend.php:19
3181
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:258
3182
  msgid "The %s setting is required!"
3183
  msgstr ""
3184
 
3185
  #: vendor/codeinwp/themeisle-content-forms/beaver/includes/frontend.php:40
3186
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:84
3187
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-contact.php:85
3188
+ #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:272
3189
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-gutenberg.php:98
3190
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-registration.php:72
3191
  msgid "Submit"
3276
  "form settings on "
3277
  msgstr ""
3278
 
 
 
 
 
 
 
 
 
 
 
 
3279
  #: vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php:147
3280
  msgid "Placeholder"
3281
  msgstr ""
3405
  msgid "Invalid Data "
3406
  msgstr ""
3407
 
 
 
 
 
 
 
 
 
3408
  #. Plugin URI of the plugin/theme
3409
  msgid "https://themeisle.com/plugins/orbit-fox-companion"
3410
  msgstr ""
3411
 
3412
  #. Description of the plugin/theme
3413
+ msgid ""
3414
+ "This swiss-knife plugin comes with a quality template library, menu/sharing "
3415
+ "icons modules, and newly added Elementor/BeaverBuilder page builder widgets "
3416
+ "on each release."
3417
  msgstr ""
3418
 
3419
  #. Author of the plugin/theme
obfx_modules/companion-legacy/inc/azera-shop/css/style.css CHANGED
@@ -1,30 +1,27 @@
1
- .azea_shop_only_customizer{
2
  display: none;
3
  }
4
 
 
5
  /*---------------------------------------
6
  SECTION: SERVICES
7
  -----------------------------------------*/
 
8
  .services-wrap {
9
- text-align: center;
10
  position: relative;
11
  padding-bottom: 50px;
 
12
  }
13
 
14
  .services {
15
- background-color: #FFF;
16
  border-bottom: 1px solid #eaebec;
17
- }
18
-
19
- .services .section-overlay-layer {
20
  }
21
 
22
  .single-service {
23
  padding: 40px 20px 40px 20px;
24
- background: #ffffff;
25
- -webkit-border-radius: 3px;
26
- -moz-border-radius: 3px;
27
  border-radius: 3px;
 
28
  -webkit-transition: all ease 0.55s;
29
  transition: all ease 0.55s;
30
  }
@@ -35,36 +32,37 @@
35
  text-align: center;
36
  }
37
 
38
- .single-service > h3 > a:hover, .service-icon > a:hover{
39
- text-decoration:none;
 
40
  }
41
 
42
  .services-wrap > .service-box {
43
- width: 31.5%;
44
- margin: 0 1.25% 0 1.25%;
45
- margin-bottom: 30px;
46
- vertical-align: top;
47
  }
48
 
49
- .services-wrap > .service-box:nth-child(3n+1){
50
- margin-left: 0;
51
  clear: left;
 
52
  }
53
 
54
- .services-wrap > .service-box:nth-child(3n){
55
- margin-right: 0;
56
  clear: right;
 
57
  }
58
 
59
  .single-service .service-icon {
60
- font-size: 60px;
61
  margin-bottom: 35px;
 
62
  }
63
 
64
  .single-service h3 {
65
- color: #454545;
66
  margin-bottom: 15px;
67
  padding-top: 5px;
 
68
  }
69
 
70
  .galcolumn .single-service {
@@ -75,13 +73,15 @@
75
  display: none !important;
76
  }
77
 
 
78
  /*---------------------------------------
79
  SECTION: TESTIMONIALS
80
  -----------------------------------------*/
 
81
  .testimonials {
82
- text-align: center;
83
- background-color: #FFF;
84
  border-bottom: 1px solid #eaebec;
 
 
85
  }
86
 
87
  .testimonials .section-overlay-layer {
@@ -89,28 +89,26 @@
89
  }
90
 
91
  .feedback {
92
- padding: 0 30px;
93
  margin-bottom: 45px;
 
94
  }
95
 
96
  .feedback .pic-container {
 
97
  top: -40px;
98
  width: 100%;
99
- position: absolute;
100
  }
101
 
102
  .feedback .pic-container-inner {
103
- -webkit-border-radius: 50%;
104
- -moz-border-radius: 50%;
105
- border-radius: 50%;
106
  display: inline-block;
107
  overflow: hidden;
108
- background-clip: padding-box;
109
  width: 170px;
110
  height: 170px;
111
- box-shadow: 0px 0px 0px 5px #f5f5f5;
112
- background-color: #f5f5f5;
113
  border: 5px solid #e5e5e5;
 
 
 
 
114
  }
115
 
116
  .feedback .pic-container img {
@@ -118,9 +116,9 @@
118
  }
119
 
120
  .feedback p {
121
- font-style: italic;
122
  margin-top: 20px;
123
  margin-bottom: 0;
 
124
  }
125
 
126
  .feedback h5 {
@@ -132,8 +130,8 @@
132
  }
133
 
134
  .testimonials-box {
135
- text-align: center;
136
  width: 100%;
 
137
  }
138
 
139
  .testimonials-wrap {
@@ -142,26 +140,22 @@
142
 
143
  .testimonials-wrap .testimonials-box {
144
  display: inline-block;
145
- -webkit-transition: all .2s ease;
146
- -moz-transition: all .2s ease;
147
- -o-transition: all .2s ease;
148
- transition: all .2s ease;
149
  }
150
 
151
  .testimonials-box .feedback {
 
 
152
  padding: 145px 0 40px 0;
153
- margin: 40px 0 30px 0;
154
- background: #ffffff;
155
- -webkit-border-radius: 3px;
156
- -moz-border-radius: 3px;
157
- border-radius: 3px;
158
- -webkit-transition: all ease 0.55s;
159
- transition: all ease 0.55s;
160
- position: relative;
161
  }
162
 
163
  .testimonials-box .feedback:hover {
164
- border-bottom-color: rgba(255,162,0,1.00);
165
  }
166
 
167
  .galcolumn .testimonials-box {
@@ -169,33 +163,35 @@
169
  }
170
 
171
  .testimonials-wrap > .testimonials-box {
172
- width: 31.5%;
173
- margin: 0 1.15% 0 1.15%;
174
- margin-bottom: 30px;
175
- vertical-align: top;
176
  }
177
 
178
  .testimonials-wrap > .testimonials-box:nth-child(3n+1) {
179
- margin-left: 0;
180
- clear: left;
181
  }
182
 
183
  .testimonials-wrap > .testimonials-box:nth-child(3n) {
184
- margin-right: 0;
185
- clear: right;
186
  }
187
 
 
188
  /*---------------------------------------
189
  SECTION: TEAM
190
  -----------------------------------------*/
 
191
  .team {
192
- background-color: #FFF;
193
  border-bottom: 1px solid #eaebec;
 
 
 
 
194
  background-position: 50% 50%;
195
- background-repeat: no-repeat;
196
- background-attachment: fixed;
197
- background-size: cover;
198
- border-bottom: 1px solid #F3F3F3;
199
  }
200
 
201
  .team .section-overlay-layer {
@@ -204,38 +200,36 @@
204
  }
205
 
206
  .team .sub-heading {
207
- color: #FFF;
208
  }
209
 
210
  .team .dark-text {
211
- color: #FFF;
212
  }
213
 
214
  .team-member {
215
- margin-bottom: 25px;
216
- position: relative;
217
  overflow: hidden;
 
218
  min-height: 100px;
219
- -webkit-border-radius: 50%;
220
- -moz-border-radius: 50%;
221
  border-radius: 50%;
222
  }
223
 
224
  .team-member .social-icons {
225
- opacity: 1;
226
- margin-top: 5px;
227
  position: relative;
 
 
 
 
228
  -webkit-transition: all ease 0.55s;
229
  transition: all ease 0.55s;
230
- margin-bottom: 0;
231
- margin-top: 0;
232
  }
233
 
234
  .team-member .social-icons li {
235
  display: inline-block;
236
- padding-left: 5px;
237
- padding-right: 5px;
238
  padding-top: 3px;
 
 
239
  }
240
 
241
  .team-member .social-icons li a {
@@ -252,12 +246,10 @@
252
  }
253
 
254
  .member-pic {
255
- border: none;
256
- -webkit-border-radius: 0px;
257
- -moz-border-radius: 0px;
258
- border-radius: 0px;
259
  width: 183px;
260
  height: 183px;
 
 
261
  }
262
 
263
  .member-pic img {
@@ -266,26 +258,24 @@
266
  }
267
 
268
  .member-details {
269
- left: 0;
270
- position: absolute;
271
- color: #FFF;
272
  display: table;
273
  overflow: hidden;
274
- height: 183px;
275
- width: 183px;
276
  bottom: 100%;
277
- -webkit-transition: all 0.3s;
278
- -moz-transition: all 0.3s;
279
- -o-transition: all 0.3s;
280
- transition: all 0.3s;
281
  background: rgba(0,0,0,0);
282
  text-align: center;
 
 
283
  }
284
 
285
  .member-details h5 {
286
  margin: 0;
287
  margin-bottom: 5px;
288
- color: #FFF;
289
  }
290
 
291
  .team-member-wrap {
@@ -293,13 +283,13 @@
293
  }
294
 
295
  .team-member-wrap .team-member-box {
296
- float: none;
297
- display: inline-block;
298
- margin-right: -4px;
299
- vertical-align: top;
300
- padding-right: 55px;
301
- padding-left: 55px;
302
- padding-bottom: 30px;
303
  }
304
 
305
  .member-details-inner {
@@ -309,17 +299,14 @@
309
 
310
  .team-member:hover .member-details {
311
  bottom: 0;
 
312
  -webkit-transition: all 0.3s;
313
- -moz-transition: all 0.3s;
314
- -o-transition: all 0.3s;
315
  transition: all 0.3s;
316
- background: rgba(255,162,0,0.7);
317
  }
318
 
319
  @media (min-width: 992px) and (max-width: 1200px) {
320
  .team-member-wrap .team-member-box {
321
- padding-right: 30px;
322
- padding-left: 30px;
323
  }
324
  }
325
-
1
+ .azea_shop_only_customizer {
2
  display: none;
3
  }
4
 
5
+
6
  /*---------------------------------------
7
  SECTION: SERVICES
8
  -----------------------------------------*/
9
+
10
  .services-wrap {
 
11
  position: relative;
12
  padding-bottom: 50px;
13
+ text-align: center;
14
  }
15
 
16
  .services {
 
17
  border-bottom: 1px solid #eaebec;
18
+ background-color: #fff;
 
 
19
  }
20
 
21
  .single-service {
22
  padding: 40px 20px 40px 20px;
 
 
 
23
  border-radius: 3px;
24
+ background: #fff;
25
  -webkit-transition: all ease 0.55s;
26
  transition: all ease 0.55s;
27
  }
32
  text-align: center;
33
  }
34
 
35
+ .single-service > h3 > a:hover,
36
+ .service-icon > a:hover {
37
+ text-decoration: none;
38
  }
39
 
40
  .services-wrap > .service-box {
41
+ width: 31.5%;
42
+ margin: 0 1.25% 0 1.25%;
43
+ margin-bottom: 30px;
44
+ vertical-align: top;
45
  }
46
 
47
+ .services-wrap > .service-box:nth-child(3n+1) {
 
48
  clear: left;
49
+ margin-left: 0;
50
  }
51
 
52
+ .services-wrap > .service-box:nth-child(3n) {
 
53
  clear: right;
54
+ margin-right: 0;
55
  }
56
 
57
  .single-service .service-icon {
 
58
  margin-bottom: 35px;
59
+ font-size: 60px;
60
  }
61
 
62
  .single-service h3 {
 
63
  margin-bottom: 15px;
64
  padding-top: 5px;
65
+ color: #454545;
66
  }
67
 
68
  .galcolumn .single-service {
73
  display: none !important;
74
  }
75
 
76
+
77
  /*---------------------------------------
78
  SECTION: TESTIMONIALS
79
  -----------------------------------------*/
80
+
81
  .testimonials {
 
 
82
  border-bottom: 1px solid #eaebec;
83
+ background-color: #fff;
84
+ text-align: center;
85
  }
86
 
87
  .testimonials .section-overlay-layer {
89
  }
90
 
91
  .feedback {
 
92
  margin-bottom: 45px;
93
+ padding: 0 30px;
94
  }
95
 
96
  .feedback .pic-container {
97
+ position: absolute;
98
  top: -40px;
99
  width: 100%;
 
100
  }
101
 
102
  .feedback .pic-container-inner {
 
 
 
103
  display: inline-block;
104
  overflow: hidden;
 
105
  width: 170px;
106
  height: 170px;
 
 
107
  border: 5px solid #e5e5e5;
108
+ border-radius: 50%;
109
+ background-color: #f5f5f5;
110
+ background-clip: padding-box;
111
+ box-shadow: 0 0 0 5px #f5f5f5;
112
  }
113
 
114
  .feedback .pic-container img {
116
  }
117
 
118
  .feedback p {
 
119
  margin-top: 20px;
120
  margin-bottom: 0;
121
+ font-style: italic;
122
  }
123
 
124
  .feedback h5 {
130
  }
131
 
132
  .testimonials-box {
 
133
  width: 100%;
134
+ text-align: center;
135
  }
136
 
137
  .testimonials-wrap {
140
 
141
  .testimonials-wrap .testimonials-box {
142
  display: inline-block;
143
+ -webkit-transition: all 0.2s ease;
144
+ transition: all 0.2s ease;
 
 
145
  }
146
 
147
  .testimonials-box .feedback {
148
+ position: relative;
149
+ margin: 40px 0 30px 0;
150
  padding: 145px 0 40px 0;
151
+ border-radius: 3px;
152
+ background: #fff;
153
+ -webkit-transition: all ease 0.55s;
154
+ transition: all ease 0.55s;
 
 
 
 
155
  }
156
 
157
  .testimonials-box .feedback:hover {
158
+ border-bottom-color: rgba(255,162,0,1.00);
159
  }
160
 
161
  .galcolumn .testimonials-box {
163
  }
164
 
165
  .testimonials-wrap > .testimonials-box {
166
+ width: 31.5%;
167
+ margin: 0 1.15% 0 1.15%;
168
+ margin-bottom: 30px;
169
+ vertical-align: top;
170
  }
171
 
172
  .testimonials-wrap > .testimonials-box:nth-child(3n+1) {
173
+ clear: left;
174
+ margin-left: 0;
175
  }
176
 
177
  .testimonials-wrap > .testimonials-box:nth-child(3n) {
178
+ clear: right;
179
+ margin-right: 0;
180
  }
181
 
182
+
183
  /*---------------------------------------
184
  SECTION: TEAM
185
  -----------------------------------------*/
186
+
187
  .team {
 
188
  border-bottom: 1px solid #eaebec;
189
+ border-bottom: 1px solid #f3f3f3;
190
+ background-color: #fff;
191
+ background-repeat: no-repeat;
192
+ background-attachment: fixed;
193
  background-position: 50% 50%;
194
+ background-size: cover;
 
 
 
195
  }
196
 
197
  .team .section-overlay-layer {
200
  }
201
 
202
  .team .sub-heading {
203
+ color: #fff;
204
  }
205
 
206
  .team .dark-text {
207
+ color: #fff;
208
  }
209
 
210
  .team-member {
 
 
211
  overflow: hidden;
212
+ position: relative;
213
  min-height: 100px;
214
+ margin-bottom: 25px;
 
215
  border-radius: 50%;
216
  }
217
 
218
  .team-member .social-icons {
 
 
219
  position: relative;
220
+ margin-top: 5px;
221
+ margin-top: 0;
222
+ margin-bottom: 0;
223
+ opacity: 1;
224
  -webkit-transition: all ease 0.55s;
225
  transition: all ease 0.55s;
 
 
226
  }
227
 
228
  .team-member .social-icons li {
229
  display: inline-block;
 
 
230
  padding-top: 3px;
231
+ padding-right: 5px;
232
+ padding-left: 5px;
233
  }
234
 
235
  .team-member .social-icons li a {
246
  }
247
 
248
  .member-pic {
 
 
 
 
249
  width: 183px;
250
  height: 183px;
251
+ border: none;
252
+ border-radius: 0;
253
  }
254
 
255
  .member-pic img {
258
  }
259
 
260
  .member-details {
 
 
 
261
  display: table;
262
  overflow: hidden;
263
+ position: absolute;
 
264
  bottom: 100%;
265
+ left: 0;
266
+ width: 183px;
267
+ height: 183px;
268
+ color: #fff;
269
  background: rgba(0,0,0,0);
270
  text-align: center;
271
+ -webkit-transition: all 0.3s;
272
+ transition: all 0.3s;
273
  }
274
 
275
  .member-details h5 {
276
  margin: 0;
277
  margin-bottom: 5px;
278
+ color: #fff;
279
  }
280
 
281
  .team-member-wrap {
283
  }
284
 
285
  .team-member-wrap .team-member-box {
286
+ display: inline-block;
287
+ float: none;
288
+ margin-right: -4px;
289
+ padding-right: 55px;
290
+ padding-bottom: 30px;
291
+ padding-left: 55px;
292
+ vertical-align: top;
293
  }
294
 
295
  .member-details-inner {
299
 
300
  .team-member:hover .member-details {
301
  bottom: 0;
302
+ background: rgba(255,162,0,0.7);
303
  -webkit-transition: all 0.3s;
 
 
304
  transition: all 0.3s;
 
305
  }
306
 
307
  @media (min-width: 992px) and (max-width: 1200px) {
308
  .team-member-wrap .team-member-box {
309
+ padding-right: 30px;
310
+ padding-left: 30px;
311
  }
312
  }
 
obfx_modules/companion-legacy/inc/hestia/common-functions.php CHANGED
@@ -6,12 +6,6 @@
6
  * @package themeisle-companion
7
  */
8
 
9
- /**
10
- * Change default alignment for top bar.
11
- */
12
- function themeisle_hestia_top_bar_default_alignment(){
13
- return 'left';
14
- }
15
 
16
  /**
17
  * Add default content to clients section;
@@ -29,214 +23,6 @@ function themeisle_hestia_clients_default_content(){
29
  );
30
  }
31
 
32
- /**
33
- * Function to load content in top bar.
34
- */
35
- function themeisle_hestia_top_bar_default_content() {
36
- if ( class_exists( 'WooCommerce' ) ) {
37
- $top_bar_state = 'woo_top';
38
- } else {
39
- if ( 'page' == get_option('show_on_front') ) {
40
- $top_bar_state = 'page_top';
41
- } else {
42
- $top_bar_state = 'blog_top';
43
- }
44
- }
45
-
46
- $load_default = get_option( 'hestia_load_default' );
47
- if ( $load_default !== false ) {
48
- return;
49
- }
50
-
51
- switch ( $top_bar_state ) {
52
- case 'woo_top':
53
- themeisle_hestia_set_top_bar_menu( 'contact' );
54
- themeisle_hestia_set_top_bar_widgets( $top_bar_state );
55
- break;
56
- case 'blog_top':
57
- themeisle_hestia_set_top_bar_menu( 'socials' );
58
- themeisle_hestia_set_top_bar_widgets( $top_bar_state );
59
- break;
60
- case 'page_top':
61
- themeisle_hestia_set_top_bar_menu( 'contact' );
62
- themeisle_hestia_set_top_bar_widgets( $top_bar_state );
63
- break;
64
- }
65
-
66
- update_option( 'hestia_load_default', true );
67
- }
68
-
69
-
70
- /**
71
- * Set default widgets in top bar.
72
- *
73
- * @param string $type Top bar state.
74
- */
75
- function themeisle_hestia_set_top_bar_widgets( $type ) {
76
-
77
- $active_widgets = get_option( 'sidebars_widgets' );
78
-
79
- if ( ! empty( $active_widgets['sidebar-top-bar'] ) ) :
80
- /* There is already some content. */
81
- return;
82
- endif;
83
-
84
- switch ( $type ) {
85
- case 'woo_top':
86
-
87
- $widget_name = themeisle_hestia_generate_unique_widget_name('woocommerce_widget_cart');
88
- $widget_index = trim( substr( $widget_name, strrpos( $widget_name, '-' ) + 1 ) );
89
- $active_widgets['sidebar-top-bar'][] = $widget_name;
90
- $cart_widget[ $widget_index ] = array( 'title' => 'Cart' );
91
- update_option( 'widget_woocommerce_widget_cart', $cart_widget );
92
-
93
-
94
- $widget_name = themeisle_hestia_generate_unique_widget_name('woocommerce_product_search');
95
- $widget_index = trim( substr( $widget_name, strrpos( $widget_name, '-' ) + 1 ) );
96
- $active_widgets['sidebar-top-bar'][] = $widget_name;
97
- $search_widget[ $widget_index ] = array( 'title' => 'Search' );
98
- update_option( 'widget_woocommerce_product_search', $search_widget );
99
- break;
100
- case 'blog_top':
101
- $widget_name = themeisle_hestia_generate_unique_widget_name('search');
102
- $widget_index = trim( substr( $widget_name, strrpos( $widget_name, '-' ) + 1 ) );
103
- $active_widgets['sidebar-top-bar'][] = $widget_name;
104
- $search_widget[$widget_index] = array( 'title' => 'Search' );
105
- update_option( 'widget_search', $search_widget );
106
- break;
107
- case 'page_top':
108
- $widget_name = themeisle_hestia_generate_unique_widget_name('nav_menu');
109
- $widget_index = trim( substr( $widget_name, strrpos( $widget_name, '-' ) + 1 ) );
110
- $menu_id = themeisle_hestia_create_menu( 'socials' );
111
- $active_widgets['sidebar-top-bar'][] = $widget_name;
112
- $menu_widget[$widget_index] = array(
113
- 'title' => 'Socials',
114
- 'nav_menu' => $menu_id,
115
- );
116
- update_option( 'widget_nav_menu', $menu_widget );
117
- break;
118
- }
119
- update_option( 'sidebars_widgets', $active_widgets );
120
- }
121
-
122
- /**
123
- * Set default menu in top bar.
124
- *
125
- * @param string $type Top bar state.
126
- */
127
- function themeisle_hestia_set_top_bar_menu( $type ) {
128
- $theme_navs = get_theme_mod( 'nav_menu_locations' );
129
- if ( empty( $theme_navs['top-bar-menu'] ) ) {
130
- $menu_id = themeisle_hestia_create_menu( $type );
131
- $theme_navs['top-bar-menu'] = $menu_id;
132
- set_theme_mod( 'nav_menu_locations', $theme_navs );
133
- }
134
- }
135
-
136
- /**
137
- * Create default menu for top bar
138
- *
139
- * @param string $type Top bar state.
140
- */
141
- function themeisle_hestia_create_menu( $type ) {
142
-
143
- $menu_name = 'Default Top Menu';
144
- if ( $type === 'socials' ) {
145
- $menu_name = 'Socials Top Menu';
146
- }
147
-
148
- $menu_exists = wp_get_nav_menu_object( $menu_name );
149
- if ( ! $menu_exists ) {
150
-
151
- $menu_id = wp_create_nav_menu( $menu_name );
152
- $menu_items = array();
153
- switch ( $type ) {
154
- case 'contact':
155
- $menu_items = array(
156
- array(
157
- 'title' => esc_html__('1-800-123-4567','themeisle-companion'),
158
- 'url' => esc_html__('tel:1-800-123-4567','themeisle-companion'),
159
- ),
160
- array(
161
- 'title' => esc_html__('friends@themeisle.com','themeisle-companion'),
162
- 'url' => esc_html__('mailto:friends@themeisle.com','themeisle-companion'),
163
- ),
164
- );
165
- break;
166
- case 'socials':
167
- $menu_items = array(
168
- array(
169
- 'title' => esc_html__('Facebook','themeisle-companion'),
170
- 'url' => esc_html__('www.facebook.com','themeisle-companion'),
171
- ),
172
- array(
173
- 'title' => esc_html__('Twitter','themeisle-companion'),
174
- 'url' => esc_html__('www.twitter.com','themeisle-companion'),
175
- ),
176
- array(
177
- 'title' => esc_html__('Google','themeisle-companion'),
178
- 'url' => esc_html__('www.google.com','themeisle-companion'),
179
- ),
180
- array(
181
- 'title' => esc_html__('Linkedin','themeisle-companion'),
182
- 'url' => esc_html__('www.linkedin.com','themeisle-companion'),
183
- ),
184
- array(
185
- 'title' => esc_html__('Instagram','themeisle-companion'),
186
- 'url' => esc_html__('www.instagram.com','themeisle-companion'),
187
- ),
188
- array(
189
- 'title' => esc_html__('Pinterest','themeisle-companion'),
190
- 'url' => esc_html__('www.pinterest.com','themeisle-companion'),
191
- ),
192
- array(
193
- 'title' => esc_html__('Youtube','themeisle-companion'),
194
- 'url' => esc_html__('www.youtube.com','themeisle-companion'),
195
- ),
196
- );
197
- break;
198
- }
199
- foreach ( $menu_items as $menu_item ) {
200
- wp_update_nav_menu_item(
201
- $menu_id, 0, array(
202
- 'menu-item-title' => $menu_item['title'],
203
- 'menu-item-url' => $menu_item['url'],
204
- 'menu-item-status' => 'publish',
205
- )
206
- );
207
- }
208
- return $menu_id;
209
- }
210
- return '';
211
- }
212
-
213
- /**
214
- * Generate new unique widget name.
215
- *
216
- * @param string $widget_name Widget name.
217
- *
218
- * @since 2.4.5
219
- * @return string
220
- */
221
- function themeisle_hestia_generate_unique_widget_name( $widget_name ) {
222
- $current_sidebars = get_option( 'sidebars_widgets' );
223
- $all_widget_array = array();
224
- foreach ( $current_sidebars as $sidebar => $widgets ) {
225
- if ( ! empty( $widgets ) && is_array( $widgets ) && $sidebar != 'wp_inactive_widgets' ) {
226
- foreach ( $widgets as $widget ) {
227
- $all_widget_array[] = $widget;
228
- }
229
- }
230
- }
231
- $widget_index = 1;
232
- while ( in_array( $widget_name . '-' . $widget_index, $all_widget_array ) ) {
233
- $widget_index ++;
234
- }
235
- $new_widget_name = $widget_name . '-' . $widget_index;
236
- return $new_widget_name;
237
- }
238
-
239
-
240
  /**
241
  * Execute this function once to check all widgets and see if there are any duplicates.
242
  * If there are duplicates, remove that widget and generate a new one with same
@@ -302,6 +88,32 @@ function themeisle_hestia_fix_duplicate_widgets() {
302
  update_option( 'hestia_fix_duplicate_widgets', true );
303
  }
304
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
 
306
  /**
307
  * Get an array of duplicate widgets and their sidebars.
6
  * @package themeisle-companion
7
  */
8
 
 
 
 
 
 
 
9
 
10
  /**
11
  * Add default content to clients section;
23
  );
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  /**
27
  * Execute this function once to check all widgets and see if there are any duplicates.
28
  * If there are duplicates, remove that widget and generate a new one with same
88
  update_option( 'hestia_fix_duplicate_widgets', true );
89
  }
90
 
91
+ /**
92
+ * Generate new unique widget name.
93
+ *
94
+ * @param string $widget_name Widget name.
95
+ *
96
+ * @since 2.4.5
97
+ * @return string
98
+ */
99
+ function themeisle_hestia_generate_unique_widget_name( $widget_name ) {
100
+ $current_sidebars = get_option( 'sidebars_widgets' );
101
+ $all_widget_array = array();
102
+ foreach ( $current_sidebars as $sidebar => $widgets ) {
103
+ if ( ! empty( $widgets ) && is_array( $widgets ) && $sidebar != 'wp_inactive_widgets' ) {
104
+ foreach ( $widgets as $widget ) {
105
+ $all_widget_array[] = $widget;
106
+ }
107
+ }
108
+ }
109
+ $widget_index = 1;
110
+ while ( in_array( $widget_name . '-' . $widget_index, $all_widget_array ) ) {
111
+ $widget_index ++;
112
+ }
113
+ $new_widget_name = $widget_name . '-' . $widget_index;
114
+ return $new_widget_name;
115
+ }
116
+
117
 
118
  /**
119
  * Get an array of duplicate widgets and their sidebars.
obfx_modules/companion-legacy/inc/llorix-one-companion/css/style.css CHANGED
@@ -1,26 +1,22 @@
1
  /*---------------------------------------
2
  SECTION: SERVICES
3
  -----------------------------------------*/
 
4
  .services-wrap {
5
- text-align: center;
6
  position: relative;
7
  padding-bottom: 50px;
 
8
  }
9
 
10
  .services {
11
- background-color: #FFF;
12
  border-bottom: 1px solid #eaebec;
13
- }
14
-
15
- .services .section-overlay-layer {
16
  }
17
 
18
  .single-service {
19
  padding: 40px 20px 40px 20px;
20
- background: #ffffff;
21
- -webkit-border-radius: 3px;
22
- -moz-border-radius: 3px;
23
  border-radius: 3px;
 
24
  -webkit-transition: all ease 0.55s;
25
  transition: all ease 0.55s;
26
  }
@@ -31,36 +27,37 @@
31
  text-align: center;
32
  }
33
 
34
- .single-service > h3 > a:hover, .service-icon > a:hover{
35
- text-decoration:none;
 
36
  }
37
 
38
  .services-wrap > .service-box {
39
- width: 31.5%;
40
  margin: 0 1%;
41
- margin-bottom: 30px;
42
- vertical-align: top;
43
  }
44
 
45
- .services-wrap > .service-box:nth-child(3n+1){
46
- margin-left: 0;
47
  clear: left;
 
48
  }
49
 
50
- .services-wrap > .service-box:nth-child(3n){
51
- margin-right: 0;
52
  clear: right;
 
53
  }
54
 
55
  .service-icon {
56
- font-size: 60px;
57
  margin-bottom: 35px;
 
58
  }
59
 
60
  .single-service h3 {
61
- color: #1395ba;
62
  margin-bottom: 15px;
63
  padding-top: 5px;
 
64
  }
65
 
66
  .galcolumn .single-service {
@@ -71,13 +68,15 @@
71
  display: none !important;
72
  }
73
 
 
74
  /*---------------------------------------
75
  SECTION: TESTIMONIALS
76
  -----------------------------------------*/
 
77
  .testimonials {
78
- text-align: center;
79
- background-color: #FFF;
80
  border-bottom: 1px solid #eaebec;
 
 
81
  }
82
 
83
  .testimonials .section-overlay-layer {
@@ -85,28 +84,26 @@
85
  }
86
 
87
  .feedback {
88
- padding: 0 30px;
89
  margin-bottom: 45px;
 
90
  }
91
 
92
  .feedback .pic-container {
 
93
  top: -40px;
94
  width: 100%;
95
- position: absolute;
96
  }
97
 
98
  .feedback .pic-container-inner {
99
- -webkit-border-radius: 50%;
100
- -moz-border-radius: 50%;
101
- border-radius: 50%;
102
  display: inline-block;
103
  overflow: hidden;
104
- background-clip: padding-box;
105
  width: 170px;
106
  height: 170px;
107
- box-shadow: 0px 0px 0px 5px #f5f5f5;
108
- background-color: #f5f5f5;
109
  border: 5px solid #e5e5e5;
 
 
 
 
110
  }
111
 
112
  .feedback .pic-container img {
@@ -114,9 +111,9 @@
114
  }
115
 
116
  .feedback p {
117
- font-style: italic;
118
  margin-top: 20px;
119
  margin-bottom: 0;
 
120
  }
121
 
122
  .feedback h5 {
@@ -128,8 +125,8 @@
128
  }
129
 
130
  .testimonials-box {
131
- text-align: center;
132
  width: 100%;
 
133
  }
134
 
135
  .testimonials-wrap {
@@ -138,26 +135,22 @@
138
 
139
  .testimonials-wrap .testimonials-box {
140
  display: inline-block;
141
- -webkit-transition: all .2s ease;
142
- -moz-transition: all .2s ease;
143
- -o-transition: all .2s ease;
144
- transition: all .2s ease;
145
  }
146
 
147
  .testimonials-box .feedback {
 
 
148
  padding: 145px 0 40px 0;
149
- margin: 40px 0 30px 0;
150
- background: #ffffff;
151
- -webkit-border-radius: 3px;
152
- -moz-border-radius: 3px;
153
- border-radius: 3px;
154
- -webkit-transition: all ease 0.55s;
155
- transition: all ease 0.55s;
156
- position: relative;
157
  }
158
 
159
  .testimonials-box .feedback:hover {
160
- border-bottom-color: #f16c20;
161
  }
162
 
163
  .galcolumn .testimonials-box {
@@ -165,33 +158,35 @@
165
  }
166
 
167
  .testimonials-wrap > .testimonials-box {
168
- width: 31.5%;
169
- margin: 0 1.15% 0 1.15%;
170
- margin-bottom: 30px;
171
- vertical-align: top;
172
  }
173
 
174
  .testimonials-wrap > .testimonials-box:nth-child(3n+1) {
175
- margin-left: 0;
176
- clear: left;
177
  }
178
 
179
  .testimonials-wrap > .testimonials-box:nth-child(3n) {
180
- margin-right: 0;
181
- clear: right;
182
  }
183
 
 
184
  /*---------------------------------------
185
  SECTION: TEAM
186
  -----------------------------------------*/
 
187
  .team {
188
- background-color: #FFF;
189
  border-bottom: 1px solid #eaebec;
 
 
 
 
190
  background-position: 50% 50%;
191
- background-repeat: no-repeat;
192
- background-attachment: fixed;
193
- background-size: cover;
194
- border-bottom: 1px solid #F3F3F3;
195
  }
196
 
197
  .team .section-overlay-layer {
@@ -200,38 +195,36 @@
200
  }
201
 
202
  .team .sub-heading {
203
- color: #FFF;
204
  }
205
 
206
  .team .dark-text {
207
- color: #FFF;
208
  }
209
 
210
  .team-member {
211
- margin-bottom: 25px;
212
- position: relative;
213
  overflow: hidden;
 
214
  min-height: 100px;
215
- -webkit-border-radius: 50%;
216
- -moz-border-radius: 50%;
217
  border-radius: 50%;
218
  }
219
 
220
  .team-member .social-icons {
221
- opacity: 1;
222
- margin-top: 5px;
223
  position: relative;
 
 
 
 
224
  -webkit-transition: all ease 0.55s;
225
  transition: all ease 0.55s;
226
- margin-bottom: 0;
227
- margin-top: 0;
228
  }
229
 
230
  .team-member .social-icons li {
231
  display: inline-block;
232
- padding-left: 5px;
233
- padding-right: 5px;
234
  padding-top: 3px;
 
 
235
  }
236
 
237
  .team-member .social-icons li a {
@@ -248,12 +241,10 @@
248
  }
249
 
250
  .member-pic {
251
- border: none;
252
- -webkit-border-radius: 0px;
253
- -moz-border-radius: 0px;
254
- border-radius: 0px;
255
  width: 183px;
256
  height: 183px;
 
 
257
  }
258
 
259
  .member-pic img {
@@ -262,26 +253,24 @@
262
  }
263
 
264
  .member-details {
265
- left: 0;
266
- position: absolute;
267
- color: #FFF;
268
  display: table;
269
  overflow: hidden;
270
- height: 183px;
271
- width: 183px;
272
  bottom: 100%;
273
- -webkit-transition: all 0.3s;
274
- -moz-transition: all 0.3s;
275
- -o-transition: all 0.3s;
276
- transition: all 0.3s;
277
  background: rgba(0,0,0,0);
278
  text-align: center;
 
 
279
  }
280
 
281
  .member-details h5 {
282
  margin: 0;
283
  margin-bottom: 5px;
284
- color: #FFF;
285
  }
286
 
287
  .team-member-wrap {
@@ -289,13 +278,13 @@
289
  }
290
 
291
  .team-member-wrap .team-member-box {
292
- float: none;
293
- display: inline-block;
294
- margin-right: -4px;
295
- vertical-align: top;
296
- padding-right: 55px;
297
- padding-left: 55px;
298
- padding-bottom: 30px;
299
  }
300
 
301
  .member-details-inner {
@@ -305,17 +294,14 @@
305
 
306
  .team-member:hover .member-details {
307
  bottom: 0;
 
308
  -webkit-transition: all 0.3s;
309
- -moz-transition: all 0.3s;
310
- -o-transition: all 0.3s;
311
  transition: all 0.3s;
312
- background: rgba(241,108,32,0.7);
313
  }
314
 
315
  @media (min-width: 992px) and (max-width: 1200px) {
316
  .team-member-wrap .team-member-box {
317
- padding-right: 30px;
318
- padding-left: 30px;
319
  }
320
  }
321
-
1
  /*---------------------------------------
2
  SECTION: SERVICES
3
  -----------------------------------------*/
4
+
5
  .services-wrap {
 
6
  position: relative;
7
  padding-bottom: 50px;
8
+ text-align: center;
9
  }
10
 
11
  .services {
 
12
  border-bottom: 1px solid #eaebec;
13
+ background-color: #fff;
 
 
14
  }
15
 
16
  .single-service {
17
  padding: 40px 20px 40px 20px;
 
 
 
18
  border-radius: 3px;
19
+ background: #fff;
20
  -webkit-transition: all ease 0.55s;
21
  transition: all ease 0.55s;
22
  }
27
  text-align: center;
28
  }
29
 
30
+ .single-service > h3 > a:hover,
31
+ .service-icon > a:hover {
32
+ text-decoration: none;
33
  }
34
 
35
  .services-wrap > .service-box {
36
+ width: 31.5%;
37
  margin: 0 1%;
38
+ margin-bottom: 30px;
39
+ vertical-align: top;
40
  }
41
 
42
+ .services-wrap > .service-box:nth-child(3n+1) {
 
43
  clear: left;
44
+ margin-left: 0;
45
  }
46
 
47
+ .services-wrap > .service-box:nth-child(3n) {
 
48
  clear: right;
49
+ margin-right: 0;
50
  }
51
 
52
  .service-icon {
 
53
  margin-bottom: 35px;
54
+ font-size: 60px;
55
  }
56
 
57
  .single-service h3 {
 
58
  margin-bottom: 15px;
59
  padding-top: 5px;
60
+ color: #1395ba;
61
  }
62
 
63
  .galcolumn .single-service {
68
  display: none !important;
69
  }
70
 
71
+
72
  /*---------------------------------------
73
  SECTION: TESTIMONIALS
74
  -----------------------------------------*/
75
+
76
  .testimonials {
 
 
77
  border-bottom: 1px solid #eaebec;
78
+ background-color: #fff;
79
+ text-align: center;
80
  }
81
 
82
  .testimonials .section-overlay-layer {
84
  }
85
 
86
  .feedback {
 
87
  margin-bottom: 45px;
88
+ padding: 0 30px;
89
  }
90
 
91
  .feedback .pic-container {
92
+ position: absolute;
93
  top: -40px;
94
  width: 100%;
 
95
  }
96
 
97
  .feedback .pic-container-inner {
 
 
 
98
  display: inline-block;
99
  overflow: hidden;
 
100
  width: 170px;
101
  height: 170px;
 
 
102
  border: 5px solid #e5e5e5;
103
+ border-radius: 50%;
104
+ background-color: #f5f5f5;
105
+ background-clip: padding-box;
106
+ box-shadow: 0 0 0 5px #f5f5f5;
107
  }
108
 
109
  .feedback .pic-container img {
111
  }
112
 
113
  .feedback p {
 
114
  margin-top: 20px;
115
  margin-bottom: 0;
116
+ font-style: italic;
117
  }
118
 
119
  .feedback h5 {
125
  }
126
 
127
  .testimonials-box {
 
128
  width: 100%;
129
+ text-align: center;
130
  }
131
 
132
  .testimonials-wrap {
135
 
136
  .testimonials-wrap .testimonials-box {
137
  display: inline-block;
138
+ -webkit-transition: all 0.2s ease;
139
+ transition: all 0.2s ease;
 
 
140
  }
141
 
142
  .testimonials-box .feedback {
143
+ position: relative;
144
+ margin: 40px 0 30px 0;
145
  padding: 145px 0 40px 0;
146
+ border-radius: 3px;
147
+ background: #fff;
148
+ -webkit-transition: all ease 0.55s;
149
+ transition: all ease 0.55s;
 
 
 
 
150
  }
151
 
152
  .testimonials-box .feedback:hover {
153
+ border-bottom-color: #f16c20;
154
  }
155
 
156
  .galcolumn .testimonials-box {
158
  }
159
 
160
  .testimonials-wrap > .testimonials-box {
161
+ width: 31.5%;
162
+ margin: 0 1.15% 0 1.15%;
163
+ margin-bottom: 30px;
164
+ vertical-align: top;
165
  }
166
 
167
  .testimonials-wrap > .testimonials-box:nth-child(3n+1) {
168
+ clear: left;
169
+ margin-left: 0;
170
  }
171
 
172
  .testimonials-wrap > .testimonials-box:nth-child(3n) {
173
+ clear: right;
174
+ margin-right: 0;
175
  }
176
 
177
+
178
  /*---------------------------------------
179
  SECTION: TEAM
180
  -----------------------------------------*/
181
+
182
  .team {
 
183
  border-bottom: 1px solid #eaebec;
184
+ border-bottom: 1px solid #f3f3f3;
185
+ background-color: #fff;
186
+ background-repeat: no-repeat;
187
+ background-attachment: fixed;
188
  background-position: 50% 50%;
189
+ background-size: cover;
 
 
 
190
  }
191
 
192
  .team .section-overlay-layer {
195
  }
196
 
197
  .team .sub-heading {
198
+ color: #fff;
199
  }
200
 
201
  .team .dark-text {
202
+ color: #fff;
203
  }
204
 
205
  .team-member {
 
 
206
  overflow: hidden;
207
+ position: relative;
208
  min-height: 100px;
209
+ margin-bottom: 25px;
 
210
  border-radius: 50%;
211
  }
212
 
213
  .team-member .social-icons {
 
 
214
  position: relative;
215
+ margin-top: 5px;
216
+ margin-top: 0;
217
+ margin-bottom: 0;
218
+ opacity: 1;
219
  -webkit-transition: all ease 0.55s;
220
  transition: all ease 0.55s;
 
 
221
  }
222
 
223
  .team-member .social-icons li {
224
  display: inline-block;
 
 
225
  padding-top: 3px;
226
+ padding-right: 5px;
227
+ padding-left: 5px;
228
  }
229
 
230
  .team-member .social-icons li a {
241
  }
242
 
243
  .member-pic {
 
 
 
 
244
  width: 183px;
245
  height: 183px;
246
+ border: none;
247
+ border-radius: 0;
248
  }
249
 
250
  .member-pic img {
253
  }
254
 
255
  .member-details {
 
 
 
256
  display: table;
257
  overflow: hidden;
258
+ position: absolute;
 
259
  bottom: 100%;
260
+ left: 0;
261
+ width: 183px;
262
+ height: 183px;
263
+ color: #fff;
264
  background: rgba(0,0,0,0);
265
  text-align: center;
266
+ -webkit-transition: all 0.3s;
267
+ transition: all 0.3s;
268
  }
269
 
270
  .member-details h5 {
271
  margin: 0;
272
  margin-bottom: 5px;
273
+ color: #fff;
274
  }
275
 
276
  .team-member-wrap {
278
  }
279
 
280
  .team-member-wrap .team-member-box {
281
+ display: inline-block;
282
+ float: none;
283
+ margin-right: -4px;
284
+ padding-right: 55px;
285
+ padding-bottom: 30px;
286
+ padding-left: 55px;
287
+ vertical-align: top;
288
  }
289
 
290
  .member-details-inner {
294
 
295
  .team-member:hover .member-details {
296
  bottom: 0;
297
+ background: rgba(241,108,32,0.7);
298
  -webkit-transition: all 0.3s;
 
 
299
  transition: all 0.3s;
 
300
  }
301
 
302
  @media (min-width: 992px) and (max-width: 1200px) {
303
  .team-member-wrap .team-member-box {
304
+ padding-right: 30px;
305
+ padding-left: 30px;
306
  }
307
  }
 
obfx_modules/companion-legacy/init.php CHANGED
@@ -300,16 +300,6 @@ class Companion_Legacy_OBFX_Module extends Orbit_Fox_Module_Abstract {
300
  themeisle_hestia_require();
301
  }
302
 
303
- /**
304
- * Wrapper method for themeisle_hestia_set_default_content function call.
305
- *
306
- * @since 2.1.1
307
- * @access public
308
- */
309
- public function hestia_load_default_content(){
310
- themeisle_hestia_top_bar_default_content();
311
- }
312
-
313
  /**
314
  * Wrapper method for themeisle_hestia_fix_duplicate_widgets function call.
315
  *
@@ -330,9 +320,6 @@ class Companion_Legacy_OBFX_Module extends Orbit_Fox_Module_Abstract {
330
  return themeisle_hestia_clients_default_content();
331
  }
332
 
333
- public function hestia_top_bar_default_alignment(){
334
- return themeisle_hestia_top_bar_default_alignment();
335
- }
336
 
337
  /**
338
  * Wrapper method for themeisle_hestia_load_controls function call.
@@ -424,19 +411,15 @@ class Companion_Legacy_OBFX_Module extends Orbit_Fox_Module_Abstract {
424
 
425
  if ( $this->is_hestia() ) {
426
  $this->loader->add_action( 'after_setup_theme', $this, 'hestia_require' );
427
- $this->loader->add_action( 'after_setup_theme', $this, 'hestia_load_default_content' );
428
  $this->loader->add_action( 'after_setup_theme', $this, 'hestia_fix_duplicate_widgets' );
429
  $this->loader->add_filter( 'hestia_clients_bar_default_content', $this, 'hestia_load_clients_default_content' );
430
- $this->loader->add_filter( 'hestia_top_bar_alignment_default', $this, 'hestia_top_bar_default_alignment' );
431
  $this->loader->add_action( 'customize_register', $this, 'hestia_require_customizer', 0 );
432
  $this->loader->add_action( 'after_switch_theme', $this, 'hestia_set_front_page' );
433
  }
434
 
435
  if ( $this->is_hestia_pro() ) {
436
- $this->loader->add_action( 'after_setup_theme', $this, 'hestia_load_default_content' );
437
  $this->loader->add_action( 'after_setup_theme', $this, 'hestia_fix_duplicate_widgets' );
438
  $this->loader->add_filter( 'hestia_clients_bar_default_content', $this, 'hestia_load_clients_default_content' );
439
- $this->loader->add_filter( 'hestia_top_bar_alignment_default', $this, 'hestia_top_bar_default_alignment' );
440
  }
441
 
442
  if( $this->is_shop_isle() ) {
300
  themeisle_hestia_require();
301
  }
302
 
 
 
 
 
 
 
 
 
 
 
303
  /**
304
  * Wrapper method for themeisle_hestia_fix_duplicate_widgets function call.
305
  *
320
  return themeisle_hestia_clients_default_content();
321
  }
322
 
 
 
 
323
 
324
  /**
325
  * Wrapper method for themeisle_hestia_load_controls function call.
411
 
412
  if ( $this->is_hestia() ) {
413
  $this->loader->add_action( 'after_setup_theme', $this, 'hestia_require' );
 
414
  $this->loader->add_action( 'after_setup_theme', $this, 'hestia_fix_duplicate_widgets' );
415
  $this->loader->add_filter( 'hestia_clients_bar_default_content', $this, 'hestia_load_clients_default_content' );
 
416
  $this->loader->add_action( 'customize_register', $this, 'hestia_require_customizer', 0 );
417
  $this->loader->add_action( 'after_switch_theme', $this, 'hestia_set_front_page' );
418
  }
419
 
420
  if ( $this->is_hestia_pro() ) {
 
421
  $this->loader->add_action( 'after_setup_theme', $this, 'hestia_fix_duplicate_widgets' );
422
  $this->loader->add_filter( 'hestia_clients_bar_default_content', $this, 'hestia_load_clients_default_content' );
 
423
  }
424
 
425
  if( $this->is_shop_isle() ) {
obfx_modules/google-analytics/js/script.js CHANGED
@@ -12,60 +12,62 @@
12
  */
13
 
14
  var obfx_analytics = function ( $ ) {
15
- 'use strict';
16
 
17
- $( function () {
18
- $( '#refresh-analytics-accounts' ).on(
19
- 'click', function ( event ) {
20
- event.preventDefault();
21
- $.ajax(
22
- {
23
- url: obfxAnalyticsObj.url,
24
- beforeSend: function ( xhr ) {
25
- $( '#refresh-analytics-accounts' ).addClass( 'loading' );
26
- xhr.setRequestHeader( 'X-WP-Nonce', obfxAnalyticsObj.nonce );
27
- },
28
- data: {},
29
- type: 'POST',
30
- error: function ( error ) {
31
- console.error( error );
32
- },
33
- complete: function () {
34
- $( '#refresh-analytics-accounts' ).removeClass( 'loading' );
35
- location.reload();
36
- }
37
- }, 'json'
38
- );
39
- return false;
40
- }
41
- );
42
- $( '#unregister-analytics' ).on(
43
- 'click', function ( event ) {
44
- event.preventDefault();
45
- $.ajax(
46
- {
47
- url: obfxAnalyticsObj.url,
48
- beforeSend: function ( xhr ) {
49
- $( '#unregister-analytics' ).addClass( 'loading' );
50
- xhr.setRequestHeader( 'X-WP-Nonce', obfxAnalyticsObj.nonce );
51
- },
52
- data: {
53
- deactivate: 'unregister'
54
- },
55
- type: 'POST',
56
- error: function ( error ) {
57
- console.error( error );
58
- },
59
- complete: function () {
60
- $( '#unregister-analytics' ).removeClass( 'loading' );
61
- location.reload();
62
- }
63
- }, 'json'
64
- );
65
- return false;
66
- }
67
- );
68
- } );
 
 
69
  };
70
 
71
  obfx_analytics( jQuery );
12
  */
13
 
14
  var obfx_analytics = function ( $ ) {
15
+ 'use strict';
16
 
17
+ $(
18
+ function () {
19
+ $( '#refresh-analytics-accounts' ).on(
20
+ 'click', function ( event ) {
21
+ event.preventDefault();
22
+ $.ajax(
23
+ {
24
+ url: obfxAnalyticsObj.url,
25
+ beforeSend: function ( xhr ) {
26
+ $( '#refresh-analytics-accounts' ).addClass( 'loading' );
27
+ xhr.setRequestHeader( 'X-WP-Nonce', obfxAnalyticsObj.nonce );
28
+ },
29
+ data: {},
30
+ type: 'POST',
31
+ error: function ( error ) {
32
+ console.error( error );
33
+ },
34
+ complete: function () {
35
+ $( '#refresh-analytics-accounts' ).removeClass( 'loading' );
36
+ location.reload();
37
+ }
38
+ }, 'json'
39
+ );
40
+ return false;
41
+ }
42
+ );
43
+ $( '#unregister-analytics' ).on(
44
+ 'click', function ( event ) {
45
+ event.preventDefault();
46
+ $.ajax(
47
+ {
48
+ url: obfxAnalyticsObj.url,
49
+ beforeSend: function ( xhr ) {
50
+ $( '#unregister-analytics' ).addClass( 'loading' );
51
+ xhr.setRequestHeader( 'X-WP-Nonce', obfxAnalyticsObj.nonce );
52
+ },
53
+ data: {
54
+ deactivate: 'unregister'
55
+ },
56
+ type: 'POST',
57
+ error: function ( error ) {
58
+ console.error( error );
59
+ },
60
+ complete: function () {
61
+ $( '#unregister-analytics' ).removeClass( 'loading' );
62
+ location.reload();
63
+ }
64
+ }, 'json'
65
+ );
66
+ return false;
67
+ }
68
+ );
69
+ }
70
+ );
71
  };
72
 
73
  obfx_analytics( jQuery );
obfx_modules/image-cdn/inc/class-orbit-fox-connector.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace OrbitFox;
4
+
5
+ /**
6
+ * The class defines way of connecting this user to the OrbitFox Dashboard.
7
+ *
8
+ * @package \OrbitFox\Connector
9
+ * @author Themeisle <friends@themeisle.com>
10
+ */
11
+ class Connector {
12
+ /**
13
+ * Option key name for OrbitFox site account.
14
+ */
15
+ const API_DATA_KEY = 'obfx_connect_data';
16
+
17
+ /**
18
+ * The instance object.
19
+ *
20
+ * @var Connector
21
+ */
22
+ protected static $instance = null;
23
+
24
+ /**
25
+ * The Root URL of the OrbitFox dashboard.
26
+ *
27
+ * @var string
28
+ */
29
+ protected $connect_url = 'https://dashboard.orbitfox.com/api/obfxhq/v1';
30
+
31
+ /**
32
+ * The CDN details path.
33
+ *
34
+ * @var string
35
+ */
36
+ protected $cdn_path = '/image/details';
37
+
38
+ /**
39
+ * The instance init method.
40
+ *
41
+ * @static
42
+ * @since 1.0.0
43
+ * @access public
44
+ * @return Connector
45
+ */
46
+ public static function instance() {
47
+ if ( is_null( self::$instance ) ) {
48
+ self::$instance = new self();
49
+ self::$instance->init();
50
+ }
51
+
52
+ return self::$instance;
53
+ }
54
+
55
+ /**
56
+ * Init hooks.
57
+ */
58
+ function init() {
59
+ $this->connect_url = apply_filters( 'obfx_dashboard_url', $this->connect_url );
60
+
61
+ add_action( 'admin_footer', array( $this, 'admin_inline_js' ) );
62
+ }
63
+
64
+
65
+ /**
66
+ * Sync quota data.
67
+ */
68
+ public function daily_check() {
69
+
70
+ $current_data = get_option( self::API_DATA_KEY );
71
+ if ( empty( $current_data ) ) {
72
+ return;
73
+ }
74
+ if ( ! isset( $current_data['api_key'] ) || empty( $current_data['api_key'] ) && strlen( $current_data['api_key'] ) > 10 ) {
75
+ return;
76
+ }
77
+ $request = new \OrbitFox\Request( $this->connect_url . $this->cdn_path, 'POST', $current_data['api_key'] );
78
+ $response = $request->get_response();
79
+ $response['api_key'] = $current_data['api_key'];
80
+
81
+ update_option( self::API_DATA_KEY, $response );
82
+
83
+ }
84
+
85
+ /**
86
+ * When a user requests an url we request a set of temporary token credentials and build a link with them.
87
+ * We also save them because we'll need them with the verifier.
88
+ *
89
+ * @return \WP_REST_Response|\WP_Error The connection handshake.
90
+ */
91
+ public function rest_handle_connector_url( \WP_REST_Request $request ) {
92
+ $disconnect_flag = $request->get_param( 'disconnect' );
93
+ if ( ! empty( $disconnect_flag ) ) {
94
+ delete_option( self::API_DATA_KEY );
95
+
96
+ return new \WP_REST_Response( array( 'code' => 200, 'message' => 'Disconnected' ), 200 );
97
+ }
98
+ $api_key = $request->get_param( 'api_key' );
99
+ if ( empty( $api_key ) ) {
100
+ return new \WP_REST_Response( array( 'code' => 'error', 'data' => 'Empty api key provided' ) );
101
+ }
102
+ $request = new \OrbitFox\Request( $this->connect_url . $this->cdn_path, 'POST', $api_key );
103
+
104
+ $response = $request->get_response();
105
+
106
+ if ( $response === false ) {
107
+ return new \WP_REST_Response(
108
+ array(
109
+ 'code' => 'error',
110
+ 'message' => 'Error connecting to the OrbitFox api. Invalid API key.',
111
+ )
112
+ );
113
+ }
114
+ $response['api_key'] = $api_key;
115
+ update_option( self::API_DATA_KEY, $response );
116
+
117
+ return new \WP_REST_Response( array( 'code' => 'success', 'data' => $response ), 200 );
118
+ }
119
+
120
+ /**
121
+ * Print the inline script which get's the url for the Connector button.
122
+ */
123
+ function admin_inline_js() {
124
+ $connect_endpoint = get_rest_url( null, 'obfx/connector-url' );
125
+ $update_replacer = get_rest_url( null, 'obfx/update_replacer' );
126
+ wp_enqueue_script( 'wp-api' ); ?>
127
+ <script type='text/javascript'>
128
+ (function ($) {
129
+ $('#obfx_connect').on('click', function (event) {
130
+ event.preventDefault();
131
+
132
+ $('#obfx_connect').parent().addClass('loading');
133
+ var api_key = $('#obfx_connect_api_key').val();
134
+
135
+ wp.apiRequest({
136
+ url: "<?php echo $connect_endpoint; ?>",
137
+ type: 'POST',
138
+ data: {api_key: api_key},
139
+ dataType: 'json'
140
+ }).done(function (response) {
141
+ $("#obfx-error-api").remove();
142
+ $('#obfx_connect').parent().removeClass('loading');
143
+ var elements = $("#obfx-module-form-image-cdn .obfx-loggedin-show, #obfx-module-form-image-cdn .obfx-loggedin-hide");
144
+ switch (response.code) {
145
+
146
+ case 'error':
147
+ $("#obfx-module-form-image-cdn").append('<p class="label label-error" id="obfx-error-api">' + response.message + '</p>');
148
+ elements.removeClass('obfx-img-logged-in');
149
+ break;
150
+ case 'success':
151
+
152
+ $("#obfx_connect_api_key").val(response.data.api_key);
153
+ $("#obfx-img-display-name").text(response.data.display_name);
154
+ $("#obfx-img-cdn-url").text(response.data.image_cdn.key + '.i.orbitfox.com');
155
+ $("#obfx-img-traffic-usage").text((parseInt(response.data.image_cdn.usage) / 1000).toFixed(3) + 'GB');
156
+ $(".obfx-img-traffic-quota").text((parseInt(response.data.image_cdn.quota) / 1000).toFixed(0) + 'GB');
157
+ elements.addClass('obfx-img-logged-in');
158
+ break;
159
+ }
160
+
161
+ }).fail(function (e) {
162
+ $('#obfx_connect').parent().removeClass('loading');
163
+ });
164
+ });
165
+
166
+ $("input[name='enable_cdn_replacer'").on('change', function (event) {
167
+ event.preventDefault();
168
+ var flag_replacer = $(this).is(":checked");
169
+ wp.apiRequest({
170
+ url: "<?php echo $update_replacer; ?>",
171
+ type: 'POST',
172
+ data: {update_replacer: flag_replacer ? 'yes' : 'no'},
173
+ dataType: 'json'
174
+ }).done(function(){
175
+ $("#obfx-module-form-image-cdn").append('<p class="label label-success" id="obfx-feedback-api">Image replacer option saved.</p>');
176
+ setTimeout(function(){
177
+ $("#obfx-feedback-api").remove();
178
+ },1000);
179
+ });
180
+ });
181
+ $('#obfx_disconnect').on('click', function (event) {
182
+ event.preventDefault();
183
+ $('#obfx_connect').parent().addClass('loading');
184
+ wp.apiRequest({
185
+ url: "<?php echo $connect_endpoint; ?>",
186
+ type: 'POST',
187
+ data: {disconnect: true},
188
+ dataType: 'json'
189
+ }).done(function (response) {
190
+ location.reload();
191
+ }).fail(function (e) {
192
+ $('#obfx_disconnect').parent().removeClass('loading');
193
+ });
194
+ });
195
+
196
+ })(jQuery)
197
+ </script>
198
+ <?php
199
+ }
200
+
201
+
202
+ /**
203
+ * Throw error on object clone
204
+ *
205
+ * The whole idea of the singleton design pattern is that there is a single
206
+ * object therefore, we don't want the object to be cloned.
207
+ *
208
+ * @access public
209
+ * @since 1.0.0
210
+ * @return void
211
+ */
212
+ public function __clone() {
213
+ // Cloning instances of the class is forbidden.
214
+ _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'themeisle-companion' ), '1.0.0' );
215
+ }
216
+
217
+ /**
218
+ * Disable unserializing of the class
219
+ *
220
+ * @access public
221
+ * @since 1.0.0
222
+ * @return void
223
+ */
224
+ public function __wakeup() {
225
+ // Unserializing instances of the class is forbidden.
226
+ _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'themeisle-companion' ), '1.0.0' );
227
+ }
228
+ }
obfx_modules/image-cdn/inc/class-orbit-fox-image-replacer.php ADDED
@@ -0,0 +1,629 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace OrbitFox;
4
+
5
+ /**
6
+ * The class handles the image replacements and optimizations.
7
+ *
8
+ * @package \OrbitFox\Image_CDN_Replacer
9
+ * @author Themeisle <friends@themeisle.com>
10
+ */
11
+ class Image_CDN_Replacer {
12
+ /**
13
+ * Cached object instance.
14
+ *
15
+ * @var Image_CDN_Replacer
16
+ */
17
+ protected static $instance = null;
18
+
19
+ /**
20
+ * A list of allowd extensions.
21
+ *
22
+ * @var array
23
+ */
24
+ protected static $extensions = array(
25
+ 'jpg',
26
+ 'webp',
27
+ 'png',
28
+ );
29
+
30
+ /**
31
+ * Holds an array of image sizes.
32
+ *
33
+ * @var array
34
+ */
35
+ protected static $image_sizes;
36
+
37
+ // @TODO provide a filter for this
38
+ /**
39
+ * Te cdn url, it will be build on the run.
40
+ *
41
+ * @var null
42
+ */
43
+ protected $cdn_url = null;
44
+
45
+ /**
46
+ * A data holder.
47
+ *
48
+ * @var null
49
+ */
50
+ protected $connect_data = null;
51
+
52
+ /**
53
+ * Defines which is the maximum width accepted in the optimization process.
54
+ *
55
+ * @var int
56
+ */
57
+ protected $max_width = 2000;
58
+
59
+ /**
60
+ * Defines which is the maximum width accepted in the optimization process.
61
+ *
62
+ * @var int
63
+ */
64
+ protected $max_height = 2000;
65
+
66
+ /**
67
+ * Holds the real images sizes as an array.
68
+ *
69
+ * @var null
70
+ */
71
+ protected $img_real_sizes = null;
72
+
73
+ /**
74
+ * A cached version of `wp_upload_dir`
75
+ *
76
+ * @var null
77
+ */
78
+ protected $upload_dir = null;
79
+
80
+ /**
81
+ * Class instance method.
82
+ *
83
+ * @static
84
+ * @since 1.0.0
85
+ * @access public
86
+ * @return Image_CDN_Replacer
87
+ */
88
+ public static function instance() {
89
+ if ( is_null( self::$instance ) ) {
90
+ self::$instance = new self();
91
+ self::$instance->init();
92
+ }
93
+
94
+ return self::$instance;
95
+ }
96
+
97
+ /**
98
+ * The initialize method.
99
+ */
100
+ function init() {
101
+ $this->set_properties();
102
+
103
+ add_filter( 'image_downsize', array( $this, 'filter_image_downsize' ), 10, 3 );
104
+ add_filter( 'the_content', array( $this, 'filter_the_content' ), 999999 );
105
+ add_filter( 'wp_calculate_image_srcset', array( $this, 'filter_srcset_attr' ), 10, 5 );
106
+ add_filter( 'init', array( $this, 'filter_options_and_mods' ) );
107
+ }
108
+
109
+ /**
110
+ * Set the cdn url based on the current connected user.
111
+ */
112
+ protected function set_properties() {
113
+ $this->upload_dir = wp_upload_dir();
114
+ $this->upload_dir = $this->upload_dir['baseurl'];
115
+ $this->connect_data = get_option( 'obfx_connect_data' );
116
+
117
+ if ( empty( $this->connect_data ) ) {
118
+ return;
119
+ }
120
+
121
+ if ( empty( $this->connect_data['image_cdn'] ) ) {
122
+ return;
123
+ }
124
+
125
+ $this->cdn_url = sprintf(
126
+ 'https://%s.%s/%s',
127
+ strtolower( $this->connect_data['image_cdn']['key'] ),
128
+ 'i.orbitfox.com',
129
+ 'i' // api root; almost like /wp-json/
130
+ );
131
+ }
132
+
133
+ /**
134
+ * This filter will replace all the images retrieved via "wp_get_image" type of functions.
135
+ *
136
+ * @param array $image The filtered value.
137
+ * @param int $attachment_id The related attachment id.
138
+ * @param array|string $size This could be the name of the thumbnail size or an array of custom dimensions.
139
+ *
140
+ * @return array
141
+ */
142
+ public function filter_image_downsize( $image, $attachment_id, $size ) {
143
+ // we don't run optimizations on dashboard side
144
+ if ( is_admin() ) {
145
+ return $image;
146
+ }
147
+
148
+ $image_url = wp_get_attachment_url( $attachment_id );
149
+
150
+ if ( $image_url ) {
151
+ // $image_meta = image_get_intermediate_size( $attachment_id, $size );
152
+ $image_meta = wp_get_attachment_metadata( $attachment_id );
153
+ $image_args = self::image_sizes();
154
+
155
+ // default size
156
+ $sizes = array(
157
+ 'width' => $image_meta['width'],
158
+ 'height' => $image_meta['height'],
159
+ );
160
+
161
+ // in case there is a custom image size $size will be an array.
162
+ if ( is_array( $size ) ) {
163
+ $sizes = array(
164
+ 'width' => $size[0],
165
+ 'height' => $size[1],
166
+ );
167
+ } elseif ( 'full' !== $size && isset( $image_args[ $size ] ) ) { // overwrite if there a size
168
+ $sizes = array(
169
+ 'width' => $image_args[ $size ]['width'],
170
+ 'height' => $image_args[ $size ]['height'],
171
+ );
172
+ }
173
+
174
+ $new_sizes = $this->validate_image_sizes( $sizes['width'], $sizes['height'] );
175
+
176
+ // resized thumbnails will have their own filenames. we should get those instead of the full image one
177
+ if ( is_string( $size ) && ! empty( $image_meta['sizes'] ) && ! empty( $image_meta['sizes'][ $size ] ) ) {
178
+ $image_url = str_replace( basename( $image_url ), $image_meta['sizes'][ $size ]['file'], $image_url );
179
+ }
180
+
181
+ // try to get an optimized image url.
182
+ $new_url = $this->get_imgcdn_url( $image_url, $new_sizes );
183
+
184
+ $return = array(
185
+ $new_url,
186
+ $sizes['width'],
187
+ $sizes['height'],
188
+ false,
189
+ );
190
+
191
+ return $return;
192
+ }
193
+
194
+ // in case something wrong comes, well return the default.
195
+ return $image;
196
+ }
197
+
198
+ /**
199
+ * Returns the array of image sizes since `get_intermediate_image_sizes` and image metadata doesn't include the
200
+ * custom image sizes in a reliable way.
201
+ *
202
+ * Inspired from jetpack/photon.
203
+ *
204
+ * @global $wp_additional_image_sizes
205
+ *
206
+ * @return array
207
+ */
208
+ protected static function image_sizes() {
209
+ if ( null == self::$image_sizes ) {
210
+ global $_wp_additional_image_sizes;
211
+
212
+ // Populate an array matching the data structure of $_wp_additional_image_sizes so we have a consistent structure for image sizes
213
+ $images = array(
214
+ 'thumb' => array(
215
+ 'width' => intval( get_option( 'thumbnail_size_w' ) ),
216
+ 'height' => intval( get_option( 'thumbnail_size_h' ) ),
217
+ 'crop' => (bool) get_option( 'thumbnail_crop' ),
218
+ ),
219
+ 'medium' => array(
220
+ 'width' => intval( get_option( 'medium_size_w' ) ),
221
+ 'height' => intval( get_option( 'medium_size_h' ) ),
222
+ 'crop' => false,
223
+ ),
224
+ 'large' => array(
225
+ 'width' => intval( get_option( 'large_size_w' ) ),
226
+ 'height' => intval( get_option( 'large_size_h' ) ),
227
+ 'crop' => false,
228
+ ),
229
+ 'full' => array(
230
+ 'width' => null,
231
+ 'height' => null,
232
+ 'crop' => false,
233
+ ),
234
+ );
235
+
236
+ // Compatibility mapping as found in wp-includes/media.php
237
+ $images['thumbnail'] = $images['thumb'];
238
+
239
+ // Update class variable, merging in $_wp_additional_image_sizes if any are set
240
+ if ( is_array( $_wp_additional_image_sizes ) && ! empty( $_wp_additional_image_sizes ) ) {
241
+ self::$image_sizes = array_merge( $images, $_wp_additional_image_sizes );
242
+ } else {
243
+ self::$image_sizes = $images;
244
+ }
245
+ }
246
+
247
+ return is_array( self::$image_sizes ) ? self::$image_sizes : array();
248
+ }
249
+
250
+ /**
251
+ * Keep the image sizes under a sane limit.
252
+ *
253
+ * @param string $width The width value which should be sanitized.
254
+ * @param string $height The height value which should be sanitized.
255
+ *
256
+ * @return array
257
+ */
258
+ protected function validate_image_sizes( $width, $height ) {
259
+ global $content_width;
260
+ /**
261
+ * While we are inside a content filter we need to keep our max_width under the content_width global
262
+ * There is no reason the have a image wider than the content width.
263
+ */
264
+ if (
265
+ doing_filter( 'the_content' )
266
+ && isset( $GLOBALS['content_width'] )
267
+ && apply_filters( 'obfx_imgcdn_allow_resize_images_from_content_width', true )
268
+ ) {
269
+ $content_width = (int) $GLOBALS['content_width'];
270
+
271
+ if ( $this->max_width > $content_width ) {
272
+ $this->max_width = $content_width;
273
+ }
274
+ }
275
+
276
+ $percentWidth = $percentHeight = null;
277
+
278
+ if ( $width > $this->max_width ) {
279
+ // we need to remember how much in percentage the width was resized and apply the same treatment to the height.
280
+ $percentWidth = ( 1 - $this->max_width / $width ) * 100;
281
+ $width = $this->max_width;
282
+ $height = round( $height * ( ( 100 - $percentWidth ) / 100 ), 2 );
283
+ }
284
+
285
+ // now for the height
286
+ if ( $height > $this->max_height ) {
287
+ $percentHeight = ( 1 - $this->max_height / $height ) * 100;
288
+ // if we reduce the height to max_height by $x percentage than we'll also reduce the width for the same amount.
289
+ $height = $this->max_height;
290
+ $width = round( $width * ( ( 100 - $percentHeight ) / 100 ), 2 );
291
+ }
292
+
293
+ return array(
294
+ 'width' => $width,
295
+ 'height' => $height,
296
+ );
297
+ }
298
+
299
+ /**
300
+ * Returns a signed image url authorized to be used in our CDN.
301
+ *
302
+ * @param string $url The url which should be signed.
303
+ * @param array $args Dimension params; Supports `width` and `height`.
304
+ *
305
+ * @return string
306
+ */
307
+ protected function get_imgcdn_url( $url, $args = array( 'width' => 'auto', 'height' => 'auto' ) ) {
308
+ // not used yet.
309
+ $compress_level = 55;
310
+ // this will authorize the image
311
+ $url_parts = explode( '://', $url );
312
+ $scheme = $url_parts[0];
313
+ $path = $url_parts[1];
314
+ if ( $args['width'] !== 'auto' ) {
315
+ $args['width'] = round( $args['width'], 0 );
316
+ }
317
+ if ( $args['height'] !== 'auto' ) {
318
+ $args['height'] = round( $args['height'], 0 );
319
+ }
320
+ $payload = array(
321
+ 'path' => $this->urlception_encode( $path ),
322
+ 'scheme' => $scheme,
323
+ 'width' => (string) $args['width'],
324
+ 'height' => (string) $args['height'],
325
+ 'compress' => $compress_level,
326
+ 'secret' => $this->connect_data['image_cdn']['secret'],
327
+ );
328
+
329
+ $hash = md5( json_encode( $payload ) );
330
+
331
+ $new_url = sprintf(
332
+ '%s/%s/%s/%s/%s/%s/%s',
333
+ $this->cdn_url,
334
+ $hash,
335
+ (string) $args['width'],
336
+ (string) $args['height'],
337
+ $compress_level,
338
+ $scheme,
339
+ $path
340
+ );
341
+
342
+ return $new_url;
343
+ }
344
+
345
+ /**
346
+ * Ensures that an url parameter can stand inside an url.
347
+ *
348
+ * @param string $url The required url.
349
+ *
350
+ * @return string
351
+ */
352
+ protected function urlception_encode( $url ) {
353
+ $new_url = rtrim( $url, '/' );
354
+
355
+ return urlencode( $new_url );
356
+ }
357
+
358
+ /**
359
+ * Identify images in post content, and if images are local (uploaded to the current site), pass through Photon.
360
+ *
361
+ * @param string $content The post content which will be filtered.
362
+ *
363
+ * @uses self::validate_image_url, apply_filters, jetpack_photon_url, esc_url
364
+ * @filter the_content<
365
+ * @return string
366
+ */
367
+ public function filter_the_content( $content ) {
368
+ $images = self::parse_images_from_html( $content );
369
+
370
+ if ( empty( $images ) ) {
371
+ return $content; // simple. no images
372
+ }
373
+
374
+ $image_sizes = self::image_sizes();
375
+
376
+ foreach ( $images[0] as $index => $tag ) {
377
+ $width = $height = false;
378
+ $new_tag = $tag;
379
+ $src = $images['img_url'][ $index ];
380
+
381
+ if ( apply_filters( 'obfx_imgcdn_disable_optimization_for_link', false, $src ) ) {
382
+ continue;
383
+ }
384
+
385
+ if ( false !== strpos( $src, 'i.orbitfox.com' ) ) {
386
+ continue; // we already have this
387
+ }
388
+
389
+ // we handle only images uploaded to this site.
390
+ if ( false === strpos( $src, $this->upload_dir ) ) {
391
+ continue;
392
+ }
393
+
394
+ // try to get the declared sizes from the img tag
395
+ if ( preg_match( '#width=["|\']?([\d%]+)["|\']?#i', $images['img_tag'][ $index ], $width_string ) ) {
396
+ $width = $width_string[1];
397
+ }
398
+
399
+ if ( preg_match( '#height=["|\']?([\d%]+)["|\']?#i', $images['img_tag'][ $index ], $height_string ) ) {
400
+ $height = $height_string[1];
401
+ }
402
+
403
+ // Detect WP registered image size from HTML class
404
+ if ( preg_match( '#class=["|\']?[^"\']*size-([^"\'\s]+)[^"\']*["|\']?#i', $images['img_tag'][ $index ], $size ) ) {
405
+ $size = array_pop( $size );
406
+
407
+ if ( false === $width && false === $height && 'full' != $size && array_key_exists( $size, $image_sizes ) ) {
408
+ $width = (int) $image_sizes[ $size ]['width'];
409
+ $height = (int) $image_sizes[ $size ]['height'];
410
+ }
411
+ } else {
412
+ unset( $size );
413
+ }
414
+
415
+ $new_sizes = $this->validate_image_sizes( $width, $height );
416
+ $new_url = $this->get_imgcdn_url( $src, $new_sizes );
417
+
418
+ // replace the url in hrefs or links
419
+ if ( ! empty( $images['link_url'][ $index ] ) ) {
420
+ $new_tag = preg_replace( '#(href=["|\'])' . $images['link_url'][ $index ] . '(["|\'])#i', '\1' . $new_url . '\2', $tag, 1 );
421
+ }
422
+
423
+ // replace the new sizes
424
+ $new_tag = str_replace( 'width="' . $width . '"', 'width="' . $new_sizes['width'] . '"', $new_tag );
425
+ $new_tag = str_replace( 'height="' . $height . '"', 'height="' . $new_sizes['height'] . '"', $new_tag );
426
+ // replace the new url
427
+ $new_tag = str_replace( 'src="' . $src . '"', 'src="' . $new_url . '"', $new_tag );
428
+
429
+ $content = str_replace( $tag, $new_tag, $content );
430
+ }
431
+
432
+ return $content;
433
+ }
434
+
435
+ /**
436
+ * Match all images and any relevant <a> tags in a block of HTML.
437
+ *
438
+ * @param string $content Some HTML.
439
+ *
440
+ * @return array An array of $images matches, where $images[0] is
441
+ * an array of full matches, and the link_url, img_tag,
442
+ * and img_url keys are arrays of those matches.
443
+ */
444
+ protected static function parse_images_from_html( $content ) {
445
+ $images = array();
446
+
447
+ if ( preg_match_all( '#(?:<a[^>]+?href=["|\'](?P<link_url>[^\s]+?)["|\'][^>]*?>\s*)?(?P<img_tag><img[^>]*?\s+?src=["|\'](?P<img_url>[^\s]+?)["|\'].*?>){1}(?:\s*</a>)?#is', $content, $images ) ) {
448
+ foreach ( $images as $key => $unused ) {
449
+ // Simplify the output as much as possible, mostly for confirming test results.
450
+ if ( is_numeric( $key ) && $key > 0 ) {
451
+ unset( $images[ $key ] );
452
+ }
453
+ }
454
+
455
+ return $images;
456
+ }
457
+
458
+ return array();
459
+ }
460
+
461
+ /**
462
+ * Replace image URLs in the srcset attributes and in case there is a resize in action, also replace the sizes.
463
+ *
464
+ * @param array $sources Array of image sources.
465
+ * @param array $size_array Array of width and height values in pixels (in that order).
466
+ * @param array $image_src The 'src' of the image.
467
+ * @param array $image_meta The image meta data as returned by 'wp_get_attachment_metadata()'.
468
+ * @param int $attachment_id Image attachment ID.
469
+ *
470
+ * @return array
471
+ */
472
+ public function filter_srcset_attr( $sources = array(), $size_array = array(), $image_src = array(), $image_meta = array(), $attachment_id = 0 ) {
473
+ if ( ! is_array( $sources ) ) {
474
+ return $sources;
475
+ }
476
+
477
+ foreach ( $sources as $i => $source ) {
478
+
479
+ list( $width, $height ) = self::parse_dimensions_from_filename( $source['url'] );
480
+
481
+ if ( empty( $width ) ) {
482
+ $width = $image_meta['width'];
483
+ }
484
+
485
+ if ( empty( $height ) ) {
486
+ $height = $image_meta['height'];
487
+ }
488
+
489
+ $new_sizes = $this->validate_image_sizes( $width, $height );
490
+ $new_url = $this->get_imgcdn_url( $source['url'], $new_sizes );
491
+
492
+ $sources[ $i ]['url'] = $new_url;
493
+ if ( $sources[ $i ]['descriptor'] ) {
494
+ $sources[ $i ]['value'] = $new_sizes['width'];
495
+ } else {
496
+ $sources[ $i ]['value'] = $new_sizes['height'];
497
+ }
498
+ }
499
+
500
+ return $sources;
501
+ }
502
+
503
+ /**
504
+ * Try to determine height and width from strings WP appends to resized image filenames.
505
+ *
506
+ * @param string $src The image URL.
507
+ *
508
+ * @return array An array consisting of width and height.
509
+ */
510
+ public static function parse_dimensions_from_filename( $src ) {
511
+ $width_height_string = array();
512
+
513
+ if ( preg_match( '#-(\d+)x(\d+)\.(?:' . implode( '|', self::$extensions ) . '){1}$#i', $src, $width_height_string ) ) {
514
+ $width = (int) $width_height_string[1];
515
+ $height = (int) $width_height_string[2];
516
+
517
+ if ( $width && $height ) {
518
+ return array( $width, $height );
519
+ }
520
+ }
521
+
522
+ return array( false, false );
523
+ }
524
+
525
+ /**
526
+ * Handles the url replacement in options and theme mods.
527
+ */
528
+ public function filter_options_and_mods() {
529
+ /**
530
+ * `obfx_imgcdn_options_with_url` is a filter that allows themes or plugins to select which option
531
+ * holds an url and needs an optimization.
532
+ */
533
+ $theme_slug = get_option( 'stylesheet' );
534
+
535
+ $options_list = apply_filters(
536
+ 'obfx_imgcdn_options_with_url', array(
537
+ "theme_mods_$theme_slug",
538
+ )
539
+ );
540
+
541
+ foreach ( $options_list as $option ) {
542
+ add_filter( "option_$option", array( $this, 'replace_option_url' ) );
543
+
544
+ // this one will not work for theme mods, since get_theme_mod('header_image', $default) has its own default.
545
+ // add_filter( "default_option_$option", array( $this, 'replace_option_url' ) );
546
+ }
547
+
548
+ }
549
+
550
+ /**
551
+ * A filter which turns a local url into an optimized CDN image url or an array of image urls.
552
+ *
553
+ * @param string $url The url which should be replaced.
554
+ *
555
+ * @return array|mixed|object|string|void
556
+ */
557
+ public function replace_option_url( $url ) {
558
+ if ( empty( $url ) ) {
559
+ return $url;
560
+ }
561
+
562
+ // $url might be an array or an json encoded array with urls.
563
+ if ( is_array( $url ) || filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
564
+ $array = $url;
565
+ $encoded = false;
566
+
567
+ // it might a json encoded array
568
+ if ( is_string( $url ) ) {
569
+ $array = json_decode( $url, true );
570
+ $encoded = true;
571
+ }
572
+
573
+ // in case there is an array, apply it recursively.
574
+ if ( is_array( $array ) ) {
575
+ foreach ( $array as $index => $value ) {
576
+ $array[ $index ] = $this->replace_option_url( $value );
577
+ }
578
+
579
+ if ( $encoded ) {
580
+ return json_encode( $array );
581
+ } else {
582
+ return $array;
583
+ }
584
+ }
585
+
586
+ if ( filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
587
+ return $url;
588
+ }
589
+ }
590
+
591
+ // we handle only images uploaded to this site./
592
+ // @TODO this is still wrong, not all the images are coming from the uploads folder.
593
+ // if ( false === strpos( $url, $this->upload_dir ) ) {
594
+ // return $url;
595
+ // }
596
+ // get the optimized url.
597
+ $new_url = $this->get_imgcdn_url( $url );
598
+
599
+ return $new_url;
600
+ }
601
+
602
+ /**
603
+ * Throw error on object clone
604
+ *
605
+ * The whole idea of the singleton design pattern is that there is a single
606
+ * object therefore, we don't want the object to be cloned.
607
+ *
608
+ * @access public
609
+ * @since 1.0.0
610
+ * @return void
611
+ */
612
+ public function __clone() {
613
+ // Cloning instances of the class is forbidden.
614
+ _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'themeisle-companion' ), '1.0.0' );
615
+ }
616
+
617
+ /**
618
+ * Disable unserializing of the class
619
+ *
620
+ * @access public
621
+ * @since 1.0.0
622
+ * @return void
623
+ */
624
+ public function __wakeup() {
625
+ // Unserializing instances of the class is forbidden.
626
+ _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'themeisle-companion' ), '1.0.0' );
627
+ }
628
+
629
+ }
obfx_modules/image-cdn/inc/class-request.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace OrbitFox;
4
+
5
+ /**
6
+ * A class for building an Authorization header for http requests.
7
+ *
8
+ * @package \OrbitFox\Image_CDN_Replacer
9
+ * @author Themeisle <friends@themeisle.com>
10
+ */
11
+ class Request {
12
+ /**
13
+ * The API key.
14
+ *
15
+ * @var null
16
+ */
17
+ protected $api_key = null;
18
+
19
+ /**
20
+ * The api url where we are trying to connect.
21
+ *
22
+ * @var null
23
+ */
24
+ protected $api_url = null;
25
+
26
+ /**
27
+ * Defines which header brings the authorization key.
28
+ *
29
+ * @var string
30
+ */
31
+ protected $auth_header = 'Authorization';
32
+
33
+ /**
34
+ * A list of extra params in the current request.
35
+ *
36
+ * @var array
37
+ */
38
+ protected $extra_params = array();
39
+
40
+ /**
41
+ * The HTTP method.
42
+ *
43
+ * @var null|string
44
+ */
45
+ protected $method = null;
46
+
47
+ /**
48
+ * Request constructor.
49
+ *
50
+ * @param string $url The request url.
51
+ * @param string $method The request method type.
52
+ * @param string $api_key The client key.
53
+ * @param array $extra_params Any extra param to be signed.
54
+ */
55
+ public function __construct( $url, $method = 'GET', $api_key = '', $extra_params = array() ) {
56
+
57
+ // The url for our custom endpoint, which returns network settings.
58
+ $this->url = esc_url( $url );
59
+
60
+ // All we really care about here is GET requests.
61
+ $this->method = $method;
62
+
63
+ if ( ! empty( $api_key ) ) {
64
+ $this->api_key = $api_key;
65
+
66
+ return;
67
+ }
68
+ $connect_data = get_option( 'obfx_connect_data' );
69
+
70
+ if ( isset( $connect_data['api_key'] ) ) {
71
+ $this->api_key = $connect_data['api_key'];
72
+ }
73
+
74
+ }
75
+
76
+
77
+ /**
78
+ * Make an oauth'd http request.
79
+ *
80
+ * @return string|object The result of an oauth'd http request.
81
+ */
82
+ public function get_response() {
83
+ // Grab the url to which we'll be making the request.
84
+ $url = $this->url;
85
+
86
+ // If there is a extra, add that as a url var.
87
+ if ( 'GET' === $this->method && ! empty( $this->extra_params ) ) {
88
+ foreach ( $this->extra_params as $key => $val ) {
89
+ $url = add_query_arg( array( $key => $val ), $url );
90
+ }
91
+ }
92
+
93
+ // Args for wp_remote_*().
94
+ $args = array(
95
+ 'method' => $this->method,
96
+ 'timeout' => 45,
97
+ 'httpversion' => '1.0',
98
+ 'body' => $this->extra_params,
99
+ 'sslverify' => false,
100
+ 'headers' => array(
101
+ $this->auth_header => 'Bearer ' . $this->api_key,
102
+ ),
103
+ );
104
+ $response = wp_remote_request( $url, $args );
105
+
106
+ if ( is_wp_error( $response ) ) {
107
+ return false;
108
+ }
109
+ $response = wp_remote_retrieve_body( $response );
110
+
111
+ if ( empty( $response ) ) {
112
+ return false;
113
+ }
114
+
115
+ $response = json_decode( $response, true );
116
+
117
+ if ( ! $response['code'] ) {
118
+ return false;
119
+ }
120
+ if ( intval( $response['code'] ) !== 200 ) {
121
+ return false;
122
+ }
123
+
124
+ return $response['data'];
125
+ }
126
+
127
+ }
obfx_modules/image-cdn/init.php ADDED
@@ -0,0 +1,391 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * The Orbit Fox Image CDN Module.
5
+ *
6
+ * @link https://themeisle.com
7
+ * @since 1.0.0
8
+ *
9
+ * @package Image_CDN_OBFX_Module
10
+ */
11
+
12
+ /**
13
+ * The class defines a new module to be used by Orbit Fox plugin.
14
+ *
15
+ * @package Image_CDN_OBFX_Module
16
+ * @author Themeisle <friends@themeisle.com>
17
+ */
18
+ class Image_CDN_OBFX_Module extends Orbit_Fox_Module_Abstract {
19
+ /**
20
+ * Dashboard related data.
21
+ *
22
+ * @var null|array Dashboard related data.
23
+ */
24
+ protected $connect_data = null;
25
+ /**
26
+ * @var \OrbitFox\Connector $connector Orbitfox Api connector.
27
+ */
28
+ private $connector;
29
+
30
+ /**
31
+ * Image_CDN_OBFX_Module constructor.
32
+ *
33
+ * @since 1.0.0
34
+ * @access public
35
+ */
36
+ public function __construct() {
37
+ parent::__construct();
38
+ if ( isset( $_GET['loggedin'] ) && $_GET['loggedin'] == 'true' ) {
39
+ $this->show = true;
40
+ }
41
+ $this->beta = true;
42
+ $this->no_save = true;
43
+ $this->name = __( 'Image Optimization &amp; CDN Module', 'themeisle-companion' );
44
+ $this->description = __( 'Let us take care of you images sizes. With this feature we\'ll compress and resize every image on your website.<br/> <strong>* Requires account on orbitfox.com</strong>', 'themeisle-companion' );
45
+ }
46
+
47
+ /**
48
+ * Determine if module should be loaded.
49
+ *
50
+ * @since 1.0.0
51
+ * @access public
52
+ * @return bool
53
+ */
54
+ public function enable_module() {
55
+ return ( $this->beta ) ? $this->is_lucky_user() : true;
56
+ }
57
+
58
+ /**
59
+ * The loading logic for the module.
60
+ *
61
+ * @since 1.0.0
62
+ * @access public
63
+ */
64
+ public function load() {
65
+ }
66
+
67
+ /**
68
+ * Add top admin bar notice of traffic quota/usage.
69
+ *
70
+ * @param WP_Admin_Bar $wp_admin_bar Admin bar resource.
71
+ */
72
+ public function add_traffic_node( $wp_admin_bar ) {
73
+ if ( ! is_user_logged_in() ) {
74
+ return;
75
+ }
76
+ $obfx_user_data = $this->get_api_data();
77
+ $args = array(
78
+ 'id' => 'obfx_img_quota',
79
+ 'title' => 'OrbitFox' . __( ' Image Traffic', 'themeisle-companion' ) . ': ' . number_format( floatval( ( $obfx_user_data['image_cdn']['usage'] / 1000 ) ), 3 ) . ' / ' . number_format( floatval( ( $obfx_user_data['image_cdn']['quota'] / 1000 ) ), 0 ) . 'GB',
80
+ 'href' => 'https://dashboard.orbitfox.com/',
81
+ 'meta' => array( 'target' => '_blank' )
82
+ );
83
+ $wp_admin_bar->add_node( $args );
84
+ }
85
+
86
+ /**
87
+ * Return api data.
88
+ *
89
+ * @return mixed|string APi data.
90
+ */
91
+ private function get_api_data() {
92
+
93
+ if ( ! $this->get_is_active() ) {
94
+ return '';
95
+ }
96
+
97
+ return class_exists( '\OrbitFox\Connector' ) ? get_option( \OrbitFox\Connector::API_DATA_KEY, '' ) : '';
98
+ }
99
+ /**
100
+ * Return api data.
101
+ *
102
+ * @return mixed|string APi data.
103
+ */
104
+ private function clear_api_data() {
105
+
106
+
107
+ return update_option( \OrbitFox\Connector::API_DATA_KEY, '' );
108
+ }
109
+
110
+ /**
111
+ * Render data from dashboard of orbitfox.com.
112
+ */
113
+ public function render_connect_data( $html ) {
114
+
115
+ $obfx_user_data = $this->get_api_data();
116
+ $class = '';
117
+ if ( ! empty( $obfx_user_data ) ) {
118
+ $class = 'obfx-img-logged-in';
119
+ }
120
+ $display_name = isset( $obfx_user_data['display_name'] ) ? $obfx_user_data['display_name'] : '';
121
+ $usage = ( isset( $obfx_user_data['image_cdn'] ) && isset( $obfx_user_data['image_cdn']['usage'] ) ) ? $obfx_user_data['image_cdn']['usage'] : 0;
122
+ $quota = ( isset( $obfx_user_data['image_cdn'] ) && isset( $obfx_user_data['image_cdn']['quota'] ) ) ? $obfx_user_data['image_cdn']['quota'] : 0;
123
+ $html = '<div class="obfx-img-logged-in-data obfx-loggedin-show ' . $class . '" > ';
124
+ $html .= '<h5>' . __( 'Logged in as', 'themeisle-companion' ) . ' : <b id="obfx-img-display-name">' . esc_attr( $display_name ) . '</b></h5>';
125
+ $html .= '<p>' . __( 'Your private CDN url', 'themeisle-companion' ) . ' : <code id="obfx-img-cdn-url">' . $this->get_cdn_url() . '</code></p> ';
126
+ $html .= '<p>' . __( 'This month traffic usage', 'themeisle-companion' ) . ' : <code id="obfx-img-traffic-usage">' . number_format( floatval( ( $usage / 1000 ) ), 3 ) . ' GB</code>';
127
+ $html .= ' ' . __( 'Your traffic quota', 'themeisle-companion' ) . ' : <code class="obfx-img-traffic-quota">' . number_format( floatval( ( $quota / 1000 ) ), 3 ) . ' GB / month</code></p>';
128
+ $html .= '<p><i>' . __( 'You can use our image service and CDN in the limit of <span class="obfx-img-traffic-quota">', 'themeisle-companion' ) . number_format( floatval( ( $quota / 1000 ) ), 0 ) . '</span> per month. </i></p>';
129
+ $html .= '</div>';
130
+
131
+ return $html;
132
+ }
133
+
134
+ /**
135
+ * Get CDN private url.
136
+ *
137
+ * @return string Get CDN private url.
138
+ */
139
+ private function get_cdn_url() {
140
+ $obfx_user_data = $this->get_api_data();
141
+ if ( empty( $obfx_user_data ) ) {
142
+ return '';
143
+ }
144
+ if ( ! isset( $obfx_user_data['image_cdn']['key'] ) ) {
145
+ return '';
146
+ }
147
+
148
+ return sprintf( '%s.i.orbitfox.com', strtolower( $obfx_user_data['image_cdn']['key'] ) );
149
+
150
+ }
151
+
152
+ /**
153
+ * Method that returns an array of scripts and styles to be loaded
154
+ * for the front end part.
155
+ *
156
+ * @since 1.0.0
157
+ * @access public
158
+ * @return array
159
+ */
160
+ public function public_enqueue() {
161
+ return array();
162
+ }
163
+
164
+ /**
165
+ * Method that returns an array of scripts and styles to be loaded
166
+ * for the admin part.
167
+ *
168
+ * @since 1.0.0
169
+ * @access public
170
+ * @return array|boolean
171
+ */
172
+ public function admin_enqueue() {
173
+ return array();
174
+ }
175
+
176
+ /**
177
+ * Options array for the Orbit Fox module.
178
+ *
179
+ * @return array
180
+ */
181
+ public function options() {
182
+ //Hack to allow binding of img module connect button as the view for the module options is loaded either if the module is active or not.
183
+
184
+ //TODO Remove this when we have a way of loading module options async.
185
+ if ( is_admin() ) {
186
+ $this->hooks();
187
+ }
188
+ $obfx_user_data = $this->get_api_data();
189
+ if ( empty( $obfx_user_data ) ) {
190
+ $this->set_option( 'obfx_connect_api_key', '' );
191
+ $this->set_option( 'enable_cdn_replacer', '0' );
192
+
193
+ }
194
+ $class = '';
195
+ if ( ! empty( $obfx_user_data ) ) {
196
+ $class = 'obfx-img-logged-in';
197
+ }
198
+ $fields = array(
199
+ array(
200
+ 'type' => 'title',
201
+ 'name' => 'Tooltip',
202
+ 'title' => 'In order to get access to free image optimization service you will need an account on <a href="https://dashboard.orbitfox.com/register" target="_blank">orbitfox.com</a>. You will get access to our image optimization and CDN service for free in the limit of 1GB traffic per month.'
203
+ ),
204
+ array(
205
+ 'id' => 'obfx_connect_api_key',
206
+ 'name' => 'obfx_connect_api_key',
207
+ 'type' => 'password',
208
+ 'default' => isset( $obfx_user_data['api_key'] ) ? $obfx_user_data['api_key'] : '',
209
+ 'placeholder' => __( 'Your OrbitFox api key', 'themeisle-companion' ),
210
+ 'text' => '<span class="dashicons dashicons-share"></span>' . __( 'Connect with Orbitfox', 'themeisle-companion' ),
211
+ ),
212
+ array(
213
+ 'id' => 'obfx-register-service',
214
+ 'type' => 'link',
215
+ 'target' => '_blank',
216
+ 'class' => 'obfx-loggedin-hide ' . $class,
217
+ 'url' => 'https://dashboard.orbitfox.com/register',
218
+ 'text' => ' Sign-Up for your API key',
219
+ 'name' => 'obfx-register-service',
220
+ ),
221
+
222
+ );
223
+ $fields[] = array(
224
+ 'id' => 'obfx_connect',
225
+ 'name' => 'obfx_connect',
226
+ 'type' => 'link',
227
+ 'url' => '#',
228
+ 'class' => 'obfx-loggedin-hide ' . $class,
229
+ 'link-class' => 'btn btn-success',
230
+ 'text' => '<span class="dashicons dashicons-share"></span>' . __( 'Connect to OrbitFox service', 'themeisle-companion' ),
231
+ );
232
+ $fields[] = array(
233
+ 'type' => 'custom',
234
+ 'id' => 'cdn_logged_in_data',
235
+ 'name' => 'cdn_logged_in_data',
236
+ );
237
+ $fields[] = array(
238
+ 'id' => 'obfx_disconnect',
239
+ 'name' => 'obfx_disconnect',
240
+ 'type' => 'link',
241
+ 'class' => 'obfx-loggedin-show ' . $class,
242
+ 'url' => '#',
243
+ 'link-class' => 'btn btn-danger float-right mb-10 obfx-img-logout ',
244
+ 'text' => '<span class="dashicons dashicons-share"></span>' . __( 'Clear OrbitFox API key', 'themeisle-companion' ),
245
+ );
246
+
247
+ $fields[] = array(
248
+ 'id' => 'enable_cdn_replacer',
249
+ 'title' => '',
250
+ 'name' => 'enable_cdn_replacer',
251
+ 'type' => 'toggle',
252
+ 'class' => ' obfx-img-cdn-replacer-switch obfx-loggedin-show ' . $class,
253
+ 'label' => 'Serve all images optimised through OrbitFox CDN for a boost in speed.',
254
+ 'default' => '0',
255
+ );
256
+
257
+ return $fields;
258
+ }
259
+
260
+ /**
261
+ * Method to define hooks needed.
262
+ *
263
+ * @since 1.0.0
264
+ * @access public
265
+ */
266
+ public function hooks() {
267
+ /**
268
+ * Init the connector object and load deps.
269
+ */
270
+ require_once __DIR__ . '/inc/class-request.php';
271
+ require_once __DIR__ . '/inc/class-orbit-fox-connector.php';
272
+ add_filter( 'obfx_custom_control_cdn_logged_in_data', array( $this, 'render_connect_data' ) );
273
+ $this->connector = \OrbitFox\Connector::instance();
274
+
275
+ $this->loader->add_action( 'rest_api_init', $this, 'register_url_endpoints' );
276
+ if ( ! $this->get_is_active() ) {
277
+ $this->set_option( 'enable_cdn_replacer', '0' );
278
+ $this->clear_api_data();
279
+ }
280
+ /**
281
+ * Load the image replacement logic if we are on the frontend,
282
+ * connected to the api and the replacement options is on.
283
+ */
284
+ if ( ! is_admin() && $this->is_replacer_enabled() && $this->is_connected() ) {
285
+ require_once __DIR__ . '/inc/class-orbit-fox-image-replacer.php';
286
+ \OrbitFox\Image_CDN_Replacer::instance();
287
+ $this->loader->add_filter( 'wp_resource_hints', $this, 'add_dns_prefetch', 10, 2 );
288
+
289
+ }
290
+ /**
291
+ * Adds top admin bar notice of traffic, if the module is connected.
292
+ */
293
+ if ( $this->is_connected() ) {
294
+ $this->loader->add_action( 'obfx_img_quota_sync', $this->connector, 'daily_check' );
295
+
296
+ if ( ! wp_next_scheduled( 'obfx_img_quota_sync' ) ) {
297
+ wp_schedule_event( time() + 10, 'daily', 'obfx_img_quota_sync', array() );
298
+ }
299
+ $this->loader->add_action( 'admin_bar_menu', $this, 'add_traffic_node', 9999 );
300
+ }
301
+
302
+ }
303
+
304
+ /**
305
+ * Check if the image replacement is enabled.
306
+ *
307
+ * @return bool Connection status.
308
+ */
309
+ private function is_replacer_enabled() {
310
+ if ( ! $this->get_is_active() ) {
311
+ return false;
312
+ }
313
+ $enabled = $this->get_option( 'enable_cdn_replacer' );
314
+
315
+ return boolval( $enabled );
316
+
317
+ }
318
+
319
+ /**
320
+ * Check if the module is connected to the api.
321
+ *
322
+ * @return bool Connection status.
323
+ */
324
+ private function is_connected() {
325
+
326
+ $obfx_user_data = $this->get_api_data();
327
+
328
+ return ! empty( $obfx_user_data );
329
+
330
+ }
331
+
332
+ /**
333
+ * Adds cdn url for prefetch.
334
+ *
335
+ * @param array $hints Hints array.
336
+ * @param string $relation_type Type of relation.
337
+ *
338
+ * @return array Altered hints array.
339
+ */
340
+ public function add_dns_prefetch( $hints, $relation_type ) {
341
+ if ( 'dns-prefetch' !== $relation_type ) {
342
+ return $hints;
343
+ }
344
+ $cdn_url = $this->get_cdn_url();
345
+ if ( empty( $cdn_url ) ) {
346
+ return $hints;
347
+ }
348
+ $hints[] = sprintf( '//%s', $cdn_url );
349
+
350
+ return $hints;
351
+ }
352
+
353
+ /**
354
+ * Update replacer callback.
355
+ */
356
+ public function update_replacer( WP_REST_Request $request ) {
357
+ $flag = $request->get_param( 'update_replacer' );
358
+ $this->set_option( 'enable_cdn_replacer', $flag === 'yes' ? '1' : '0' );
359
+
360
+ return new WP_REST_Response( 'Replacer updated' );
361
+ }
362
+
363
+ /**
364
+ * Register module rest methods.
365
+ */
366
+ public function register_url_endpoints() {
367
+ register_rest_route(
368
+ 'obfx', '/connector-url', array(
369
+ array(
370
+ 'methods' => \WP_REST_Server::CREATABLE,
371
+ 'permission_callback' => function ( \WP_REST_Request $request ) {
372
+ return current_user_can( 'manage_options' );
373
+ },
374
+ 'callback' => array( $this->connector, 'rest_handle_connector_url' ),
375
+ ),
376
+ )
377
+ );
378
+ register_rest_route(
379
+ 'obfx', '/update_replacer', array(
380
+ array(
381
+ 'methods' => \WP_REST_Server::CREATABLE,
382
+ 'permission_callback' => function ( \WP_REST_Request $request ) {
383
+ return current_user_can( 'manage_options' );
384
+ },
385
+ 'callback' => array( $this, 'update_replacer' ),
386
+ ),
387
+ )
388
+ );
389
+ }
390
+
391
+ }
obfx_modules/menu-icons/js/admin.js CHANGED
@@ -83,10 +83,10 @@ var obfx_menuicons_module_admin = function( $, menu_icons ) {
83
  hideOnSelect: true,
84
  placement: 'bottomLeft',
85
  selectedCustomClass: 'obfx-menu-icon-selected',
86
- showFooter: true,
87
- templates: {
88
- footer: '<div class="obfx-menu-icon-footer">' + menu_icons.i10n.powered_by + '</div>'
89
- }
90
  }
91
  ).on(
92
  'iconpickerSelected', function(e) {
83
  hideOnSelect: true,
84
  placement: 'bottomLeft',
85
  selectedCustomClass: 'obfx-menu-icon-selected',
86
+ showFooter: true,
87
+ templates: {
88
+ footer: '<div class="obfx-menu-icon-footer">' + menu_icons.i10n.powered_by + '</div>'
89
+ }
90
  }
91
  ).on(
92
  'iconpickerSelected', function(e) {
obfx_modules/policy-notice/init.php ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * A module to display a notification bar which will inform users about the website Private Policy.
4
+ *
5
+ * @link https://themeisle.com
6
+ * @since 1.0.0
7
+ *
8
+ * @package Policy_Notice_OBFX_Module
9
+ */
10
+
11
+ /**
12
+ * The class defines a new module to be used by Orbit Fox plugin.
13
+ *
14
+ * @package Policy_Notice_OBFX_Module
15
+ * @author Themeisle <friends@themeisle.com>
16
+ */
17
+ class Policy_Notice_OBFX_Module extends Orbit_Fox_Module_Abstract {
18
+
19
+ /**
20
+ * Test_OBFX_Module constructor.
21
+ *
22
+ * @since 1.0.0
23
+ * @access public
24
+ */
25
+ public function __construct() {
26
+ parent::__construct();
27
+
28
+ $this->name = __( 'Policy Notice', 'themeisle-companion' );
29
+ $this->description = __( 'A simple notice bar which will help you inform users about your website policy.', 'themeisle-companion' );
30
+ }
31
+
32
+ /**
33
+ * Method to determine if the module is enabled or not.
34
+ *
35
+ * @since 1.0.0
36
+ * @access public
37
+ * @return bool
38
+ */
39
+ public function enable_module() {
40
+ return true;
41
+ }
42
+
43
+ /**
44
+ * The method for the module load logic.
45
+ *
46
+ * @since 1.0.0
47
+ * @access public
48
+ * @return mixed
49
+ */
50
+ public function load() {
51
+ return;
52
+ }
53
+
54
+ /**
55
+ * Method that returns an array of scripts and styles to be loaded
56
+ * for the front end part.
57
+ *
58
+ * @since 1.0.0
59
+ * @access public
60
+ * @return array
61
+ */
62
+ public function public_enqueue() {
63
+ return array();
64
+ }
65
+
66
+ /**
67
+ * Method that returns an array of scripts and styles to be loaded
68
+ * for the admin part.
69
+ *
70
+ * @since 1.0.0
71
+ * @access public
72
+ * @return array
73
+ */
74
+ public function admin_enqueue() {
75
+
76
+ return array();
77
+ }
78
+
79
+ /**
80
+ * Method to define the options fields for the module
81
+ *
82
+ * @since 1.0.0
83
+ * @access public
84
+ * @return array
85
+ */
86
+ public function options() {
87
+
88
+ return array(
89
+ array(
90
+ 'id' => 'enable_policy_notice',
91
+ 'name' => 'enable_policy_notice',
92
+ 'title' => '',
93
+ 'type' => 'toggle',
94
+ 'label' => esc_html__( 'Allow OrbitFox to display a bottom bar with info about the website Private Policy.', 'themeisle-companion' ),
95
+ 'default' => '0',
96
+ ),
97
+
98
+ array(
99
+ 'id' => 'policy_notice_text',
100
+ 'name' => 'policy_notice_text',
101
+ 'title' => esc_html__( 'Policy description', 'themeisle-companion' ),
102
+ 'type' => 'text',
103
+ 'default' => esc_html__( 'This website uses cookies to improve your experience. We\'ll assume you accept this policy as long as you are using this website', 'themeisle-companion' ),
104
+ ),
105
+
106
+ // array(
107
+ // 'id' => 'notice_accept_label',
108
+ // 'name' => 'notice_accept_label',
109
+ // 'title' => esc_html__( 'Policy Link Label', 'themeisle-companion' ),
110
+ // 'type' => 'text',
111
+ // 'default' => esc_html__( 'View Policy', 'themeisle-companion' ),
112
+ // ),
113
+
114
+ array(
115
+ 'id' => 'policy_page',
116
+ 'name' => 'policy_page',
117
+ 'title' => esc_html__( 'Policy Page', 'themeisle-companion' ),
118
+ 'type' => 'select',
119
+ 'default' => 0,
120
+ 'options' => $this->get_policy_pages_array()
121
+ ),
122
+
123
+ array(
124
+ 'id' => 'notice_link_label',
125
+ 'name' => 'notice_link_label',
126
+ 'title' => esc_html__( 'Policy Button Label', 'themeisle-companion' ),
127
+ 'type' => 'text',
128
+ 'default' => esc_html__( 'View Policy', 'themeisle-companion' ),
129
+ ),
130
+ );
131
+ }
132
+
133
+ /**
134
+ * Method to define actions and filters needed for the module.
135
+ *
136
+ * @codeCoverageIgnore
137
+ *
138
+ * @since 1.0.0
139
+ * @access public
140
+ */
141
+ public function hooks() {
142
+ // if the module is enabled
143
+ if ( ! $this->is_policy_notice_active() ) {
144
+ return;
145
+ }
146
+
147
+ $this->loader->add_action( 'update_option_wp_page_for_privacy_policy', $this, 'on_page_for_privacy_policy_save', 10, 3 );
148
+ $this->loader->add_action( $this->get_slug() . '_before_options_save', $this, 'before_options_save', 10, 1 );
149
+
150
+ // if the cookie policy is already accepted we quit.
151
+ if ( isset( $_COOKIE['obfx-policy-consent'] ) && 'accepted' === $_COOKIE['obfx-policy-consent'] ) {
152
+ return;
153
+ }
154
+
155
+ // only front-end hooks from now on
156
+ $this->loader->add_action( 'wp_print_footer_scripts', $this, 'wp_print_footer_scripts' );
157
+ $this->loader->add_action( 'wp_print_footer_scripts', $this, 'wp_print_footer_style' );
158
+ $this->loader->add_action( 'wp_footer', $this, 'display_cookie_notice' );
159
+ }
160
+
161
+ /**
162
+ * Here we display the cookie bar template based on the given options.
163
+ */
164
+ public function display_cookie_notice() {
165
+ $policy_link = get_option( 'wp_page_for_privacy_policy' ) ? get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) ) : '#';
166
+
167
+ $policy_page = $this->get_option( 'policy_page' );
168
+
169
+ if ( ! empty( $policy_page ) ) {
170
+ $policy_link = get_permalink( (int) get_option( 'wp_page_for_privacy_policy' ) );
171
+ }
172
+
173
+ $policy_text = $this->get_option( 'policy_notice_text' );
174
+ $policy_button = $this->get_option( 'notice_link_label' );
175
+
176
+ $options = array(
177
+ 'policy_link' => $policy_link,
178
+ 'policy_text' => $policy_text,
179
+ 'policy_button' => $policy_button
180
+ );
181
+
182
+ // @TODO maybe think at some template system for a further hookable customization.
183
+
184
+ // message output will start with a wrapper and an input tag which will decide if the template is visible or not
185
+ $output = '<div class="obfx-cookie-bar-container"><input class="obfx-checkbox-cb" id="obfx-checkbox-cb" type="checkbox" />';
186
+
187
+ // we'll add the buttons as a separate var and we'll start with the close button
188
+ $buttons = '<label for="obfx-checkbox-cb" class="obfx-close-cb">X</label>';
189
+ // the "Acceptance" button
190
+ $buttons .= '<a href="#" id="obfx-accept-cookie-policy" >' . esc_html__( 'Agree', 'themeisle-companion' ) . '</a>';
191
+ // the "View Policy button"
192
+ $buttons .= '<a href="' . $policy_link . '" >' . $policy_button . '</a>';
193
+
194
+ // combine the buttons with the bar and close the wrapper.
195
+ $output .= '<span class="obfx-cookie-bar">' . $policy_text . $buttons . '</span></div>';
196
+
197
+ echo apply_filters( 'obfx_cookie_notice_output', $output, $options );
198
+ }
199
+
200
+ /**
201
+ * This script takes care of the cookie bar handling.
202
+ * For the moment we'll bind a cookie save to the "Agree" button click.
203
+ */
204
+ public function wp_print_footer_scripts() { ?>
205
+ <script>
206
+ (function (window) {
207
+
208
+ document.getElementById('obfx-accept-cookie-policy').addEventListener('click', function( e ) {
209
+ e.preventDefault();
210
+ var days = 365;
211
+ var date = new Date();
212
+ // @TODO add an option to select expiry days
213
+ date.setTime(date.getTime() + 24 * days * 60 * 60 * 1e3);
214
+
215
+ // save the cookie
216
+ document.cookie = 'obfx-policy-consent=accepted; expires=' + date.toGMTString() + '; path=/';
217
+
218
+ // after we get the acceptance cookie we can close the box
219
+ document.getElementById('obfx-checkbox-cb').checked = true;
220
+
221
+ }, false);
222
+
223
+ })(window);
224
+ </script><?php
225
+ }
226
+
227
+ /**
228
+ * This modules needs a few CSS lines so there is no need to load a file for it.
229
+ */
230
+ public function wp_print_footer_style() { ?>
231
+ <style>
232
+ .obfx-cookie-bar-container {
233
+ height: 0;
234
+ }
235
+
236
+ .obfx-checkbox-cb {
237
+ display: none;
238
+ }
239
+
240
+ .obfx-cookie-bar {
241
+ padding: 12px 25px;
242
+ position: fixed;
243
+ text-align: center;
244
+ bottom: 0;
245
+ left: 0;
246
+ right: 0;
247
+ display: block;
248
+ min-height: 40px;
249
+ background: #fff;
250
+ border: 1px solid #333;
251
+ }
252
+
253
+ .obfx-cookie-bar a {
254
+ padding: 0 8px;
255
+ text-decoration: underline;
256
+ font-weight: bold;
257
+ }
258
+
259
+ .obfx-checkbox-cb:checked + .obfx-cookie-bar {
260
+ display: none;
261
+ }
262
+
263
+ .obfx-close-cb {
264
+ position: absolute;
265
+ right: 5px;
266
+ top: 12px;
267
+ width: 20px;
268
+ cursor: pointer;
269
+ }
270
+ </style>
271
+ <?php }
272
+
273
+ /**
274
+ * When the core privacy page is changed, we'll also change the option within our module.
275
+ *
276
+ * @param $old_value
277
+ * @param $value
278
+ * @param $option
279
+ *
280
+ * @return mixed
281
+ */
282
+ public function on_page_for_privacy_policy_save( $old_value, $value, $option ){
283
+
284
+ // if this action comes from our dashboard we need to stop and avoid a save loop.
285
+ if( doing_action( $this->get_slug() . '_before_options_save' ) ){
286
+ return $value;
287
+ }
288
+
289
+ $this->set_option( 'policy_page', $value );
290
+
291
+ return $value;
292
+ }
293
+
294
+ /**
295
+ * When the OrbitFox Module changes it's value, we also need to change the core version.
296
+ * @param $options
297
+ */
298
+ public function before_options_save( $options ){
299
+
300
+ // the default option doesn't need a a change.
301
+ if ( empty( $options ) ) {
302
+ return;
303
+ }
304
+
305
+ // there is no need to change something to it's own value.
306
+ if ( $options['policy_page'] === get_option( 'wp_page_for_privacy_policy' ) ) {
307
+ return;
308
+ }
309
+
310
+ update_option( 'wp_page_for_privacy_policy', $options['policy_page'] );
311
+
312
+ }
313
+
314
+ /**
315
+ * Check if safe updates is turned on.
316
+ *
317
+ * @return bool Safe updates status.
318
+ */
319
+ private function is_policy_notice_active() {
320
+ return (bool) $this->get_option( 'enable_policy_notice' );
321
+ }
322
+
323
+ /**
324
+ * Return an array with all the pages but the first entry is an indicator to the policy selected in core.
325
+ *
326
+ * @return array
327
+ */
328
+ private function get_policy_pages_array(){
329
+ $options = array(
330
+ '0' => esc_html__( 'Default Core Policy', 'themeisle-companion' )
331
+ );
332
+
333
+ $pages = get_pages( array(
334
+ 'echo' => '0',
335
+ 'post_status' => array( 'draft', 'publish' ),
336
+ 'depth' => 0,
337
+ 'child_of' => 0,
338
+ 'selected' => 0,
339
+ 'value_field' => 'ID',
340
+ ) );
341
+
342
+ if ( empty( $pages ) ) {
343
+ return $options;
344
+ }
345
+
346
+ foreach ( $pages as $page ) {
347
+ $options[ $page->ID ] = $page->post_title;
348
+ }
349
+
350
+ return $options;
351
+ }
352
+ }
obfx_modules/safe-updates/init.php ADDED
@@ -0,0 +1,555 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * A module to check changes before theme updates.
4
+ *
5
+ * @link https://themeisle.com
6
+ * @since 1.0.0
7
+ *
8
+ * @package Theme_Update_Check_OBFX_Module
9
+ */
10
+
11
+ /**
12
+ * The class defines a new module to be used by Orbit Fox plugin.
13
+ *
14
+ * @package Theme_Update_Check_OBFX_Module
15
+ * @author Themeisle <friends@themeisle.com>
16
+ */
17
+ class Safe_Updates_OBFX_Module extends Orbit_Fox_Module_Abstract {
18
+
19
+ /**
20
+ * @var string ThemeCheck api endpoint.
21
+ */
22
+ const API_ENDPOINT = 'https://dashboard.orbitfox.com/api/obfxhq/v1/updates/create/';
23
+
24
+ /**
25
+ * Test_OBFX_Module constructor.
26
+ *
27
+ * @since 1.0.0
28
+ * @access public
29
+ */
30
+ public function __construct() {
31
+ parent::__construct();
32
+ $this->beta = true;
33
+ $this->no_save = true;
34
+ $this->name = __( 'Safe Updates', 'themeisle-companion' );
35
+ $this->description = __( 'OrbitFox will give you visual feedback on how your current theme updates will affect your site. For the moment this is available only for wordpress.org themes.', 'themeisle-companion' );
36
+ }
37
+
38
+ /**
39
+ * Method to determine if the module is enabled or not.
40
+ *
41
+ * @since 1.0.0
42
+ * @access public
43
+ * @return bool
44
+ */
45
+ public function enable_module() {
46
+ return ( $this->beta ) ? $this->is_lucky_user() : true;
47
+ }
48
+
49
+ /**
50
+ * The method for the module load logic.
51
+ *
52
+ * @since 1.0.0
53
+ * @access public
54
+ * @return mixed
55
+ */
56
+ public function load() {
57
+ return;
58
+ }
59
+
60
+ /**
61
+ * Method that returns an array of scripts and styles to be loaded
62
+ * for the front end part.
63
+ *
64
+ * @since 1.0.0
65
+ * @access public
66
+ * @return array
67
+ */
68
+ public function public_enqueue() {
69
+ return array();
70
+ }
71
+
72
+ /**
73
+ * Method that returns an array of scripts and styles to be loaded
74
+ * for the admin part.
75
+ *
76
+ * @since 1.0.0
77
+ * @access public
78
+ * @return array
79
+ */
80
+ public function admin_enqueue() {
81
+ if ( ! $this->is_safe_updates_active() ) {
82
+ return array();
83
+ }
84
+ $current_screen = get_current_screen();
85
+ if ( $current_screen->id != 'themes' && $current_screen->id != 'update-core' ) {
86
+ return array();
87
+ }
88
+ $info = $this->is_update_available();
89
+
90
+ if ( empty( $info ) ) {
91
+ return array();
92
+ }
93
+ $request_data = array(
94
+ 'theme' => $info['theme'],
95
+ 'current_version' => $info['current_version'],
96
+ 'next_version' => $info['new_version'],
97
+ );
98
+
99
+ $data = $this->get_safe_updates_data( $request_data );
100
+ if ( empty( $data ) ) {
101
+ return array();
102
+ }
103
+ $this->localized = array(
104
+ 'theme-update-check' => array(
105
+ 'slug' => $this->get_active_theme_dir(),
106
+ ),
107
+ );
108
+ $changes_info = $this->get_message_notice( array(
109
+ 'global_diff' => $data['global_diff'],
110
+ 'current_version' => $info['current_version'],
111
+ 'new_version' => $info['new_version'],
112
+ 'gallery_url' => $data['gallery_url'],
113
+ ) );
114
+
115
+ $this->localized['theme-update-check']['check_msg'] = $changes_info;
116
+
117
+ return array(
118
+ 'js' => array(
119
+ 'theme-update-check' => array( 'jquery', 'wp-lists', 'backbone' ),
120
+ ),
121
+ );
122
+ }
123
+
124
+ /**
125
+ * Check if safe updates is turned on.
126
+ *
127
+ * @return bool Safe updates status.
128
+ */
129
+ private function is_safe_updates_active() {
130
+
131
+ return (bool) $this->get_option( 'auto_update_checks' );
132
+ }
133
+
134
+ /**
135
+ * Check if there is an update available.
136
+ *
137
+ * @param null $transient Transient to check.
138
+ *
139
+ * @return bool Is update available?
140
+ */
141
+ private function is_update_available( $transient = null ) {
142
+
143
+ if ( $transient === null ) {
144
+ $transient = get_site_transient( 'update_themes' );
145
+ }
146
+
147
+ $slug = $this->get_active_theme_dir();
148
+
149
+ if ( ! isset( $transient->response[ $slug ]['new_version'] ) ) {
150
+ return false;
151
+ }
152
+ if ( version_compare( $transient->response[ $slug ]['new_version'], $transient->checked[ $slug ], '>' ) ) {
153
+ $transient->response[ $slug ]['current_version'] = $transient->checked[ $slug ];
154
+
155
+ $this->changes_check( $transient->response[ $slug ] );
156
+
157
+ return $transient->response[ $slug ];
158
+ }
159
+
160
+ return false;
161
+ }
162
+
163
+ /**
164
+ * Check remote api for safe updates data.
165
+ *
166
+ * @param array $info Theme details.
167
+ *
168
+ * @return array Remote api message.
169
+ */
170
+ private function changes_check( $info ) {
171
+ if ( ! isset( $info['theme'] ) || empty( $info['theme'] ) ) {
172
+ return array();
173
+ }
174
+ if ( ! isset( $info['new_version'] ) || empty( $info['new_version'] ) ) {
175
+ return array();
176
+ }
177
+ if ( ! isset( $info['current_version'] ) || empty( $info['current_version'] ) ) {
178
+ return array();
179
+ }
180
+ $request_data = array(
181
+ 'theme' => $info['theme'],
182
+ 'current_version' => $info['current_version'],
183
+ 'next_version' => $info['new_version'],
184
+ );
185
+
186
+ $data = $this->get_safe_updates_data( $request_data );
187
+ if ( ! empty( $data ) ) {
188
+ return $data;
189
+ }
190
+ /**
191
+ * Set lock and prevent calling the api for the next 30s.
192
+ */
193
+ ksort( $request_data );
194
+ $cache_key = 'obfx_su_' . md5( serialize( $request_data ) );
195
+ $lock = get_transient( $cache_key );
196
+ if ( $lock === 'yes' ) {
197
+ return array();
198
+ }
199
+ $response = wp_remote_post( self::API_ENDPOINT, array(
200
+ 'method' => 'POST',
201
+ 'timeout' => 2,
202
+ 'body' => $request_data,
203
+ )
204
+ );
205
+ if ( is_wp_error( $response ) ) {
206
+ return array();
207
+ }
208
+ $response_data = json_decode( wp_remote_retrieve_body( $response ), true );
209
+ if ( ! is_array( $response_data ) ) {
210
+ return array();
211
+ }
212
+
213
+ set_transient( $cache_key, 'yes', 30 );
214
+
215
+ if ( strval( $response_data['code'] ) !== '200' ) {
216
+ return array();
217
+ }
218
+ $response_data = $response_data['data'];
219
+ if ( ! is_array( $response_data ) ) {
220
+ return array();
221
+ }
222
+ $option_data = array(
223
+ $this->get_safe_updates_hash( $request_data ) => $response_data,
224
+ );
225
+
226
+ $this->set_option( 'checks', $option_data );
227
+
228
+ return $response_data;
229
+ }
230
+
231
+ /**
232
+ * Get cached safe updates api data.
233
+ *
234
+ * @param array $args Args to check.
235
+ *
236
+ * @return array Api data.
237
+ */
238
+ private function get_safe_updates_data( $args = array() ) {
239
+
240
+ $payload_sha = $this->get_safe_updates_hash( $args );
241
+ $checks = $this->get_option( 'checks' );
242
+
243
+ if ( ! isset( $checks[ $payload_sha ] ) || empty( $checks[ $payload_sha ] ) || ! is_array( $checks[ $payload_sha ] ) || $checks[ $payload_sha ]['theme'] !== $args['theme'] ) {
244
+ return array();
245
+ }
246
+
247
+ return $checks[ $payload_sha ];
248
+ }
249
+
250
+ /**
251
+ * Get hash key based on the request data.
252
+ *
253
+ * @param array $args Arguments used to generate hash.
254
+ *
255
+ * @return string Hash key.
256
+ */
257
+ private function get_safe_updates_hash( $args = array() ) {
258
+ ksort( $args );
259
+
260
+ $payload_sha = hash_hmac( 'sha256', json_encode( $args ), self::API_ENDPOINT );
261
+
262
+ return $payload_sha;
263
+ }
264
+
265
+ /**
266
+ * Return message string for safe updates notice.
267
+ *
268
+ * @param array $args Message placeholder.
269
+ *
270
+ * @return string Message string.
271
+ */
272
+ public function get_message_notice( $args ) {
273
+ $diff = floatval( $args['global_diff'] );
274
+ $message = sprintf(
275
+ __( 'According to OrbitFox<sup>&copy;</sup> there is a visual difference of %1$s &#37; between your current version and the latest one. ', 'themeisle-companion' ),
276
+ number_format( $diff, 2 )
277
+ //$args['new_version']
278
+ );
279
+ if ( $diff > 0.1 ) {
280
+ $message .= sprintf( '<a href="%1$s" target="_blank">', add_query_arg( array( 'from_orbitfox' => 'yes' ), $args['gallery_url'] ) ) . __( 'View report', 'themeisle-companion' ) . '</a> ';
281
+ } else {
282
+ $message .= __( 'Is very likely that the update is safe. ', 'themeisle-companion' );
283
+ }
284
+
285
+ return $message;
286
+
287
+ }
288
+
289
+ /**
290
+ * Method to define the options fields for the module
291
+ *
292
+ * @since 1.0.0
293
+ * @access public
294
+ * @return array
295
+ */
296
+ public function options() {
297
+
298
+ add_filter( 'obfx_custom_control_auto_update_toggle', array( $this, 'render_custom_control' ) );
299
+
300
+ add_action( 'admin_footer', array( $this, 'admin_inline_js' ) );
301
+ add_action( 'rest_api_init', array( $this, 'register_endpoints' ) );
302
+ if ( ! $this->get_is_active() ) {
303
+ $this->set_option( 'auto_update_checks', '0' );
304
+ }
305
+
306
+ return array(
307
+ array(
308
+ 'name' => 'checks',
309
+ 'type' => 'custom',
310
+ 'default' => array(),
311
+ ),
312
+ array(
313
+ 'id' => 'auto_update_toggle',
314
+ 'name' => 'auto_update_toggle',
315
+ 'type' => 'custom',
316
+ ),
317
+ );
318
+ }
319
+
320
+ /**
321
+ * Render custom control outpu.
322
+ *
323
+ * @return string Custom control output.
324
+ */
325
+ public function render_custom_control() {
326
+
327
+ if ( ! $this->is_wp_available() ) {
328
+ add_action( 'shutdown', function () {
329
+ $this->set_status( 'active', false );
330
+ } );
331
+
332
+ return __( 'Unfortunately, our service is available only if your are using an wordpress.org theme. We are still working to extend this feature to custom and premium themes soon. ', 'themeisle-companion' );
333
+ }
334
+
335
+ $output = '<label>' . __( 'OrbitFox<sup>&copy;</sup> will need your current theme slug in order to run a visual comparison report between your current and latest version. We will need your consent in order to do this. <br/>Read <a href="https://orbitfox.com/safe-updates/" target="_blank"><b>more</b></a> about this process.', 'themeisle-companion' ) . '';
336
+ if ( ! $this->is_safe_updates_active() ) {
337
+ $output .= '</label></br></br><a id="obfx-safe-updates-allow" class="btn btn-success" href="#"><span class="dashicons dashicons-yes"></span> <span>' . __( 'Allow', 'themeisle-companion' ) . '</span></a>';
338
+ } else {
339
+ $output .= ' If want to disable the update feedback, you can disable the module from the upper module list &#8593;</label><br/><br/>';
340
+ $output .= $this->get_safe_updates_status();
341
+
342
+ }
343
+
344
+ return $output;
345
+ }
346
+
347
+ /**
348
+ * Check if theme is available on wp.org.
349
+ *
350
+ * @return bool Check result.
351
+ */
352
+ private function is_wp_available() {
353
+
354
+ $slug = $this->get_active_theme_dir();
355
+ $cache_key = $slug . '_wporg_check';
356
+ $cache = get_transient( $cache_key );
357
+ if ( $cache !== false ) {
358
+ return $cache === 'yes';
359
+ }
360
+ $response = wp_remote_get( 'http://api.wordpress.org/themes/info/1.1/?action=theme_information&request[slug]=' . $slug );
361
+ if ( is_wp_error( $response ) ) {
362
+ set_transient( $cache_key, 'no', HOUR_IN_SECONDS );
363
+
364
+ return false;
365
+ }
366
+ $body = wp_remote_retrieve_body( $response );
367
+ if ( empty( $body ) ) {
368
+ set_transient( $cache_key, 'no', HOUR_IN_SECONDS );
369
+
370
+ return false;
371
+ }
372
+ $body = json_decode( $body, true );
373
+ if ( ! is_array( $body ) ) {
374
+ set_transient( $cache_key, 'no', HOUR_IN_SECONDS );
375
+
376
+ return false;
377
+ }
378
+
379
+ set_transient( $cache_key, 'yes', HOUR_IN_SECONDS );
380
+
381
+ return true;
382
+ }
383
+
384
+ /**
385
+ * Get safe update process message.
386
+ *
387
+ * @return string Safe updates process message.
388
+ */
389
+ private function get_safe_updates_status() {
390
+ $theme_data = $this->is_update_available();
391
+ if ( $theme_data === false ) {
392
+ return __( 'For the moment there is no update for your current theme. We will display a notice on the themes page as soon as there is one.', 'themeisle-companion' );
393
+
394
+ }
395
+ $changes = $this->changes_check( $theme_data );
396
+ if ( empty( $changes ) ) {
397
+ return __( 'OrbitFox<sup>&copy;</sup> is now running a visual report for your theme update. Please check the themes <a href="' . admin_url( 'themes.php' ) . '" target="_blank">update</a> page in a few minutes to see the result.', 'themeisle-companion' );
398
+ }
399
+
400
+ return '<pre class=" obfx-sf-feedback-notice mb-10">' . $this->get_message_notice( $changes ) . '</pre>';
401
+
402
+ }
403
+
404
+ /**
405
+ * Method to define actions and filters needed for the module.
406
+ *
407
+ * @codeCoverageIgnore
408
+ *
409
+ * @since 1.0.0
410
+ * @access public
411
+ */
412
+ public function hooks() {
413
+
414
+ if ( ! $this->is_safe_updates_active() ) {
415
+ return;
416
+ }
417
+
418
+ $this->loader->add_filter( 'wp_prepare_themes_for_js', $this, 'theme_update_message' );
419
+ }
420
+
421
+ /**
422
+ * Register module safe updates feedback.
423
+ */
424
+ public function register_endpoints() {
425
+ register_rest_route(
426
+ 'obfx', '/enable_safe_updates', array(
427
+ array(
428
+ 'methods' => \WP_REST_Server::CREATABLE,
429
+ 'permission_callback' => function ( \WP_REST_Request $request ) {
430
+ return current_user_can( 'manage_options' );
431
+ },
432
+ 'callback' => array( $this, 'safe_updates_enabler' ),
433
+ ),
434
+ )
435
+ );
436
+ }
437
+
438
+ /**
439
+ * Enable safe updates feedback.
440
+ *
441
+ * @param WP_REST_Request $request Rest request.
442
+ *
443
+ * @return WP_REST_Response Feedback response.
444
+ */
445
+ public function safe_updates_enabler( WP_REST_Request $request ) {
446
+ $status = $request->get_param( 'status' );
447
+ $response = array(
448
+ 'message' => '',
449
+ 'data' => '',
450
+ 'code' => 'error',
451
+
452
+ );
453
+ if ( $status !== 'activate' && $status !== 'deactivate' ) {
454
+ return new WP_REST_Response( $response );
455
+ }
456
+ if ( $status === 'deactivate' ) {
457
+ $this->set_option( 'auto_update_checks', '0' );
458
+ $response = wp_parse_args( array(
459
+ 'code' => 'success',
460
+ 'message' => __( 'Safe updates disabled', 'themeisle-companion' )
461
+ ) );
462
+
463
+ return new WP_REST_Response( $response );
464
+ }
465
+ $this->set_option( 'auto_update_checks', '1' );
466
+
467
+ $status = $this->get_safe_updates_status();
468
+ $response = wp_parse_args( array(
469
+ 'code' => 'success',
470
+ 'message' => $status
471
+ ) );
472
+
473
+ return new WP_REST_Response( $response );
474
+
475
+ }
476
+
477
+ /**
478
+ * Add logic for module options.
479
+ */
480
+ public function admin_inline_js() {
481
+ wp_enqueue_script( 'wp-api' );
482
+
483
+ $enable_safe_updates = get_rest_url( null, 'obfx/enable_safe_updates' );
484
+ ?>
485
+ <script type='text/javascript'>
486
+ (function ($) {
487
+ $('#obfx-safe-updates-allow').on('click', function (event) {
488
+ var btn = $(this);
489
+ btn.addClass('loading');
490
+ $("#obfx-sf-update-error").remove();
491
+ wp.apiRequest({
492
+ url: "<?php echo esc_url( $enable_safe_updates ); ?>",
493
+ data: {status: 'activate'},
494
+ type: 'POST',
495
+ dataType: 'json'
496
+ }).done(function (response) {
497
+ btn.removeClass('loading');
498
+ if (response.code === 'success') {
499
+ btn.hide();
500
+ btn.after(response.message);
501
+ } else {
502
+ btn.after('<p class="label label-error mb-10" id="obfx-sf-update-error">' + response.message + '</p>');
503
+ }
504
+
505
+ }).fail(function (e) {
506
+ btn.removeClass('loading');
507
+ $("#obfx-sf-update-error").remove();
508
+ btn.after('<p class="label label-error">Can not activate the option. Please try again later.</p>');
509
+ });
510
+ return false;
511
+ });
512
+ })(jQuery)
513
+ </script>
514
+ <?php
515
+ }
516
+
517
+ /**
518
+ * Alter theme update message.
519
+ *
520
+ * @param array $themes List of themes.
521
+ *
522
+ * @return mixed Altered message.
523
+ */
524
+ public function theme_update_message( $themes ) {
525
+
526
+ if ( ! $this->is_safe_updates_active() ) {
527
+ return $themes;
528
+ }
529
+ $info = $this->is_update_available();
530
+ if ( empty( $info ) ) {
531
+ return $themes;
532
+ }
533
+ $request_data = array(
534
+ 'theme' => $info['theme'],
535
+ 'current_version' => $info['current_version'],
536
+ 'next_version' => $info['new_version'],
537
+ );
538
+
539
+ $data = $this->get_safe_updates_data( $request_data );
540
+ if ( empty( $data ) ) {
541
+ return $themes;
542
+ }
543
+ $changes_info = $this->get_message_notice( array(
544
+ 'global_diff' => $data['global_diff'],
545
+ 'current_version' => $info['current_version'],
546
+ 'new_version' => $info['new_version'],
547
+ 'gallery_url' => $data['gallery_url'],
548
+ ) );
549
+
550
+ $themes[ $info['theme'] ]['update'] = $themes[ $info['theme'] ]['update'] . $changes_info;
551
+
552
+ return $themes;
553
+ }
554
+
555
+ }
obfx_modules/safe-updates/js/theme-update-check.js ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Social Sharing Module Admin Script
3
+ *
4
+ * @since 1.0.0
5
+ * @package obfx_modules/theme-update-check/js
6
+ *
7
+ * @author ThemeIsle
8
+ */
9
+ /* globals safe_updates */
10
+ var obfx_theme_check = function ($) {
11
+ 'use strict';
12
+
13
+ $(
14
+ function () {
15
+ if (typeof safe_updates === 'undefined') {
16
+ return;
17
+ }
18
+ if (typeof safe_updates.check_msg !== 'undefined') {
19
+ checkUpdateThemeUpdateCore();
20
+ setInterval(checkUpdateTheme, 500);
21
+ }
22
+
23
+ function checkUpdateTheme() {
24
+ var safe_update_data = $('#obfx-safe-updates-data');
25
+ if (safe_update_data.length > 0) {
26
+ return;
27
+ }
28
+ $('div.theme.active .theme-id-container').prepend('<p id="obfx-safe-updates-data" style="position: absolute;bottom: 37px;background: #ccc;background: #fff8e5;padding: 5px;padding-left: 15px;">' + safe_updates.check_msg + '</p>');
29
+ safe_update_data.on('click', 'a', function (e) {
30
+ e.stopPropagation();
31
+ });
32
+ }
33
+
34
+ function checkUpdateThemeUpdateCore() {
35
+
36
+ $('#update-themes-table input[value=' + safe_updates.slug + ']').parent().next().find('p').append('<p>' + safe_updates.check_msg + '</p>');
37
+
38
+ }
39
+
40
+ }
41
+ );
42
+
43
+ };
44
+
45
+ obfx_theme_check(jQuery);
readme.md CHANGED
@@ -3,7 +3,7 @@
3
  **Tags:** widget, admin, widgets, sharing, sections, themes, stock photos, custom icons, icons, menu icons, stock, templates
4
  **Requires at least:** 4.7
5
  **Tested up to:** 4.9
6
- **Requires PHP:** 5.3
7
  **Stable tag:** trunk
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
@@ -12,11 +12,14 @@ This swiss-knife plugin comes with a quality template library, menu/sharing icon
12
 
13
  ## Description ##
14
 
15
- Extend your theme functionality with <a href="https://themeisle.com/plugins/orbit-fox-companion/" rel="nofollow">Orbit Fox</a> with various modules like Social Media Share Buttons & Icons, Uptime Monitoring, Google Analytics, custom menu-icons, one click import page templates, page builder addons and free stock featured images.
16
 
17
  https://www.youtube.com/watch?v=YHhK_twfYB8
18
 
19
  **Features:**
 
 
 
20
  - Uptime Monitor
21
  - Google Analytics Integration
22
  - Template Directory
@@ -28,7 +31,7 @@ https://www.youtube.com/watch?v=YHhK_twfYB8
28
  - More widgets and sections for Hestia Theme
29
  - More widgets and sections for Zerif Theme
30
 
31
- You can check out the demo <a href="https://demo.themeisle.com/orbit-fox/#blog" rel="nofollow" target="_blank">here</a> for a more detailed overview of the features.
32
 
33
  OrbitFox is a user-centred plugin with an easy-to-use admin panel. One of the most important features is that modules will only be loaded if they meet two conditions. If they are needed and if they are compatible with your existing themes and plugins. This will cut down on the unnecessary bloating of your website.
34
 
@@ -100,6 +103,15 @@ Activating the Orbit Fox plugin is just like any other plugin. If you've uploade
100
  5. Social Sharing Module
101
 
102
  ## Changelog ##
 
 
 
 
 
 
 
 
 
103
  ### 2.4.7 - 2018-05-03 ###
104
 
105
  * Add content forms for Beaver Builder
3
  **Tags:** widget, admin, widgets, sharing, sections, themes, stock photos, custom icons, icons, menu icons, stock, templates
4
  **Requires at least:** 4.7
5
  **Tested up to:** 4.9
6
+ **Requires PHP:** 5.4
7
  **Stable tag:** trunk
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
  ## Description ##
14
 
15
+ Extend your theme functionality with <a href="https://orbitfox.com/" rel="nofollow">Orbit Fox</a> with various modules like Social Media Share Buttons & Icons, Uptime Monitoring, Google Analytics, custom menu-icons, one click import page templates, page builder addons and free stock featured images.
16
 
17
  https://www.youtube.com/watch?v=YHhK_twfYB8
18
 
19
  **Features:**
20
+ - Beta: Image CDN & Optimization
21
+ - Beta: Themes Safe updates feedback
22
+ - Privacy policy notice ( GDPR friendly )
23
  - Uptime Monitor
24
  - Google Analytics Integration
25
  - Template Directory
31
  - More widgets and sections for Hestia Theme
32
  - More widgets and sections for Zerif Theme
33
 
34
+ You can check out the demo <a href="https://orbitfox.com/#blog" rel="nofollow" target="_blank">here</a> for a more detailed overview of the features.
35
 
36
  OrbitFox is a user-centred plugin with an easy-to-use admin panel. One of the most important features is that modules will only be loaded if they meet two conditions. If they are needed and if they are compatible with your existing themes and plugins. This will cut down on the unnecessary bloating of your website.
37
 
103
  5. Social Sharing Module
104
 
105
  ## Changelog ##
106
+ ### 2.5.0 - 2018-06-22 ###
107
+
108
+ * Adds privacy policy module, allows users to set a notice for their visitors.
109
+ * Adds Image CDN and Optimization module in private BETA .
110
+ * Adds Themes Safe Updates module in private BETA.
111
+ * Adds more Elementor templates into the library.
112
+ * Improvements for Hestia enhancements module.
113
+
114
+
115
  ### 2.4.7 - 2018-05-03 ###
116
 
117
  * Add content forms for Beaver Builder
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: themeisle, codeinwp, rodicaelena, baicusandrei
3
  Tags: widget, admin, widgets, sharing, sections, themes, stock photos, custom icons, icons, menu icons, stock, templates
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
- Requires PHP: 5.3
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -12,11 +12,14 @@ This swiss-knife plugin comes with a quality template library, menu/sharing icon
12
 
13
  == Description ==
14
 
15
- Extend your theme functionality with <a href="https://themeisle.com/plugins/orbit-fox-companion/" rel="nofollow">Orbit Fox</a> with various modules like Social Media Share Buttons & Icons, Uptime Monitoring, Google Analytics, custom menu-icons, one click import page templates, page builder addons and free stock featured images.
16
 
17
  https://www.youtube.com/watch?v=YHhK_twfYB8
18
 
19
  **Features:**
 
 
 
20
  - Uptime Monitor
21
  - Google Analytics Integration
22
  - Template Directory
@@ -28,7 +31,7 @@ https://www.youtube.com/watch?v=YHhK_twfYB8
28
  - More widgets and sections for Hestia Theme
29
  - More widgets and sections for Zerif Theme
30
 
31
- You can check out the demo <a href="https://demo.themeisle.com/orbit-fox/#blog" rel="nofollow" target="_blank">here</a> for a more detailed overview of the features.
32
 
33
  OrbitFox is a user-centred plugin with an easy-to-use admin panel. One of the most important features is that modules will only be loaded if they meet two conditions. If they are needed and if they are compatible with your existing themes and plugins. This will cut down on the unnecessary bloating of your website.
34
 
@@ -100,6 +103,15 @@ Activating the Orbit Fox plugin is just like any other plugin. If you've uploade
100
  5. Social Sharing Module
101
 
102
  == Changelog ==
 
 
 
 
 
 
 
 
 
103
  = 2.4.7 - 2018-05-03 =
104
 
105
  * Add content forms for Beaver Builder
3
  Tags: widget, admin, widgets, sharing, sections, themes, stock photos, custom icons, icons, menu icons, stock, templates
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
+ Requires PHP: 5.4
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
13
  == Description ==
14
 
15
+ Extend your theme functionality with <a href="https://orbitfox.com/" rel="nofollow">Orbit Fox</a> with various modules like Social Media Share Buttons & Icons, Uptime Monitoring, Google Analytics, custom menu-icons, one click import page templates, page builder addons and free stock featured images.
16
 
17
  https://www.youtube.com/watch?v=YHhK_twfYB8
18
 
19
  **Features:**
20
+ - Beta: Image CDN & Optimization
21
+ - Beta: Themes Safe updates feedback
22
+ - Privacy policy notice ( GDPR friendly )
23
  - Uptime Monitor
24
  - Google Analytics Integration
25
  - Template Directory
31
  - More widgets and sections for Hestia Theme
32
  - More widgets and sections for Zerif Theme
33
 
34
+ You can check out the demo <a href="https://orbitfox.com/#blog" rel="nofollow" target="_blank">here</a> for a more detailed overview of the features.
35
 
36
  OrbitFox is a user-centred plugin with an easy-to-use admin panel. One of the most important features is that modules will only be loaded if they meet two conditions. If they are needed and if they are compatible with your existing themes and plugins. This will cut down on the unnecessary bloating of your website.
37
 
103
  5. Social Sharing Module
104
 
105
  == Changelog ==
106
+ = 2.5.0 - 2018-06-22 =
107
+
108
+ * Adds privacy policy module, allows users to set a notice for their visitors.
109
+ * Adds Image CDN and Optimization module in private BETA .
110
+ * Adds Themes Safe Updates module in private BETA.
111
+ * Adds more Elementor templates into the library.
112
+ * Improvements for Hestia enhancements module.
113
+
114
+
115
  = 2.4.7 - 2018-05-03 =
116
 
117
  * Add content forms for Beaver Builder
themeisle-companion.php CHANGED
@@ -13,11 +13,11 @@
13
  *
14
  * @wordpress-plugin
15
  * Plugin Name: Orbit Fox Companion
16
- * Plugin URI: https://themeisle.com/plugins/orbit-fox-companion
17
  * Description: This swiss-knife plugin comes with a quality template library, menu/sharing icons modules, and newly added Elementor/BeaverBuilder page builder widgets on each release.
18
- * Version: 2.4.7
19
  * Author: Themeisle
20
- * Author URI: https://themeisle.com
21
  * License: GPL-2.0+
22
  * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
23
  * Text Domain: themeisle-companion
13
  *
14
  * @wordpress-plugin
15
  * Plugin Name: Orbit Fox Companion
16
+ * Plugin URI: https://orbitfox.com/
17
  * Description: This swiss-knife plugin comes with a quality template library, menu/sharing icons modules, and newly added Elementor/BeaverBuilder page builder widgets on each release.
18
+ * Version: 2.5.0
19
  * Author: Themeisle
20
+ * Author URI: https://orbitfox.com/
21
  * License: GPL-2.0+
22
  * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
23
  * Text Domain: themeisle-companion
themeisle-hash.json CHANGED
@@ -1 +1 @@
1
- {"class-autoloader.php":"57e533b653d235e76cb9953720e4f5e9","index.php":"39ab8276fb0e4bd3fcab3270822c5977","themeisle-companion.php":"b3aa18e60f62100d985c8ff4f3ebe931","uninstall.php":"7abf753a29e0eb3a844c8a0ba9493b7c"}
1
+ {"class-autoloader.php":"57e533b653d235e76cb9953720e4f5e9","index.php":"39ab8276fb0e4bd3fcab3270822c5977","themeisle-companion.php":"81f9e46a922320de89d1a8c5171be630","uninstall.php":"7abf753a29e0eb3a844c8a0ba9493b7c"}
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitef776c7a9adba0d3d6ce2273f046d008::getLoader();
vendor/codeinwp/elementor-extra-widgets/class-elementor-extra-widgets.php CHANGED
@@ -22,7 +22,7 @@ if ( ! class_exists( '\ThemeIsle\ElementorExtraWidgets' ) ) {
22
  * The version of this library
23
  * @var string
24
  */
25
- public static $version = '1.0.1';
26
 
27
  /**
28
  * Defines the library behaviour
22
  * The version of this library
23
  * @var string
24
  */
25
+ public static $version = '1.0.2';
26
 
27
  /**
28
  * Defines the library behaviour
vendor/codeinwp/elementor-extra-widgets/composer.json CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "name": "codeinwp/elementor-extra-widgets",
3
  "type": "library",
4
- "version": "1.0.1",
5
  "license": "GPL-3.0-or-later",
6
  "minimum-stability": "dev",
7
  "homepage": "https://github.com/Codeinwp/elementor-extra-widgets",
1
  {
2
  "name": "codeinwp/elementor-extra-widgets",
3
  "type": "library",
4
+ "version": "1.0.2",
5
  "license": "GPL-3.0-or-later",
6
  "minimum-stability": "dev",
7
  "homepage": "https://github.com/Codeinwp/elementor-extra-widgets",
vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php CHANGED
@@ -893,7 +893,7 @@ class Posts_Grid extends \Elementor\Widget_Base {
893
  [
894
  'name' => 'grid_title_style_typography',
895
  'scheme' => \Elementor\Scheme_Typography::TYPOGRAPHY_1,
896
- 'selector' => '{{WRAPPER}} .obfx-grid-title',
897
  ]
898
  );
899
 
@@ -908,8 +908,8 @@ class Posts_Grid extends \Elementor\Widget_Base {
908
  'value' => \Elementor\Scheme_Color::COLOR_1,
909
  ],
910
  'selectors' => [
911
- '{{WRAPPER}} .obfx-grid-title' => 'color: {{VALUE}};',
912
- '{{WRAPPER}} .obfx-grid-title a' => 'color: {{VALUE}};',
913
  ],
914
  ]
915
  );
893
  [
894
  'name' => 'grid_title_style_typography',
895
  'scheme' => \Elementor\Scheme_Typography::TYPOGRAPHY_1,
896
+ 'selector' => '{{WRAPPER}} .obfx-grid .entry-title.obfx-grid-title, {{WRAPPER}} .obfx-grid .entry-title.obfx-grid-title > a',
897
  ]
898
  );
899
 
908
  'value' => \Elementor\Scheme_Color::COLOR_1,
909
  ],
910
  'selectors' => [
911
+ '{{WRAPPER}} .obfx-grid .entry-title.obfx-grid-title' => 'color: {{VALUE}};',
912
+ '{{WRAPPER}} .obfx-grid .entry-title.obfx-grid-title > a' => 'color: {{VALUE}};',
913
  ],
914
  ]
915
  );
vendor/codeinwp/templates-directory/class-page-templates-directory.php CHANGED
@@ -242,6 +242,20 @@ if ( ! class_exists( '\ThemeIsle\PageTemplatesDirectory' ) ) {
242
  'screenshot' => esc_url( $this->get_source_url() . 'mocha-elementor/screenshot.png' ),
243
  'import_file' => esc_url( $this->get_source_url() . 'mocha-elementor/template.json' ),
244
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
245
  );
246
 
247
  foreach ( $templates_list as $template => $properties ) {
242
  'screenshot' => esc_url( $this->get_source_url() . 'mocha-elementor/screenshot.png' ),
243
  'import_file' => esc_url( $this->get_source_url() . 'mocha-elementor/template.json' ),
244
  ),
245
+ 'rik-landing' => array(
246
+ 'title' => __( 'Rik - Landing Page', 'themeisle-companion' ),
247
+ 'description' => __( 'This is a clean Landing page, ready to be used for an app presentation. It features beautiful gradients and great layouts for showcasing your product.', 'themeisle-companion' ),
248
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/rik-elementor/',
249
+ 'screenshot' => esc_url( $this->get_source_url() . 'rik-elementor/screenshot.jpg' ),
250
+ 'import_file' => esc_url( $this->get_source_url() . 'rik-elementor/template.json' ),
251
+ ),
252
+ 'zerif-lite' => array(
253
+ 'title' => __( 'Zerif Lite - One Page Template', 'themeisle-companion' ),
254
+ 'description' => __( 'A friendly one-page WordPress multipurpose theme, with a full-width image in the background and a simple white menu bar at the top. It comes with an elegant and modern design, which could fit very well any kind of business. Zerif Lite has an interactive and colorful interface, with classy parallax effect and lively animations. You can use it for your online shop as well.', 'themeisle-companion' ),
255
+ 'demo_url' => 'https://demo.themeisle.com/hestia-pro-demo-content/zerif-lite/',
256
+ 'screenshot' => esc_url( $this->get_source_url() . 'zerif-elementor/screenshot.jpg' ),
257
+ 'import_file' => esc_url( $this->get_source_url() . 'zerif-elementor/template.json' ),
258
+ ),
259
  );
260
 
261
  foreach ( $templates_list as $template => $properties ) {
vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php CHANGED
@@ -202,7 +202,7 @@ class ElementorWidget extends \Elementor\Widget_Base {
202
  'type' => $field['type'],
203
  'label' => $field['label'],
204
  'requirement' => $field['require'],
205
- // 'placeholder' => isset( $field['placeholder'] ) ? $field['placeholder'] : $field['label'],
206
  'width' => '100',
207
  );
208
  }
@@ -340,6 +340,8 @@ class ElementorWidget extends \Elementor\Widget_Base {
340
  private function render_form_field( $field, $is_preview = false ) {
341
  $item_index = $field['_id'];
342
  $key = ! empty( $field['key'] ) ? $field['key'] : sanitize_title( $field['label'] );
 
 
343
  $required = '';
344
  $form_id = $this->get_data( 'id' );
345
 
@@ -347,7 +349,7 @@ class ElementorWidget extends \Elementor\Widget_Base {
347
  $required = 'required="required"';
348
  }
349
 
350
- // in case this is a preview, we need to disable the actual inputs and transform the labels in inputs
351
  $disabled = '';
352
  if ( $is_preview ) {
353
  $disabled = 'disabled="disabled"';
@@ -370,6 +372,7 @@ class ElementorWidget extends \Elementor\Widget_Base {
370
  <textarea name="<?php echo $field_name ?>" id="<?php echo $field_name ?>"
371
  <?php echo $disabled; ?>
372
  <?php echo $required; ?>
 
373
  cols="30" rows="5"></textarea>
374
  <?php break;
375
  case 'password': ?>
@@ -378,7 +381,7 @@ class ElementorWidget extends \Elementor\Widget_Base {
378
  <?php break;
379
  default: ?>
380
  <input type="text" name="<?php echo $field_name ?>" id="<?php echo $field_name ?>"
381
- <?php echo $required; ?> <?php echo $disabled; ?>>
382
  <?php
383
  break;
384
  } ?>
202
  'type' => $field['type'],
203
  'label' => $field['label'],
204
  'requirement' => $field['require'],
205
+ 'placeholder' => isset( $field['placeholder'] ) ? $field['placeholder'] : $field['label'],
206
  'width' => '100',
207
  );
208
  }
340
  private function render_form_field( $field, $is_preview = false ) {
341
  $item_index = $field['_id'];
342
  $key = ! empty( $field['key'] ) ? $field['key'] : sanitize_title( $field['label'] );
343
+ $placeholder = ! empty( $field['placeholder'] ) ? $field['placeholder'] : '';
344
+
345
  $required = '';
346
  $form_id = $this->get_data( 'id' );
347
 
349
  $required = 'required="required"';
350
  }
351
 
352
+ // in case this is a preview, we need to disable the actual inputs and transform the labels in inputs
353
  $disabled = '';
354
  if ( $is_preview ) {
355
  $disabled = 'disabled="disabled"';
372
  <textarea name="<?php echo $field_name ?>" id="<?php echo $field_name ?>"
373
  <?php echo $disabled; ?>
374
  <?php echo $required; ?>
375
+ placeholder="<?php echo esc_attr ( $placeholder ); ?>"
376
  cols="30" rows="5"></textarea>
377
  <?php break;
378
  case 'password': ?>
381
  <?php break;
382
  default: ?>
383
  <input type="text" name="<?php echo $field_name ?>" id="<?php echo $field_name ?>"
384
+ <?php echo $required; ?> <?php echo $disabled; ?> placeholder="<?php echo esc_attr ( $placeholder ); ?>">
385
  <?php
386
  break;
387
  } ?>
vendor/codeinwp/themeisle-content-forms/composer.json CHANGED
@@ -1,6 +1,6 @@
1
  {
2
  "name": "codeinwp/themeisle-content-forms",
3
- "version": "1.0.1",
4
  "description": "ThemeIsle Content Forms ",
5
  "keywords": [
6
  "wordpress"
1
  {
2
  "name": "codeinwp/themeisle-content-forms",
3
+ "version": "1.0.2",
4
  "description": "ThemeIsle Content Forms ",
5
  "keywords": [
6
  "wordpress"
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php CHANGED
@@ -49,7 +49,8 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
49
  * @param ThemeIsle_SDK_Product $product The product object.
50
  */
51
  public function __construct( $product ) {
52
- $this->product = $product;
 
53
  $this->product_key = $this->product->get_key() . '-update-response';
54
  if ( ! $this->product->requires_license() ) {
55
  $this->license_key = 'free';
@@ -517,6 +518,39 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
517
  delete_transient( $this->product_key );
518
  }
519
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
  /**
521
  * Check for updates
522
  *
@@ -525,45 +559,22 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
525
  function check_for_update() {
526
  $theme = wp_get_theme( $this->product->get_slug() );
527
  $update_data = get_transient( $this->product_key );
 
528
  if ( false === $update_data ) {
529
  $failed = false;
530
- if ( empty( $this->license_key ) ) {
531
- return false;
532
- }
533
- $api_params = array(
534
- 'edd_action' => 'get_version',
535
- 'version' => $this->product->get_version(),
536
- 'license' => $this->license_key,
537
- 'name' => $this->product->get_name(),
538
- 'slug' => $this->product->get_slug(),
539
- 'author' => $this->product->get_store_name(),
540
- 'url' => rawurlencode( home_url() ),
541
- );
542
- $response = wp_remote_post(
543
- $this->product->get_store_url(), array(
544
- 'timeout' => 15,
545
- 'sslverify' => false,
546
- 'body' => $api_params,
547
- )
548
- );
549
- // make sure the response was successful
550
- if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
551
- $failed = true;
552
- }
553
- $update_data = json_decode( wp_remote_retrieve_body( $response ) );
554
- if ( ! is_object( $update_data ) ) {
555
  $failed = true;
556
  }
557
- // if the response failed, try again in 30 minutes
558
  if ( $failed ) {
559
  $data = new stdClass;
560
  $data->new_version = $this->product->get_version();
561
  set_transient( $this->product_key, $data, strtotime( '+30 minutes' ) );
562
 
563
  return false;
564
- }
565
- // if the status is 'ok', return the update arguments
566
- if ( ! $failed ) {
567
  $update_data->sections = maybe_unserialize( $update_data->sections );
568
  set_transient( $this->product_key, $update_data, strtotime( '+12 hours' ) );
569
  }
@@ -618,34 +629,14 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
618
  * @return false||object
619
  */
620
  private function api_request( $_action = '', $_data = '' ) {
621
- if ( empty( $this->license_key ) ) {
622
- return;
623
- }
624
- $api_params = array(
625
- 'edd_action' => 'get_version',
626
- 'license' => $this->license_key,
627
- 'name' => rawurlencode( $this->product->get_name() ),
628
- 'slug' => rawurlencode( $this->product->get_slug() ),
629
- 'author' => $this->product->get_store_name(),
630
- 'url' => rawurlencode( home_url() ),
631
- );
632
- $request = wp_remote_post(
633
- $this->product->get_store_url(), array(
634
- 'timeout' => 15,
635
- 'sslverify' => false,
636
- 'body' => $api_params,
637
- )
638
- );
639
- if ( ! is_wp_error( $request ) ) :
640
- $request = json_decode( wp_remote_retrieve_body( $request ) );
641
- if ( $request && isset( $request->sections ) ) {
642
- $request->sections = maybe_unserialize( $request->sections );
643
- }
644
-
645
- return $request;
646
- else :
647
  return false;
648
- endif;
 
 
 
 
649
  }
650
 
651
  /**
49
  * @param ThemeIsle_SDK_Product $product The product object.
50
  */
51
  public function __construct( $product ) {
52
+ $this->product = $product;
53
+
54
  $this->product_key = $this->product->get_key() . '-update-response';
55
  if ( ! $this->product->requires_license() ) {
56
  $this->license_key = 'free';
518
  delete_transient( $this->product_key );
519
  }
520
 
521
+ /**
522
+ * Check remote api for latest version.
523
+ *
524
+ * @return bool|mixed Update api response.
525
+ */
526
+ private function get_version_data() {
527
+ $api_params = array(
528
+ 'edd_action' => 'get_version',
529
+ 'version' => $this->product->get_version(),
530
+ 'license' => $this->license_key,
531
+ 'name' => $this->product->get_name(),
532
+ 'slug' => $this->product->get_slug(),
533
+ 'author' => $this->product->get_store_name(),
534
+ 'url' => rawurlencode( home_url() ),
535
+ );
536
+ $response = wp_remote_post(
537
+ $this->product->get_store_url(), array(
538
+ 'timeout' => 15,
539
+ 'sslverify' => false,
540
+ 'body' => $api_params,
541
+ )
542
+ );
543
+ if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
544
+ return false;
545
+ }
546
+ $update_data = json_decode( wp_remote_retrieve_body( $response ) );
547
+ if ( ! is_object( $update_data ) ) {
548
+ return false;
549
+ }
550
+
551
+ return $update_data;
552
+ }
553
+
554
  /**
555
  * Check for updates
556
  *
559
  function check_for_update() {
560
  $theme = wp_get_theme( $this->product->get_slug() );
561
  $update_data = get_transient( $this->product_key );
562
+
563
  if ( false === $update_data ) {
564
  $failed = false;
565
+
566
+ $update_data = $this->get_version_data();
567
+ if ( empty( $update_data ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
568
  $failed = true;
569
  }
570
+ // If the response failed, try again in 30 minutes.
571
  if ( $failed ) {
572
  $data = new stdClass;
573
  $data->new_version = $this->product->get_version();
574
  set_transient( $this->product_key, $data, strtotime( '+30 minutes' ) );
575
 
576
  return false;
577
+ } else {
 
 
578
  $update_data->sections = maybe_unserialize( $update_data->sections );
579
  set_transient( $this->product_key, $update_data, strtotime( '+12 hours' ) );
580
  }
629
  * @return false||object
630
  */
631
  private function api_request( $_action = '', $_data = '' ) {
632
+ $update_data = $this->get_version_data();
633
+ if ( empty( $update_data ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
634
  return false;
635
+ }
636
+ if ( $update_data && isset( $update_data->sections ) ) {
637
+ $update_data->sections = maybe_unserialize( $update_data->sections );
638
+ }
639
+ return $update_data;
640
  }
641
 
642
  /**
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -11,7 +11,7 @@
11
  */
12
 
13
  // Current SDK version and path.
14
- $themeisle_sdk_version = '2.2.3';
15
  $themeisle_sdk_path = dirname( __FILE__ );
16
 
17
  global $themeisle_sdk_max_version;
11
  */
12
 
13
  // Current SDK version and path.
14
+ $themeisle_sdk_version = '2.2.5';
15
  $themeisle_sdk_path = dirname( __FILE__ );
16
 
17
  global $themeisle_sdk_max_version;
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire2632701c6aff231cecb23eb39f42cf86($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire2632701c6aff231cecb23eb39f42cf86($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitef776c7a9adba0d3d6ce2273f046d008
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitef776c7a9adba0d3d6ce2273f046d008', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitef776c7a9adba0d3d6ce2273f046d008', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequireef776c7a9adba0d3d6ce2273f046d008($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequireef776c7a9adba0d3d6ce2273f046d008($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/installed.json CHANGED
@@ -6,15 +6,15 @@
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
- "reference": "ae7fce00ef4fdec1b3f5b918ee0b5e9fe18d588f"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/ae7fce00ef4fdec1b3f5b918ee0b5e9fe18d588f",
14
- "reference": "ae7fce00ef4fdec1b3f5b918ee0b5e9fe18d588f",
15
  "shasum": ""
16
  },
17
- "time": "2018-04-30 11:29:58",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {
@@ -46,15 +46,15 @@
46
  "source": {
47
  "type": "git",
48
  "url": "https://github.com/Codeinwp/elementor-extra-widgets.git",
49
- "reference": "3a0f72ba563210594769acc56529d6a0235bc093"
50
  },
51
  "dist": {
52
  "type": "zip",
53
- "url": "https://api.github.com/repos/Codeinwp/elementor-extra-widgets/zipball/3a0f72ba563210594769acc56529d6a0235bc093",
54
- "reference": "3a0f72ba563210594769acc56529d6a0235bc093",
55
  "shasum": ""
56
  },
57
- "time": "2018-03-29 14:11:23",
58
  "type": "library",
59
  "installation-source": "dist",
60
  "autoload": {
@@ -119,18 +119,18 @@
119
  "source": {
120
  "type": "git",
121
  "url": "https://github.com/Codeinwp/templates-directory.git",
122
- "reference": "287d53c39ca4718f76ccd6a576a0cd43c01f2e58"
123
  },
124
  "dist": {
125
  "type": "zip",
126
- "url": "https://api.github.com/repos/Codeinwp/templates-directory/zipball/287d53c39ca4718f76ccd6a576a0cd43c01f2e58",
127
- "reference": "287d53c39ca4718f76ccd6a576a0cd43c01f2e58",
128
  "shasum": ""
129
  },
130
  "require": {
131
  "codeinwp/full-width-page-templates": "master"
132
  },
133
- "time": "2018-04-08 10:58:31",
134
  "type": "library",
135
  "installation-source": "dist",
136
  "autoload": {
@@ -159,15 +159,15 @@
159
  "source": {
160
  "type": "git",
161
  "url": "https://github.com/Codeinwp/themeisle-content-forms.git",
162
- "reference": "725092d043db8212e2a0eee2e282e3d8acf49058"
163
  },
164
  "dist": {
165
  "type": "zip",
166
- "url": "https://api.github.com/repos/Codeinwp/themeisle-content-forms/zipball/725092d043db8212e2a0eee2e282e3d8acf49058",
167
- "reference": "725092d043db8212e2a0eee2e282e3d8acf49058",
168
  "shasum": ""
169
  },
170
- "time": "2018-03-13 15:10:31",
171
  "type": "library",
172
  "installation-source": "dist",
173
  "autoload": {
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
+ "reference": "33d470402379047bc430c39ecab9a8a4a850d0d2"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/33d470402379047bc430c39ecab9a8a4a850d0d2",
14
+ "reference": "33d470402379047bc430c39ecab9a8a4a850d0d2",
15
  "shasum": ""
16
  },
17
+ "time": "2018-06-06 14:49:32",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {
46
  "source": {
47
  "type": "git",
48
  "url": "https://github.com/Codeinwp/elementor-extra-widgets.git",
49
+ "reference": "4169cc53dc84502d85ea43c52b1ea255b699b6d5"
50
  },
51
  "dist": {
52
  "type": "zip",
53
+ "url": "https://api.github.com/repos/Codeinwp/elementor-extra-widgets/zipball/4169cc53dc84502d85ea43c52b1ea255b699b6d5",
54
+ "reference": "4169cc53dc84502d85ea43c52b1ea255b699b6d5",
55
  "shasum": ""
56
  },
57
+ "time": "2018-06-19 11:53:09",
58
  "type": "library",
59
  "installation-source": "dist",
60
  "autoload": {
119
  "source": {
120
  "type": "git",
121
  "url": "https://github.com/Codeinwp/templates-directory.git",
122
+ "reference": "a13b7ddfaa636085e3ad167440c2b0b4c9ab0605"
123
  },
124
  "dist": {
125
  "type": "zip",
126
+ "url": "https://api.github.com/repos/Codeinwp/templates-directory/zipball/a13b7ddfaa636085e3ad167440c2b0b4c9ab0605",
127
+ "reference": "a13b7ddfaa636085e3ad167440c2b0b4c9ab0605",
128
  "shasum": ""
129
  },
130
  "require": {
131
  "codeinwp/full-width-page-templates": "master"
132
  },
133
+ "time": "2018-06-21 14:36:16",
134
  "type": "library",
135
  "installation-source": "dist",
136
  "autoload": {
159
  "source": {
160
  "type": "git",
161
  "url": "https://github.com/Codeinwp/themeisle-content-forms.git",
162
+ "reference": "41bc455814a993ce17baa5f23d1d02edd3503ccf"
163
  },
164
  "dist": {
165
  "type": "zip",
166
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-content-forms/zipball/41bc455814a993ce17baa5f23d1d02edd3503ccf",
167
+ "reference": "41bc455814a993ce17baa5f23d1d02edd3503ccf",
168
  "shasum": ""
169
  },
170
+ "time": "2018-06-19 13:14:27",
171
  "type": "library",
172
  "installation-source": "dist",
173
  "autoload": {