Version Description
- 2018-06-22
Download this release
Release Info
Developer | codeinwp |
Plugin | Orbit Fox by ThemeIsle |
Version | 2.5.0 |
Comparing to | |
See all releases |
Code changes from version 2.4.7 to 2.5.0
- CHANGELOG.md +8 -0
- core/app/abstract/class-orbit-fox-module-abstract.php +295 -217
- core/app/class-orbit-fox-admin.php +3 -0
- core/app/class-orbit-fox-global-settings.php +3 -0
- core/app/helpers/class-orbit-fox-render-helper.php +146 -99
- core/app/views/partials/module-panel-tpl.php +15 -6
- core/app/views/partials/module-tile-tpl.php +11 -3
- core/assets/css/orbit-fox-admin.css +87 -36
- core/assets/js/orbit-fox-admin.js +26 -24
- core/includes/class-orbit-fox.php +1 -1
- languages/themeisle-companion.pot +1211 -481
- obfx_modules/companion-legacy/inc/azera-shop/css/style.css +85 -98
- obfx_modules/companion-legacy/inc/hestia/common-functions.php +26 -214
- obfx_modules/companion-legacy/inc/llorix-one-companion/css/style.css +82 -96
- obfx_modules/companion-legacy/init.php +0 -17
- obfx_modules/google-analytics/js/script.js +55 -53
- obfx_modules/image-cdn/inc/class-orbit-fox-connector.php +228 -0
- obfx_modules/image-cdn/inc/class-orbit-fox-image-replacer.php +629 -0
- obfx_modules/image-cdn/inc/class-request.php +127 -0
- obfx_modules/image-cdn/init.php +391 -0
- obfx_modules/menu-icons/js/admin.js +4 -4
- obfx_modules/policy-notice/init.php +352 -0
- obfx_modules/safe-updates/init.php +555 -0
- obfx_modules/safe-updates/js/theme-update-check.js +45 -0
- readme.md +15 -3
- readme.txt +15 -3
- themeisle-companion.php +3 -3
- themeisle-hash.json +1 -1
- vendor/autoload.php +1 -1
- vendor/codeinwp/elementor-extra-widgets/class-elementor-extra-widgets.php +1 -1
- vendor/codeinwp/elementor-extra-widgets/composer.json +1 -1
- vendor/codeinwp/elementor-extra-widgets/widgets/elementor/posts-grid.php +3 -3
- vendor/codeinwp/templates-directory/class-page-templates-directory.php +14 -0
- vendor/codeinwp/themeisle-content-forms/class-themeisle-content-forms-elementor.php +6 -3
- vendor/codeinwp/themeisle-content-forms/composer.json +1 -1
- vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php +48 -57
- vendor/codeinwp/themeisle-sdk/load.php +1 -1
- vendor/composer/autoload_real.php +5 -5
- 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 |
-
*
|
50 |
*
|
51 |
-
* @since 2.1
|
52 |
-
* @access
|
53 |
-
* @var
|
54 |
*/
|
55 |
-
|
56 |
-
|
57 |
/**
|
58 |
-
*
|
59 |
*
|
60 |
* @since 1.0.0
|
61 |
* @access public
|
62 |
-
* @var
|
63 |
*/
|
64 |
-
|
65 |
-
|
66 |
/**
|
67 |
-
*
|
68 |
*
|
69 |
-
* @since 2.
|
70 |
* @access public
|
71 |
-
* @var
|
72 |
*/
|
73 |
-
public $
|
74 |
-
|
75 |
/**
|
76 |
-
*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
*
|
78 |
* @since 1.0.0
|
79 |
* @access public
|
80 |
-
* @var
|
81 |
*/
|
82 |
-
|
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 |
-
*
|
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
|
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
|
137 |
-
return $this->slug;
|
138 |
-
}
|
139 |
|
140 |
/**
|
141 |
-
*
|
142 |
-
*
|
143 |
-
* @codeCoverageIgnore
|
144 |
*
|
145 |
* @since 1.0.0
|
146 |
* @access protected
|
147 |
-
* @
|
148 |
*/
|
149 |
-
|
150 |
-
$reflector = new ReflectionClass( get_class( $this ) );
|
151 |
-
return dirname( $reflector->getFileName() );
|
152 |
-
}
|
153 |
|
154 |
/**
|
155 |
-
*
|
156 |
-
*
|
157 |
-
* @codeCoverageIgnore
|
158 |
*
|
159 |
* @access protected
|
160 |
-
* @
|
161 |
*/
|
162 |
-
protected
|
163 |
-
return plugin_dir_url( $this->get_dir() ) . $this->slug;
|
164 |
-
}
|
165 |
|
166 |
/**
|
167 |
-
*
|
168 |
*
|
169 |
* @since 1.0.0
|
170 |
-
* @access
|
171 |
-
* @param boolean $is_child Flag for child themes.
|
172 |
-
* @return string
|
173 |
*/
|
174 |
-
|
175 |
-
|
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
|
|
|
|
|
|
|
246 |
*
|
247 |
* @since 1.0.0
|
248 |
* @access public
|
|
|
|
|
|
|
249 |
* @return bool
|
250 |
*/
|
251 |
-
public
|
|
|
|
|
252 |
|
253 |
/**
|
254 |
-
*
|
|
|
255 |
*
|
256 |
-
* @
|
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 |
-
*
|
|
|
|
|
|
|
|
|
269 |
*/
|
270 |
-
public
|
|
|
|
|
271 |
|
272 |
/**
|
273 |
-
* Method
|
274 |
-
* for the admin part.
|
275 |
*
|
276 |
* @since 1.0.0
|
277 |
* @access public
|
278 |
-
* @return
|
279 |
*/
|
280 |
-
public abstract function
|
281 |
|
282 |
/**
|
283 |
-
*
|
284 |
*
|
285 |
* @since 1.0.0
|
286 |
* @access public
|
287 |
-
* @return
|
288 |
*/
|
289 |
-
public abstract function
|
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
|
319 |
-
* the provided key.
|
320 |
*
|
321 |
* @codeCoverageIgnore
|
322 |
*
|
323 |
* @since 1.0.0
|
324 |
* @access public
|
325 |
-
*
|
326 |
-
* @
|
|
|
|
|
|
|
327 |
*/
|
328 |
-
final public function
|
329 |
-
|
|
|
|
|
|
|
330 |
}
|
331 |
|
332 |
/**
|
333 |
-
*
|
334 |
-
* the provided key value pair.
|
335 |
-
*
|
336 |
-
* @codeCoverageIgnore
|
337 |
*
|
338 |
-
* @since
|
339 |
* @access public
|
340 |
-
* @param string $key Key to update.
|
341 |
-
* @param string $value The new value.
|
342 |
-
* @return mixed
|
343 |
*/
|
344 |
-
|
345 |
-
return $this->model->set_module_status( $this->slug, $key, $value );
|
346 |
}
|
347 |
|
348 |
/**
|
349 |
-
*
|
350 |
-
*
|
351 |
-
* @codeCoverageIgnore
|
352 |
*
|
353 |
-
* @since
|
354 |
* @access public
|
355 |
-
* @param string $key The option key to retrieve.
|
356 |
-
* @return bool
|
357 |
*/
|
358 |
-
|
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
|
|
|
370 |
*
|
371 |
* @codeCoverageIgnore
|
372 |
*
|
373 |
* @since 1.0.0
|
|
|
374 |
* @access public
|
375 |
-
*
|
376 |
-
* @param
|
|
|
|
|
377 |
* @return mixed
|
378 |
*/
|
379 |
-
final public function
|
380 |
-
|
|
|
|
|
|
|
|
|
381 |
}
|
382 |
|
383 |
/**
|
384 |
-
*
|
385 |
*
|
386 |
-
* @
|
|
|
|
|
387 |
* @access public
|
|
|
388 |
*/
|
389 |
-
public function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
|
391 |
/**
|
392 |
-
*
|
393 |
*
|
394 |
-
* @since
|
395 |
* @access public
|
|
|
396 |
*/
|
397 |
-
public function
|
398 |
|
399 |
/**
|
400 |
-
* Method to
|
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 |
-
*
|
409 |
-
*
|
410 |
-
*
|
|
|
411 |
*/
|
412 |
-
final public function
|
413 |
-
|
414 |
-
$
|
415 |
-
|
416 |
-
|
|
|
|
|
|
|
|
|
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
|
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
|
503 |
-
$sanitized = str_replace( ' ', '-', strtolower( $this->name ) );
|
504 |
-
|
505 |
$module_dir = $this->slug;
|
506 |
-
|
507 |
if ( ! empty( $enqueue ) ) {
|
508 |
-
if ( isset( $enqueue['
|
509 |
$order = 0;
|
510 |
$map = array();
|
511 |
-
foreach ( $enqueue['
|
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 . '/
|
525 |
if ( ! filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
|
526 |
$resource = $url;
|
527 |
}
|
528 |
-
$id = 'obfx-module-' . $prefix . '-
|
529 |
$map[ $file_name ] = $id;
|
530 |
-
|
531 |
-
wp_enqueue_script(
|
532 |
$id,
|
533 |
$resource,
|
534 |
$dependencies,
|
535 |
$this->version,
|
536 |
-
|
537 |
);
|
|
|
|
|
|
|
|
|
|
|
538 |
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
551 |
}
|
552 |
|
553 |
/**
|
554 |
-
* Actually sets the
|
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
|
|
|
|
|
564 |
$module_dir = $this->slug;
|
|
|
565 |
if ( ! empty( $enqueue ) ) {
|
566 |
-
if ( isset( $enqueue['
|
567 |
$order = 0;
|
568 |
$map = array();
|
569 |
-
foreach ( $enqueue['
|
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 . '/
|
583 |
if ( ! filter_var( $url, FILTER_VALIDATE_URL ) === false ) {
|
584 |
$resource = $url;
|
585 |
}
|
586 |
-
$id = 'obfx-module-' . $prefix . '-
|
587 |
$map[ $file_name ] = $id;
|
588 |
-
|
|
|
589 |
$id,
|
590 |
$resource,
|
591 |
$dependencies,
|
592 |
$this->version,
|
593 |
-
|
594 |
);
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
599 |
}
|
600 |
|
601 |
/**
|
602 |
-
* Sets the
|
603 |
*
|
604 |
* @codeCoverageIgnore
|
605 |
*
|
606 |
* @since 1.0.0
|
607 |
* @access public
|
608 |
*/
|
609 |
-
public function
|
610 |
-
$this->
|
611 |
}
|
612 |
|
613 |
/**
|
614 |
-
*
|
615 |
-
*
|
616 |
-
* @codeCoverageIgnore
|
617 |
*
|
618 |
* @since 1.0.0
|
619 |
* @access public
|
|
|
620 |
*/
|
621 |
-
public function
|
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 |
-
*
|
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
|
115 |
-
$
|
116 |
-
if (
|
117 |
-
$
|
118 |
}
|
119 |
|
120 |
-
|
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 $
|
141 |
}
|
142 |
|
143 |
/**
|
144 |
-
* Method to
|
145 |
*
|
146 |
* @since 1.0.0
|
147 |
* @access private
|
148 |
*
|
149 |
-
* @param
|
150 |
*
|
151 |
-
* @return
|
152 |
*/
|
153 |
-
private function
|
154 |
-
$
|
155 |
-
if ( $
|
156 |
-
$
|
157 |
}
|
158 |
|
159 |
-
return $
|
160 |
}
|
161 |
|
162 |
/**
|
@@ -196,50 +235,42 @@ class Orbit_Fox_Render_Helper {
|
|
196 |
}
|
197 |
|
198 |
/**
|
199 |
-
*
|
200 |
*
|
201 |
* @since 1.0.0
|
202 |
* @access private
|
203 |
*
|
204 |
-
* @param string $
|
205 |
-
* @param string $
|
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
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
}
|
220 |
|
221 |
/**
|
222 |
-
*
|
223 |
*
|
224 |
* @since 1.0.0
|
225 |
* @access private
|
226 |
*
|
227 |
-
* @param
|
228 |
-
* @param bool $is_email Render an email input instead of text.
|
229 |
*
|
230 |
-
* @return
|
231 |
*/
|
232 |
-
private function
|
233 |
-
$
|
234 |
-
if ( $
|
235 |
-
$
|
236 |
}
|
237 |
|
238 |
-
|
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 |
-
|
382 |
-
|
383 |
|
384 |
$field = $this->wrap_element( $option, $field );
|
385 |
|
@@ -387,51 +461,24 @@ class Orbit_Fox_Render_Helper {
|
|
387 |
}
|
388 |
|
389 |
/**
|
390 |
-
*
|
391 |
*
|
392 |
* @since 1.0.0
|
393 |
-
* @access
|
394 |
*
|
395 |
-
* @param array $option The option from the module
|
|
|
396 |
*
|
397 |
* @return mixed
|
398 |
*/
|
399 |
-
|
|
|
400 |
|
401 |
-
$
|
402 |
-
|
403 |
-
|
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 |
-
$
|
38 |
$disabled_fields = 'disabled';
|
39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
?>
|
41 |
-
<div id="obfx-mod-<?php echo $slug; ?>" class="panel options" <?php echo $
|
42 |
<div class="panel-header">
|
43 |
-
<button class="btn btn-action circle btn-expand
|
|
|
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; ?>"
|
62 |
-
|
|
|
|
|
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.
|
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
|
718 |
}
|
719 |
|
720 |
-
.obfx-wrapper .btn.btn-success:focus
|
721 |
-
|
722 |
border-color: #2da23c;
|
723 |
-
color: #fff
|
|
|
724 |
}
|
725 |
|
726 |
-
.obfx-wrapper .btn.btn-success.active
|
727 |
-
|
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
|
745 |
}
|
746 |
|
747 |
-
.obfx-wrapper .btn.btn-error:focus
|
748 |
-
|
749 |
border-color: #cf4d00;
|
750 |
-
color: #fff
|
|
|
751 |
}
|
752 |
|
753 |
-
.obfx-wrapper .btn.btn-error.active
|
754 |
-
|
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(
|
3640 |
-
-ms-transform: rotate(
|
3641 |
-
transform: rotate(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3642 |
}
|
3643 |
|
3644 |
.obfx-wrapper .panel.options {
|
3645 |
overflow: hidden;
|
3646 |
-
height:
|
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(
|
54 |
-
|
55 |
-
|
56 |
-
|
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 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
} else {
|
94 |
-
$( modulePanel ).find( '.btn-expand' ).click();
|
95 |
-
scrollToAnchor( modulePanel );
|
96 |
-
}
|
97 |
} else {
|
98 |
-
$( modulePanel ).
|
99 |
-
|
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 |
-
|
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 |
-
|
154 |
} else {
|
155 |
$( this ).addClass( 'active' );
|
156 |
-
$( this ).closest( '.panel.
|
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.
|
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.
|
6 |
"Report-Msgid-Bugs-To: https://github.com/Codeinwp/orbit-fox/issues\n"
|
7 |
-
"POT-Creation-Date: 2018-
|
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 |
-
#:
|
29 |
msgid "1"
|
30 |
msgstr ""
|
31 |
|
@@ -45,7 +45,7 @@ msgstr ""
|
|
45 |
msgid "5"
|
46 |
msgstr ""
|
47 |
|
48 |
-
#:
|
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:
|
65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
msgid "Could not process the request!"
|
67 |
msgstr ""
|
68 |
|
69 |
-
#: core/app/class-orbit-fox-admin.php:
|
70 |
msgid "No module found! No data was updated."
|
71 |
msgstr ""
|
72 |
|
73 |
-
#: core/app/class-orbit-fox-admin.php:
|
74 |
msgid "Something went wrong, data might not be saved!"
|
75 |
msgstr ""
|
76 |
|
77 |
-
#: core/app/class-orbit-fox-admin.php:
|
78 |
msgid "Options updated, successfully!"
|
79 |
msgstr ""
|
80 |
|
81 |
-
#: core/app/class-orbit-fox-admin.php:
|
82 |
msgid "No module found!"
|
83 |
msgstr ""
|
84 |
|
85 |
-
#: core/app/class-orbit-fox-admin.php:
|
86 |
msgid "Something went wrong, can not change module status!"
|
87 |
msgstr ""
|
88 |
|
89 |
-
#: core/app/class-orbit-fox-admin.php:
|
90 |
msgid "Module status changed!"
|
91 |
msgstr ""
|
92 |
|
93 |
-
#: core/app/class-orbit-fox-admin.php:
|
94 |
msgid "No modules found."
|
95 |
msgstr ""
|
96 |
|
97 |
-
#: core/app/class-orbit-fox-admin.php:
|
98 |
msgid "Please contact support for more help."
|
99 |
msgstr ""
|
100 |
|
101 |
-
#: core/app/class-orbit-fox-admin.php:
|
102 |
msgid "No active modules."
|
103 |
msgstr ""
|
104 |
|
105 |
-
#: core/app/class-orbit-fox-admin.php:
|
106 |
msgid "Activate a module using the toggles above."
|
107 |
msgstr ""
|
108 |
|
109 |
-
#: core/app/helpers/class-orbit-fox-render-helper.php:
|
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 |
-
|
|
|
|
|
|
|
|
|
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 |
-
#:
|
176 |
-
#:
|
177 |
-
#:
|
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 |
-
#:
|
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 |
-
#:
|
213 |
-
#:
|
214 |
-
#:
|
215 |
-
#:
|
216 |
-
#:
|
217 |
-
#:
|
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 |
-
#:
|
231 |
-
#:
|
232 |
-
#:
|
233 |
-
#:
|
234 |
-
#:
|
235 |
-
#:
|
236 |
msgid "Right"
|
237 |
msgstr ""
|
238 |
|
239 |
#: obfx_modules/beaver-widgets/inc/common-functions.php:64
|
240 |
-
#:
|
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 |
-
#:
|
278 |
-
#:
|
279 |
-
#:
|
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 |
-
|
|
|
301 |
msgstr ""
|
302 |
|
303 |
#: obfx_modules/beaver-widgets/init.php:26
|
304 |
-
|
|
|
|
|
|
|
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 |
-
#:
|
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 |
-
#:
|
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 |
-
#:
|
351 |
-
#:
|
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 |
-
#:
|
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 |
-
#:
|
390 |
-
#:
|
391 |
-
#:
|
392 |
-
#:
|
393 |
-
#:
|
394 |
-
#:
|
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 |
-
#:
|
455 |
-
#:
|
456 |
msgid "Grid"
|
457 |
msgstr ""
|
458 |
|
459 |
#: obfx_modules/beaver-widgets/modules/post-grid/includes/loop-settings.php:206
|
460 |
-
#:
|
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 |
-
#:
|
544 |
-
#:
|
545 |
-
#:
|
546 |
-
#:
|
547 |
-
#:
|
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 |
-
#:
|
604 |
-
#:
|
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 |
-
#:
|
630 |
msgid "Display"
|
631 |
msgstr ""
|
632 |
|
633 |
#: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:208
|
634 |
-
#:
|
635 |
-
#:
|
636 |
-
#:
|
|
|
637 |
msgid "Category"
|
638 |
msgstr ""
|
639 |
|
640 |
#: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:209
|
641 |
-
#:
|
642 |
msgid "Tags"
|
643 |
msgstr ""
|
644 |
|
645 |
#: obfx_modules/beaver-widgets/modules/post-grid/post-grid.php:210
|
646 |
-
#:
|
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 |
-
#:
|
676 |
-
#:
|
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 |
-
#:
|
709 |
-
#:
|
710 |
-
#:
|
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 |
-
#:
|
725 |
-
#:
|
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 |
-
#:
|
732 |
-
#:
|
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 |
-
#:
|
739 |
-
#:
|
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 |
-
#:
|
746 |
-
#:
|
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 |
-
#:
|
753 |
-
#:
|
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 |
-
#:
|
760 |
-
#:
|
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/
|
767 |
-
#: obfx_modules/
|
|
|
|
|
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 |
-
#:
|
781 |
-
#:
|
782 |
msgid "Price Tag"
|
783 |
msgstr ""
|
784 |
|
785 |
#: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:107
|
786 |
-
#:
|
787 |
-
#:
|
788 |
-
#:
|
789 |
-
#:
|
790 |
-
#:
|
791 |
msgid "Price"
|
792 |
msgstr ""
|
793 |
|
794 |
#: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:116
|
795 |
-
#:
|
796 |
-
#:
|
797 |
-
#:
|
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 |
-
#:
|
807 |
-
#:
|
808 |
msgid "Before"
|
809 |
msgstr ""
|
810 |
|
811 |
#: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:129
|
812 |
-
#:
|
813 |
-
#:
|
814 |
msgid "After"
|
815 |
msgstr ""
|
816 |
|
817 |
#: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:134
|
818 |
-
#:
|
819 |
-
#:
|
820 |
msgid "Period"
|
821 |
msgstr ""
|
822 |
|
823 |
#: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:135
|
824 |
-
#:
|
825 |
-
#:
|
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 |
-
#:
|
837 |
-
#:
|
838 |
-
#:
|
839 |
-
#:
|
840 |
-
#:
|
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 |
-
#:
|
847 |
-
#:
|
848 |
-
#:
|
849 |
-
#:
|
850 |
-
#:
|
851 |
msgid "Button"
|
852 |
msgstr ""
|
853 |
|
854 |
#: obfx_modules/beaver-widgets/modules/pricing-table/pricing-table.php:160
|
855 |
-
#:
|
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 |
-
#:
|
901 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
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 |
-
#:
|
910 |
-
#:
|
911 |
-
#:
|
912 |
-
#:
|
913 |
-
#:
|
914 |
-
#:
|
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 |
-
#:
|
999 |
-
#:
|
1000 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
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 |
-
#:
|
1034 |
-
#:
|
1035 |
-
#:
|
1036 |
-
#:
|
1037 |
msgid "Icon"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
#: obfx_modules/beaver-widgets/modules/services/services.php:31
|
1041 |
-
#: obfx_modules/
|
1042 |
-
#: obfx_modules/
|
1043 |
-
#:
|
|
|
|
|
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 |
-
#:
|
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 |
-
#:
|
1080 |
-
#:
|
1081 |
-
#:
|
1082 |
-
#:
|
1083 |
msgid "Alignment"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
#: obfx_modules/beaver-widgets/modules/services/services.php:247
|
1087 |
-
#:
|
1088 |
msgid "Link to"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: obfx_modules/companion-legacy/inc/
|
1092 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: obfx_modules/companion-legacy/inc/
|
1096 |
-
|
|
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: obfx_modules/companion-legacy/inc/
|
1100 |
-
|
|
|
|
|
|
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: obfx_modules/companion-legacy/inc/
|
1104 |
-
|
|
|
1105 |
msgstr ""
|
1106 |
|
1107 |
-
#: obfx_modules/companion-legacy/inc/
|
1108 |
-
|
|
|
|
|
|
|
1109 |
msgstr ""
|
1110 |
|
1111 |
-
#: obfx_modules/companion-legacy/inc/
|
1112 |
-
|
|
|
1113 |
msgstr ""
|
1114 |
|
1115 |
-
#: obfx_modules/companion-legacy/inc/
|
1116 |
-
|
|
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: obfx_modules/companion-legacy/inc/
|
1120 |
-
|
|
|
|
|
|
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: obfx_modules/companion-legacy/inc/
|
1124 |
-
|
|
|
|
|
|
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: obfx_modules/companion-legacy/inc/
|
1128 |
-
|
|
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: obfx_modules/companion-legacy/inc/
|
1132 |
-
|
|
|
|
|
|
|
|
|
|
|
1133 |
msgstr ""
|
1134 |
|
1135 |
-
#: obfx_modules/companion-legacy/inc/
|
1136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1137 |
msgstr ""
|
1138 |
|
1139 |
-
#: obfx_modules/companion-legacy/inc/
|
1140 |
-
|
|
|
1141 |
msgstr ""
|
1142 |
|
1143 |
-
#: obfx_modules/companion-legacy/inc/
|
1144 |
-
|
|
|
1145 |
msgstr ""
|
1146 |
|
1147 |
-
#: obfx_modules/companion-legacy/inc/
|
1148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1149 |
msgstr ""
|
1150 |
|
1151 |
-
#: obfx_modules/companion-legacy/inc/
|
1152 |
-
|
|
|
|
|
|
|
1153 |
msgstr ""
|
1154 |
|
1155 |
-
#: obfx_modules/companion-legacy/inc/
|
1156 |
-
|
|
|
|
|
|
|
|
|
|
|
1157 |
msgstr ""
|
1158 |
|
1159 |
-
#: obfx_modules/companion-legacy/inc/
|
1160 |
-
|
|
|
|
|
|
|
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:
|
1181 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:
|
1182 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:
|
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:
|
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:
|
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 |
-
#:
|
1228 |
-
#:
|
1229 |
-
#:
|
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:
|
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:
|
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 |
-
#:
|
1281 |
-
#:
|
1282 |
-
#:
|
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:
|
1321 |
msgid "Responsive"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:
|
1325 |
msgid "Quality"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-features-section.php:
|
1329 |
msgid "Support"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
1333 |
msgid "Desmond Purpleson"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
1337 |
msgid "CEO"
|
1338 |
msgstr ""
|
1339 |
|
1340 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
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:
|
1347 |
msgid "Parsley Pepperspray"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
1351 |
msgid "Marketing Specialist"
|
1352 |
msgstr ""
|
1353 |
|
1354 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
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:
|
1361 |
msgid "Desmond Eagle"
|
1362 |
msgstr ""
|
1363 |
|
1364 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
1365 |
msgid "Graphic Designer"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
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:
|
1375 |
msgid "Ruby Von Rails"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
1379 |
msgid "Lead Developer"
|
1380 |
msgstr ""
|
1381 |
|
1382 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-team-section.php:
|
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:
|
1389 |
msgid "Inverness McKenzie"
|
1390 |
msgstr ""
|
1391 |
|
1392 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:
|
1393 |
msgid "Business Owner"
|
1394 |
msgstr ""
|
1395 |
|
1396 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:
|
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:
|
1404 |
msgid "Hanson Deck"
|
1405 |
msgstr ""
|
1406 |
|
1407 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:
|
1408 |
msgid "Independent Artist"
|
1409 |
msgstr ""
|
1410 |
|
1411 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:
|
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:
|
1419 |
msgid "Natalya Undergrowth"
|
1420 |
msgstr ""
|
1421 |
|
1422 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:
|
1423 |
msgid "Freelancer"
|
1424 |
msgstr ""
|
1425 |
|
1426 |
-
#: obfx_modules/companion-legacy/inc/hestia/inc/sections/hestia-testimonials-section.php:
|
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:
|
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 |
-
#:
|
1601 |
-
#:
|
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 |
-
#:
|
1635 |
-
#:
|
1636 |
-
#:
|
1637 |
-
#:
|
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:
|
1717 |
msgid "%s enhancements "
|
1718 |
msgstr ""
|
1719 |
|
1720 |
-
#: obfx_modules/companion-legacy/init.php:
|
1721 |
msgid "Module containing frontpage improvements for %s theme."
|
1722 |
msgstr ""
|
1723 |
|
1724 |
-
#: obfx_modules/companion-legacy/init.php:
|
1725 |
msgid "Search icon"
|
1726 |
msgstr ""
|
1727 |
|
1728 |
-
#: obfx_modules/companion-legacy/init.php:
|
1729 |
msgid "All Icons"
|
1730 |
msgstr ""
|
1731 |
|
1732 |
-
#: obfx_modules/
|
1733 |
-
msgid "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1734 |
msgstr ""
|
1735 |
|
1736 |
-
#: obfx_modules/
|
1737 |
-
msgid "
|
|
|
|
|
1738 |
msgstr ""
|
1739 |
|
1740 |
-
#:
|
1741 |
#: vendor/codeinwp/themeisle-content-forms/class-content-form-base.php:170
|
1742 |
msgid "Orbit Fox Addons"
|
1743 |
msgstr ""
|
1744 |
|
1745 |
-
#:
|
1746 |
msgid "Post Type Grid"
|
1747 |
msgstr ""
|
1748 |
|
1749 |
-
#:
|
1750 |
-
#:
|
1751 |
msgid "Grid Options"
|
1752 |
msgstr ""
|
1753 |
|
1754 |
-
#:
|
1755 |
msgid "Style"
|
1756 |
msgstr ""
|
1757 |
|
1758 |
-
#:
|
1759 |
-
#:
|
1760 |
-
#:
|
1761 |
msgid "Items"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
-
#:
|
1765 |
msgid "How many items?"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
-
#:
|
1769 |
-
#:
|
1770 |
msgid "Columns"
|
1771 |
msgstr ""
|
1772 |
|
1773 |
-
#:
|
1774 |
msgid "Order by"
|
1775 |
msgstr ""
|
1776 |
|
1777 |
-
#:
|
1778 |
msgid "Modified date"
|
1779 |
msgstr ""
|
1780 |
|
1781 |
-
#:
|
1782 |
msgid "Comment count"
|
1783 |
msgstr ""
|
1784 |
|
1785 |
-
#:
|
1786 |
-
#:
|
1787 |
-
#:
|
1788 |
msgid "Pagination"
|
1789 |
msgstr ""
|
1790 |
|
1791 |
-
#:
|
1792 |
-
#:
|
1793 |
-
#:
|
1794 |
-
#:
|
1795 |
msgid "Hide"
|
1796 |
msgstr ""
|
1797 |
|
1798 |
-
#:
|
1799 |
msgid "Image height"
|
1800 |
msgstr ""
|
1801 |
|
1802 |
-
#:
|
1803 |
msgid "Tag"
|
1804 |
msgstr ""
|
1805 |
|
1806 |
-
#:
|
1807 |
-
#:
|
1808 |
msgid "Meta"
|
1809 |
msgstr ""
|
1810 |
|
1811 |
-
#:
|
1812 |
msgid "No. of Categories"
|
1813 |
msgstr ""
|
1814 |
|
1815 |
-
#:
|
1816 |
msgid "How many categories to display?"
|
1817 |
msgstr ""
|
1818 |
|
1819 |
-
#:
|
1820 |
msgid "No. of Tags"
|
1821 |
msgstr ""
|
1822 |
|
1823 |
-
#:
|
1824 |
msgid "How many tags to display?"
|
1825 |
msgstr ""
|
1826 |
|
1827 |
-
#:
|
1828 |
msgid "Remove icons"
|
1829 |
msgstr ""
|
1830 |
|
1831 |
-
#:
|
|
|
|
|
|
|
|
|
1832 |
msgid "Length (words)"
|
1833 |
msgstr ""
|
1834 |
|
1835 |
-
#:
|
1836 |
msgid "Length of content (words)"
|
1837 |
msgstr ""
|
1838 |
|
1839 |
-
#:
|
1840 |
msgid "Button alignment"
|
1841 |
msgstr ""
|
1842 |
|
1843 |
-
#:
|
1844 |
-
#:
|
1845 |
msgid "Justified"
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#:
|
1849 |
-
#:
|
1850 |
msgid "Columns margin"
|
1851 |
msgstr ""
|
1852 |
|
1853 |
-
#:
|
1854 |
-
#:
|
1855 |
msgid "Rows margin"
|
1856 |
msgstr ""
|
1857 |
|
1858 |
-
#:
|
1859 |
-
#:
|
1860 |
-
#:
|
1861 |
-
#:
|
1862 |
msgid "Border Radius"
|
1863 |
msgstr ""
|
1864 |
|
1865 |
-
#:
|
1866 |
-
#:
|
1867 |
-
#:
|
1868 |
-
#:
|
1869 |
-
#:
|
1870 |
-
#:
|
1871 |
msgid "Margin"
|
1872 |
msgstr ""
|
1873 |
|
1874 |
-
#:
|
1875 |
-
#:
|
1876 |
-
#:
|
1877 |
-
#:
|
1878 |
msgid "Text Color"
|
1879 |
msgstr ""
|
1880 |
|
1881 |
-
#:
|
1882 |
-
#:
|
1883 |
-
#:
|
1884 |
-
#:
|
1885 |
msgid "Background Color"
|
1886 |
msgstr ""
|
1887 |
|
1888 |
-
#:
|
1889 |
-
#:
|
1890 |
-
#:
|
1891 |
msgid "Hover"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
-
#:
|
1895 |
msgid "Button padding"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
-
#:
|
1899 |
msgid "Button border radius"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1903 |
msgid "No reviews"
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#:
|
1907 |
msgid "1 review"
|
1908 |
msgstr ""
|
1909 |
|
1910 |
-
#:
|
1911 |
msgid "% reviews"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
-
#:
|
1915 |
msgid "No comments"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#:
|
1919 |
msgid "1 comment"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#:
|
1923 |
msgid "% comments"
|
1924 |
msgstr ""
|
1925 |
|
1926 |
-
#:
|
1927 |
-
msgid "
|
1928 |
msgstr ""
|
1929 |
|
1930 |
-
#:
|
1931 |
-
msgid "
|
1932 |
msgstr ""
|
1933 |
|
1934 |
-
#:
|
1935 |
msgid "Pricing Table"
|
1936 |
msgstr ""
|
1937 |
|
1938 |
-
#:
|
1939 |
msgid "Plan Title"
|
1940 |
msgstr ""
|
1941 |
|
1942 |
-
#:
|
1943 |
msgid "Pricing Plan"
|
1944 |
msgstr ""
|
1945 |
|
1946 |
-
#:
|
1947 |
msgid "Title HTML tag"
|
1948 |
msgstr ""
|
1949 |
|
1950 |
-
#:
|
1951 |
msgid "Subtitle HTML Tag"
|
1952 |
msgstr ""
|
1953 |
|
1954 |
-
#:
|
1955 |
msgid "$"
|
1956 |
msgstr ""
|
1957 |
|
1958 |
-
#:
|
1959 |
msgid "Currency Position"
|
1960 |
msgstr ""
|
1961 |
|
1962 |
-
#:
|
1963 |
-
#:
|
1964 |
-
#:
|
1965 |
msgid "Plan Features"
|
1966 |
msgstr ""
|
1967 |
|
1968 |
-
#:
|
1969 |
msgid "First"
|
1970 |
msgstr ""
|
1971 |
|
1972 |
-
#:
|
1973 |
msgid "Second"
|
1974 |
msgstr ""
|
1975 |
|
1976 |
-
#:
|
1977 |
msgid "Third"
|
1978 |
msgstr ""
|
1979 |
|
1980 |
-
#:
|
1981 |
msgid "Accented Text"
|
1982 |
msgstr ""
|
1983 |
|
1984 |
-
#:
|
1985 |
msgid "Appears before feature text"
|
1986 |
msgstr ""
|
1987 |
|
1988 |
-
#:
|
1989 |
msgid "Accent"
|
1990 |
msgstr ""
|
1991 |
|
1992 |
-
#:
|
1993 |
-
#:
|
1994 |
msgid "Buy Now"
|
1995 |
msgstr ""
|
1996 |
|
1997 |
-
#:
|
1998 |
-
#:
|
1999 |
msgid "https://example.com"
|
2000 |
msgstr ""
|
2001 |
|
2002 |
-
#:
|
2003 |
-
#:
|
2004 |
msgid "Icon Position"
|
2005 |
msgstr ""
|
2006 |
|
2007 |
-
#:
|
2008 |
-
#:
|
2009 |
msgid "Icon Spacing"
|
2010 |
msgstr ""
|
2011 |
|
2012 |
-
#:
|
2013 |
msgid "Header"
|
2014 |
msgstr ""
|
2015 |
|
2016 |
-
#:
|
2017 |
msgid "Header Padding"
|
2018 |
msgstr ""
|
2019 |
|
2020 |
-
#:
|
2021 |
msgid "Title Color"
|
2022 |
msgstr ""
|
2023 |
|
2024 |
-
#:
|
2025 |
msgid "Subtitle Color"
|
2026 |
msgstr ""
|
2027 |
|
2028 |
-
#:
|
2029 |
-
#:
|
2030 |
-
#:
|
2031 |
-
#:
|
2032 |
msgid "Section Background"
|
2033 |
msgstr ""
|
2034 |
|
2035 |
-
#:
|
2036 |
msgid "Price Box Padding"
|
2037 |
msgstr ""
|
2038 |
|
2039 |
-
#:
|
2040 |
msgid "Currency Color"
|
2041 |
msgstr ""
|
2042 |
|
2043 |
-
#:
|
2044 |
msgid "Price Color"
|
2045 |
msgstr ""
|
2046 |
|
2047 |
-
#:
|
2048 |
msgid "Period Color"
|
2049 |
msgstr ""
|
2050 |
|
2051 |
-
#:
|
2052 |
msgid "Features List Padding"
|
2053 |
msgstr ""
|
2054 |
|
2055 |
-
#:
|
2056 |
msgid "Accented"
|
2057 |
msgstr ""
|
2058 |
|
2059 |
-
#:
|
2060 |
msgid "Accented Color"
|
2061 |
msgstr ""
|
2062 |
|
2063 |
-
#:
|
2064 |
msgid "Features Color"
|
2065 |
msgstr ""
|
2066 |
|
2067 |
-
#:
|
2068 |
msgid "Icons"
|
2069 |
msgstr ""
|
2070 |
|
2071 |
-
#:
|
2072 |
-
#:
|
2073 |
msgid "Icon Color"
|
2074 |
msgstr ""
|
2075 |
|
2076 |
-
#:
|
2077 |
-
#:
|
2078 |
msgid "Transition Duration"
|
2079 |
msgstr ""
|
2080 |
|
2081 |
-
#:
|
2082 |
msgid "Award-Winning"
|
2083 |
msgstr ""
|
2084 |
|
2085 |
-
#:
|
2086 |
-
#:
|
2087 |
-
#:
|
2088 |
msgid "Add some text here to describe your services to the page visitors."
|
2089 |
msgstr ""
|
2090 |
|
2091 |
-
#:
|
2092 |
msgid "Professional"
|
2093 |
msgstr ""
|
2094 |
|
2095 |
-
#:
|
2096 |
msgid "Consulting"
|
2097 |
msgstr ""
|
2098 |
|
2099 |
-
#:
|
2100 |
msgid "Title & Description"
|
2101 |
msgstr ""
|
2102 |
|
2103 |
-
#:
|
2104 |
msgid "Service Title"
|
2105 |
msgstr ""
|
2106 |
|
2107 |
-
#:
|
2108 |
msgid "Icon / Image"
|
2109 |
msgstr ""
|
2110 |
|
2111 |
-
#:
|
2112 |
-
#:
|
2113 |
msgid "Spacing"
|
2114 |
msgstr ""
|
2115 |
|
2116 |
-
#:
|
2117 |
-
msgid "
|
|
|
|
|
2118 |
msgstr ""
|
2119 |
|
2120 |
-
#:
|
2121 |
-
msgid "
|
2122 |
msgstr ""
|
2123 |
|
2124 |
-
#:
|
2125 |
-
msgid "
|
2126 |
msgstr ""
|
2127 |
|
2128 |
-
#:
|
2129 |
-
#:
|
2130 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2131 |
msgstr ""
|
2132 |
|
2133 |
-
#:
|
2134 |
-
|
|
|
|
|
|
|
|
|
2135 |
msgstr ""
|
2136 |
|
2137 |
-
#:
|
2138 |
-
|
|
|
|
|
|
|
|
|
|
|
2139 |
msgstr ""
|
2140 |
|
2141 |
-
#:
|
2142 |
-
|
2143 |
-
|
2144 |
-
|
2145 |
-
msgid "Image failed to upload"
|
2146 |
msgstr ""
|
2147 |
|
2148 |
-
#:
|
2149 |
-
msgid "
|
2150 |
msgstr ""
|
2151 |
|
2152 |
-
#:
|
2153 |
-
msgid "
|
2154 |
msgstr ""
|
2155 |
|
2156 |
-
#:
|
2157 |
-
msgid "
|
|
|
|
|
2158 |
msgstr ""
|
2159 |
|
2160 |
-
#:
|
2161 |
-
msgid "
|
2162 |
msgstr ""
|
2163 |
|
2164 |
-
#:
|
2165 |
-
msgid "
|
2166 |
msgstr ""
|
2167 |
|
2168 |
-
#:
|
2169 |
-
msgid "
|
|
|
|
|
2170 |
msgstr ""
|
2171 |
|
2172 |
-
#:
|
2173 |
-
msgid "
|
2174 |
msgstr ""
|
2175 |
|
2176 |
-
#:
|
2177 |
-
msgid "
|
2178 |
msgstr ""
|
2179 |
|
2180 |
-
#:
|
2181 |
-
msgid "
|
2182 |
msgstr ""
|
2183 |
|
2184 |
-
#:
|
2185 |
-
msgid "
|
|
|
|
|
2186 |
msgstr ""
|
2187 |
|
2188 |
-
#:
|
2189 |
-
msgid "
|
2190 |
msgstr ""
|
2191 |
|
2192 |
-
#:
|
|
|
|
|
|
|
|
|
2193 |
msgid ""
|
2194 |
-
"
|
2195 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2196 |
msgstr ""
|
2197 |
|
2198 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2199 |
msgid "A new Orbit Fox Template"
|
2200 |
msgstr ""
|
2201 |
|
2202 |
-
#:
|
2203 |
msgid "This is an awesome Orbit Fox Template."
|
2204 |
msgstr ""
|
2205 |
|
2206 |
-
#:
|
2207 |
msgid "Elementor Page Builder"
|
2208 |
msgstr ""
|
2209 |
|
2210 |
-
#:
|
2211 |
msgid "About Our Business"
|
2212 |
msgstr ""
|
2213 |
|
2214 |
-
#:
|
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 |
-
#:
|
2223 |
msgid "Contact Us"
|
2224 |
msgstr ""
|
2225 |
|
2226 |
-
#:
|
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 |
-
#:
|
2235 |
msgid "Pricing"
|
2236 |
msgstr ""
|
2237 |
|
2238 |
-
#:
|
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 |
-
#:
|
2247 |
msgid "Material Homepage"
|
2248 |
msgstr ""
|
2249 |
|
2250 |
-
#:
|
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 |
-
#:
|
2259 |
msgid "Ether - Landing Page"
|
2260 |
msgstr ""
|
2261 |
|
2262 |
-
#:
|
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 |
-
#:
|
2271 |
msgid "Jason - Landing Page"
|
2272 |
msgstr ""
|
2273 |
|
2274 |
-
#:
|
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 |
-
#:
|
2283 |
msgid "Pulse - Landing Page"
|
2284 |
msgstr ""
|
2285 |
|
2286 |
-
#:
|
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 |
-
#:
|
2296 |
msgid "Ascend - Landing Page"
|
2297 |
msgstr ""
|
2298 |
|
2299 |
-
#:
|
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 |
-
#:
|
2308 |
msgid "Path - Landing Page"
|
2309 |
msgstr ""
|
2310 |
|
2311 |
-
#:
|
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 |
-
#:
|
2319 |
msgid "Mocha - Landing Page"
|
2320 |
msgstr ""
|
2321 |
|
2322 |
-
#:
|
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 |
-
#:
|
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 |
-
#:
|
2340 |
msgid "Install and activate"
|
2341 |
msgstr ""
|
2342 |
|
2343 |
-
#:
|
|
|
|
|
|
|
|
|
2344 |
msgid "More Details"
|
2345 |
msgstr ""
|
2346 |
|
2347 |
-
#:
|
2348 |
msgid "Preview"
|
2349 |
msgstr ""
|
2350 |
|
2351 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2352 |
msgid "Collapse"
|
2353 |
msgstr ""
|
2354 |
|
2355 |
-
#: vendor/codeinwp/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
2361 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
2362 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
2363 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
2364 |
msgid "Field"
|
2365 |
msgstr ""
|
2366 |
|
2367 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
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:
|
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:
|
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:
|
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:
|
2391 |
msgid "Is required?"
|
2392 |
msgstr ""
|
2393 |
|
2394 |
-
#: vendor/codeinwp/themeisle-content-forms/beaver/class-themeisle-content-forms-beaver-base.php:
|
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:
|
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:
|
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:
|
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’ 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 "
|
|
|
|
|
|
|
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’ huh?"
|
2099 |
+
msgstr ""
|
2100 |
+
|
2101 |
+
#: obfx_modules/image-cdn/init.php:43
|
2102 |
+
msgid "Image Optimization & 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>©</sup> there is a visual difference of %1$s "
|
2288 |
+
"% 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>©</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,
|
39 |
-
|
|
|
40 |
}
|
41 |
|
42 |
.services-wrap > .service-box {
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
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 |
-
|
147 |
-
-o-transition: all .2s ease;
|
148 |
-
transition: all .2s ease;
|
149 |
}
|
150 |
|
151 |
.testimonials-box .feedback {
|
|
|
|
|
152 |
padding: 145px 0 40px 0;
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
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 |
-
|
165 |
}
|
166 |
|
167 |
.galcolumn .testimonials-box {
|
@@ -169,33 +163,35 @@
|
|
169 |
}
|
170 |
|
171 |
.testimonials-wrap > .testimonials-box {
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
}
|
177 |
|
178 |
.testimonials-wrap > .testimonials-box:nth-child(3n+1) {
|
179 |
-
|
180 |
-
|
181 |
}
|
182 |
|
183 |
.testimonials-wrap > .testimonials-box:nth-child(3n) {
|
184 |
-
|
185 |
-
|
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 |
-
|
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: #
|
208 |
}
|
209 |
|
210 |
.team .dark-text {
|
211 |
-
color: #
|
212 |
}
|
213 |
|
214 |
.team-member {
|
215 |
-
margin-bottom: 25px;
|
216 |
-
position: relative;
|
217 |
overflow: hidden;
|
|
|
218 |
min-height: 100px;
|
219 |
-
-
|
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 |
-
|
275 |
-
width: 183px;
|
276 |
bottom: 100%;
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
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: #
|
289 |
}
|
290 |
|
291 |
.team-member-wrap {
|
@@ -293,13 +283,13 @@
|
|
293 |
}
|
294 |
|
295 |
.team-member-wrap .team-member-box {
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
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 |
-
|
322 |
-
|
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,
|
35 |
-
|
|
|
36 |
}
|
37 |
|
38 |
.services-wrap > .service-box {
|
39 |
-
|
40 |
margin: 0 1%;
|
41 |
-
|
42 |
-
|
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 |
-
|
143 |
-
-o-transition: all .2s ease;
|
144 |
-
transition: all .2s ease;
|
145 |
}
|
146 |
|
147 |
.testimonials-box .feedback {
|
|
|
|
|
148 |
padding: 145px 0 40px 0;
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
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 |
-
|
161 |
}
|
162 |
|
163 |
.galcolumn .testimonials-box {
|
@@ -165,33 +158,35 @@
|
|
165 |
}
|
166 |
|
167 |
.testimonials-wrap > .testimonials-box {
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
}
|
173 |
|
174 |
.testimonials-wrap > .testimonials-box:nth-child(3n+1) {
|
175 |
-
|
176 |
-
|
177 |
}
|
178 |
|
179 |
.testimonials-wrap > .testimonials-box:nth-child(3n) {
|
180 |
-
|
181 |
-
|
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 |
-
|
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: #
|
204 |
}
|
205 |
|
206 |
.team .dark-text {
|
207 |
-
color: #
|
208 |
}
|
209 |
|
210 |
.team-member {
|
211 |
-
margin-bottom: 25px;
|
212 |
-
position: relative;
|
213 |
overflow: hidden;
|
|
|
214 |
min-height: 100px;
|
215 |
-
-
|
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 |
-
|
271 |
-
width: 183px;
|
272 |
bottom: 100%;
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
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: #
|
285 |
}
|
286 |
|
287 |
.team-member-wrap {
|
@@ -289,13 +278,13 @@
|
|
289 |
}
|
290 |
|
291 |
.team-member-wrap .team-member-box {
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
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 |
-
|
318 |
-
|
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 |
-
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
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’ 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’ 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’ 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’ 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 & 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 |
-
|
87 |
-
|
88 |
-
|
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>©</sup> there is a visual difference of %1$s % 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>©</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 ↑</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>©</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.
|
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://
|
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://
|
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.
|
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://
|
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://
|
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://
|
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.
|
19 |
* Author: Themeisle
|
20 |
-
* Author URI: https://
|
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":"
|
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
|
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.
|
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.
|
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'
|
912 |
-
'{{WRAPPER}} .obfx-grid-title a'
|
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 |
-
|
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 |
-
|
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.
|
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
|
|
|
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 |
-
|
531 |
-
|
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 |
-
//
|
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 |
-
|
622 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
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.
|
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
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit2632701c6aff231cecb23eb39f42cf86
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
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 |
-
|
46 |
}
|
47 |
|
48 |
return $loader;
|
49 |
}
|
50 |
}
|
51 |
|
52 |
-
function
|
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": "
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/
|
14 |
-
"reference": "
|
15 |
"shasum": ""
|
16 |
},
|
17 |
-
"time": "2018-
|
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": "
|
50 |
},
|
51 |
"dist": {
|
52 |
"type": "zip",
|
53 |
-
"url": "https://api.github.com/repos/Codeinwp/elementor-extra-widgets/zipball/
|
54 |
-
"reference": "
|
55 |
"shasum": ""
|
56 |
},
|
57 |
-
"time": "2018-
|
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": "
|
123 |
},
|
124 |
"dist": {
|
125 |
"type": "zip",
|
126 |
-
"url": "https://api.github.com/repos/Codeinwp/templates-directory/zipball/
|
127 |
-
"reference": "
|
128 |
"shasum": ""
|
129 |
},
|
130 |
"require": {
|
131 |
"codeinwp/full-width-page-templates": "master"
|
132 |
},
|
133 |
-
"time": "2018-
|
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": "
|
163 |
},
|
164 |
"dist": {
|
165 |
"type": "zip",
|
166 |
-
"url": "https://api.github.com/repos/Codeinwp/themeisle-content-forms/zipball/
|
167 |
-
"reference": "
|
168 |
"shasum": ""
|
169 |
},
|
170 |
-
"time": "2018-
|
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": {
|