Addons for Elementor - Version 2.6.2

Version Description

  • Updated - Readme.txt and documentation
  • Removed - Unused files in plugin folders.
Download this release

Release Info

Developer livemesh
Plugin Icon 128x128 Addons for Elementor
Version 2.6.2
Comparing to
See all releases

Code changes from version 2.6 to 2.6.2

addons-for-elementor.php CHANGED
@@ -2,13 +2,13 @@
2
 
3
  /**
4
  * Plugin Name: Livemesh Addons for Elementor
5
- * Plugin URI: https://www.livemeshthemes.com/elementor-addons
6
  * Description: A collection of premium quality addons or widgets for use in Elementor page builder. Elementor must be installed and activated.
7
  * Author: Livemesh
8
- * Author URI: https://www.livemeshthemes.com/elementor-addons
9
  * License: GPL3
10
  * License URI: https://www.gnu.org/licenses/gpl-3.0.txt
11
- * Version: 2.6
12
  * Text Domain: livemesh-el-addons
13
  * Domain Path: languages
14
  *
@@ -35,7 +35,7 @@ if ( !defined( 'ABSPATH' ) ) {
35
 
36
  if ( !function_exists( 'lae_fs' ) ) {
37
  // Plugin version
38
- define( 'LAE_VERSION', '2.6' );
39
  // Plugin Root File
40
  define( 'LAE_PLUGIN_FILE', __FILE__ );
41
  // Plugin Folder Path
2
 
3
  /**
4
  * Plugin Name: Livemesh Addons for Elementor
5
+ * Plugin URI: https://livemeshelementor.com
6
  * Description: A collection of premium quality addons or widgets for use in Elementor page builder. Elementor must be installed and activated.
7
  * Author: Livemesh
8
+ * Author URI: https://livemeshelementor.com
9
  * License: GPL3
10
  * License URI: https://www.gnu.org/licenses/gpl-3.0.txt
11
+ * Version: 2.6.2
12
  * Text Domain: livemesh-el-addons
13
  * Domain Path: languages
14
  *
35
 
36
  if ( !function_exists( 'lae_fs' ) ) {
37
  // Plugin version
38
+ define( 'LAE_VERSION', '2.6.2' );
39
  // Plugin Root File
40
  define( 'LAE_PLUGIN_FILE', __FILE__ );
41
  // Plugin Folder Path
admin/admin-ajax.php CHANGED
@@ -1,169 +1,169 @@
1
- <?php
2
-
3
- // Exit if accessed directly
4
- if (!defined('ABSPATH')) {
5
- exit;
6
- }
7
-
8
- class LAE_Admin_Ajax {
9
-
10
- // Instance of this class.
11
- protected $plugin_slug = 'livemesh_el_addons';
12
- protected $ajax_data;
13
- protected $ajax_msg;
14
-
15
-
16
- public function __construct() {
17
-
18
- // retrieve all ajax string to localize
19
- $this->localize_strings();
20
- $this->init_hooks();
21
-
22
- }
23
-
24
- public function init_hooks() {
25
-
26
- // Register backend ajax action
27
- add_action('wp_ajax_lae_admin_ajax', array($this, 'lae_admin_ajax'));
28
- // Load admin ajax js script
29
- add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
30
-
31
- }
32
-
33
- public function ajax_response($success = true, $message = null, $content = null) {
34
-
35
- $response = array(
36
- 'success' => $success,
37
- 'message' => $message,
38
- 'content' => $content
39
- );
40
-
41
- return $response;
42
-
43
- }
44
-
45
- public function lae_check_nonce() {
46
-
47
- // retrieve nonce
48
- $nonce = (isset($_POST['nonce'])) ? $_POST['nonce'] : $_GET['nonce'];
49
-
50
- // nonce action for the grid
51
- $action = 'lae_admin_nonce';
52
-
53
- // check ajax nounce
54
- if (!wp_verify_nonce($nonce, $action)) {
55
- // build response
56
- $response = $this->ajax_response(false, __('Sorry, an error occurred. Please refresh the page.', 'livemesh-el-addons'));
57
- // die and send json error response
58
- wp_send_json($response);
59
- }
60
-
61
- }
62
-
63
- public function lae_admin_ajax() {
64
-
65
- // check the nonce
66
- $this->lae_check_nonce();
67
-
68
- // retrieve data
69
- $this->ajax_data = (isset($_POST)) ? $_POST : $_GET;
70
-
71
- // retrieve function
72
- $func = $this->ajax_data['func'];
73
-
74
- switch ($func) {
75
- case 'lae_save_settings':
76
- $response = $this->save_settings_callback();
77
- break;
78
- case 'lae_reset_settings':
79
- $response = $this->save_settings_callback();
80
- break;
81
- default:
82
- $response = ajax_response(false, __('Sorry, an unknown error occurred...', 'livemesh-el-addons'), null);
83
- break;
84
- }
85
-
86
- // send json response and die
87
- wp_send_json($response);
88
-
89
- }
90
-
91
- public function save_settings_callback() {
92
-
93
- // retrieve data from jquery
94
- $setting_data = $this->ajax_data['setting_data'];
95
-
96
- lae_update_options($setting_data);
97
-
98
- $template = false;
99
- // get new restore global settings panel
100
- if ($this->ajax_data['reset']) {
101
- ob_start();
102
- require_once('views/settings.php');
103
- $template = ob_get_clean();
104
- }
105
-
106
- $response = $this->ajax_response(true, $this->ajax_data['reset'], $template);
107
- return $response;
108
-
109
- }
110
-
111
-
112
- public function localize_strings() {
113
-
114
- $this->ajax_msg = array(
115
- 'box_icons' => array(
116
- 'before' => '<i class="lae-info-box-icon dashicons dashicons-admin-generic"></i>',
117
- 'success' => '<i class="lae-info-box-icon dashicons dashicons-yes"></i>',
118
- 'error' => '<i class="lae-info-box-icon dashicons dashicons-no-alt"></i>'
119
- ),
120
- 'box_messages' => array(
121
-
122
- 'lae_save_settings' => array(
123
- 'before' => __('Saving plugin settings', 'livemesh-el-addons'),
124
- 'success' => __('Plugin settings Saved', 'livemesh-el-addons'),
125
- 'error' => __('Sorry, an error occurs while saving settings...', 'livemesh-el-addons')
126
- ),
127
- 'lae_reset_settings' => array(
128
- 'before' => __('Resetting plugin settings', 'livemesh-el-addons'),
129
- 'success' => __('Plugin settings resetted', 'livemesh-el-addons'),
130
- 'error' => __('Sorry, an error occurred while resetting settings', 'livemesh-el-addons')
131
- ),
132
- )
133
- );
134
-
135
- }
136
-
137
- public function admin_nonce() {
138
-
139
- return array(
140
- 'url' => admin_url('admin-ajax.php'),
141
- 'nonce' => wp_create_nonce('lae_admin_nonce')
142
- );
143
-
144
- }
145
-
146
- public function enqueue_admin_scripts() {
147
-
148
- $screen = get_current_screen();
149
-
150
- // enqueue only in grid panel
151
- if (strpos($screen->id, $this->plugin_slug) !== false) {
152
- // merge nonce to translatable strings
153
- $strings = array_merge($this->admin_nonce(), $this->ajax_msg);
154
-
155
- // Use minified libraries if LAE_SCRIPT_DEBUG is turned off
156
- $suffix = (defined('LAE_SCRIPT_DEBUG') && LAE_SCRIPT_DEBUG) ? '' : '.min';
157
-
158
- // register and localize script for ajax methods
159
- wp_register_script('lae-admin-ajax-scripts', LAE_PLUGIN_URL . 'admin/assets/js/lae-admin-ajax' . $suffix . '.js', array(), LAE_VERSION, true);
160
- wp_enqueue_script('lae-admin-ajax-scripts');
161
-
162
- wp_localize_script('lae-admin-ajax-scripts', 'lae_admin_global_var', $strings);
163
-
164
- }
165
- }
166
-
167
- }
168
-
169
  new LAE_Admin_Ajax;
1
+ <?php
2
+
3
+ // Exit if accessed directly
4
+ if (!defined('ABSPATH')) {
5
+ exit;
6
+ }
7
+
8
+ class LAE_Admin_Ajax {
9
+
10
+ // Instance of this class.
11
+ protected $plugin_slug = 'livemesh_el_addons';
12
+ protected $ajax_data;
13
+ protected $ajax_msg;
14
+
15
+
16
+ public function __construct() {
17
+
18
+ // retrieve all ajax string to localize
19
+ $this->localize_strings();
20
+ $this->init_hooks();
21
+
22
+ }
23
+
24
+ public function init_hooks() {
25
+
26
+ // Register backend ajax action
27
+ add_action('wp_ajax_lae_admin_ajax', array($this, 'lae_admin_ajax'));
28
+ // Load admin ajax js script
29
+ add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
30
+
31
+ }
32
+
33
+ public function ajax_response($success = true, $message = null, $content = null) {
34
+
35
+ $response = array(
36
+ 'success' => $success,
37
+ 'message' => $message,
38
+ 'content' => $content
39
+ );
40
+
41
+ return $response;
42
+
43
+ }
44
+
45
+ public function lae_check_nonce() {
46
+
47
+ // retrieve nonce
48
+ $nonce = (isset($_POST['nonce'])) ? $_POST['nonce'] : $_GET['nonce'];
49
+
50
+ // nonce action for the grid
51
+ $action = 'lae_admin_nonce';
52
+
53
+ // check ajax nounce
54
+ if (!wp_verify_nonce($nonce, $action)) {
55
+ // build response
56
+ $response = $this->ajax_response(false, __('Sorry, an error occurred. Please refresh the page.', 'livemesh-el-addons'));
57
+ // die and send json error response
58
+ wp_send_json($response);
59
+ }
60
+
61
+ }
62
+
63
+ public function lae_admin_ajax() {
64
+
65
+ // check the nonce
66
+ $this->lae_check_nonce();
67
+
68
+ // retrieve data
69
+ $this->ajax_data = (isset($_POST)) ? $_POST : $_GET;
70
+
71
+ // retrieve function
72
+ $func = $this->ajax_data['func'];
73
+
74
+ switch ($func) {
75
+ case 'lae_save_settings':
76
+ $response = $this->save_settings_callback();
77
+ break;
78
+ case 'lae_reset_settings':
79
+ $response = $this->save_settings_callback();
80
+ break;
81
+ default:
82
+ $response = ajax_response(false, __('Sorry, an unknown error occurred...', 'livemesh-el-addons'), null);
83
+ break;
84
+ }
85
+
86
+ // send json response and die
87
+ wp_send_json($response);
88
+
89
+ }
90
+
91
+ public function save_settings_callback() {
92
+
93
+ // retrieve data from jquery
94
+ $setting_data = $this->ajax_data['setting_data'];
95
+
96
+ lae_update_options($setting_data);
97
+
98
+ $template = false;
99
+ // get new restore global settings panel
100
+ if ($this->ajax_data['reset']) {
101
+ ob_start();
102
+ require_once('views/settings.php');
103
+ $template = ob_get_clean();
104
+ }
105
+
106
+ $response = $this->ajax_response(true, $this->ajax_data['reset'], $template);
107
+ return $response;
108
+
109
+ }
110
+
111
+
112
+ public function localize_strings() {
113
+
114
+ $this->ajax_msg = array(
115
+ 'box_icons' => array(
116
+ 'before' => '<i class="lae-info-box-icon dashicons dashicons-admin-generic"></i>',
117
+ 'success' => '<i class="lae-info-box-icon dashicons dashicons-yes"></i>',
118
+ 'error' => '<i class="lae-info-box-icon dashicons dashicons-no-alt"></i>'
119
+ ),
120
+ 'box_messages' => array(
121
+
122
+ 'lae_save_settings' => array(
123
+ 'before' => __('Saving plugin settings', 'livemesh-el-addons'),
124
+ 'success' => __('Plugin settings Saved', 'livemesh-el-addons'),
125
+ 'error' => __('Sorry, an error occurs while saving settings...', 'livemesh-el-addons')
126
+ ),
127
+ 'lae_reset_settings' => array(
128
+ 'before' => __('Resetting plugin settings', 'livemesh-el-addons'),
129
+ 'success' => __('Plugin settings resetted', 'livemesh-el-addons'),
130
+ 'error' => __('Sorry, an error occurred while resetting settings', 'livemesh-el-addons')
131
+ ),
132
+ )
133
+ );
134
+
135
+ }
136
+
137
+ public function admin_nonce() {
138
+
139
+ return array(
140
+ 'url' => admin_url('admin-ajax.php'),
141
+ 'nonce' => wp_create_nonce('lae_admin_nonce')
142
+ );
143
+
144
+ }
145
+
146
+ public function enqueue_admin_scripts() {
147
+
148
+ $screen = get_current_screen();
149
+
150
+ // enqueue only in grid panel
151
+ if (strpos($screen->id, $this->plugin_slug) !== false) {
152
+ // merge nonce to translatable strings
153
+ $strings = array_merge($this->admin_nonce(), $this->ajax_msg);
154
+
155
+ // Use minified libraries if LAE_SCRIPT_DEBUG is turned off
156
+ $suffix = (defined('LAE_SCRIPT_DEBUG') && LAE_SCRIPT_DEBUG) ? '' : '.min';
157
+
158
+ // register and localize script for ajax methods
159
+ wp_register_script('lae-admin-ajax-scripts', LAE_PLUGIN_URL . 'admin/assets/js/lae-admin-ajax' . $suffix . '.js', array(), LAE_VERSION, true);
160
+ wp_enqueue_script('lae-admin-ajax-scripts');
161
+
162
+ wp_localize_script('lae-admin-ajax-scripts', 'lae_admin_global_var', $strings);
163
+
164
+ }
165
+ }
166
+
167
+ }
168
+
169
  new LAE_Admin_Ajax;
admin/views/documentation.php CHANGED
@@ -124,7 +124,7 @@ else {
124
  The portfolio examples of Posts Grid element is built using custom post type registered by
125
  this plugin.
126
  </li>
127
- <li>Optionally, if you have <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin installed, you can import the sample data
128
  that replicates the demo site for you by importing the
129
  file sample-data.xml file located in the plugin directory. The import option is available under
130
  <strong> <a href="<?php echo admin_url() . 'import.php'; ?>"
@@ -140,7 +140,7 @@ else {
140
  <p>Below is a list of required/recommended plugins to install that will help you get the most out of this plugin.
141
  Although some of these plugins are optional, we recommend that you install these popular plugins if
142
  you plan to install the demo data and get most out of this plugin. The demo site and the sample data
143
- provided with the <a href="https://www.livemeshthemes.com/elementor-addons/pricing/"
144
  title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of
145
  the plugin utilizes all of these plugins including the Portfolio Post type plugin.</p>
146
  <p>These plugins are also listed in the Plugins tab of this help file under Elementor Addons →
@@ -167,7 +167,7 @@ else {
167
  <hr>
168
  <h3 id="demo-data">Installing Demo Data<a class="back-to-top" href="#panel"><span
169
  class="dashicons dashicons-arrow-up-alt2"></span> Back to top</a></h3>
170
- <p>If you have <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin installed, you can install the demo data to replicate the
171
  plugin demo site to get a head start on building your site. Installing demo data reduces the
172
  learning curve associated with trying out the powerful elements part of this plugin.</p>
173
  <p>The sample data imports the pages, posts and portfolio items part of the demo site. Once you are done with playing around the
@@ -299,7 +299,7 @@ else {
299
  allow you to input a subtitle which is usually displayed on top of the main heading title.</p>
300
  <p>You can choose to align the heading left, right or center with center being the default
301
  alignment.</p>
302
- <p>The <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin allows selection of a custom font for the heading title. You may
303
  choose one of 500+ custom fonts hosted in the Google Fonts library. By default, the heading font
304
  used by the theme is used for main heading title.</p>
305
 
@@ -313,7 +313,7 @@ else {
313
  <p>Many agencies, freelancers, corporates, products/apps require capturing the services provided by the
314
  agency or the features of a product. The services element is designed to help users capture these
315
  services or features in a multi-column grid.</p>
316
- <p>The element supports about 3 different styles (with 2 additional styles in <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the
317
  plugin) and each of these styles can be customized further by choosing the type of icon desired to
318
  represent the service – a font icon or an custom image icon. While the choice of font icons is huge
319
  in number and perhaps sufficient for most common services, the icon images can help present the
@@ -321,7 +321,7 @@ else {
321
  <p>Each of the service requires you to input a title for the service/feature and a short description of
322
  the service offered or the product feature. Additionally, each service allows you to enter a font
323
  icon or an icon image file to represent that service.</p>
324
- <p>The <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin allows you specify a custom font size, font color and and hover
325
  color for the font icon along with providing two additional styles of services/features.</p>
326
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/services-widget-edit1.png" alt="Services Element Edit Window"></p>
327
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/services-widget-edit2.png" alt="Services Element Edit Window"></p>
@@ -344,7 +344,7 @@ else {
344
  <p>This element provides an easy way to capture the team members of your organization or an agency. The
345
  details captured include team member name, position, a short description and the email plus social
346
  profile of the individual team members.</p>
347
- <p>Two different styles are provided with more styles planned in the <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin. Most
348
  of the styles display the team members in a multi-column grid. The option to specify the number of
349
  columns is provided that helps to control the number of team members displayed per row of the team
350
  members.</p>
@@ -551,7 +551,7 @@ else {
551
  you select Portfolio Post type under Post Type entry in Build Tools window as explained below.</p>
552
 
553
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/livemesh-grid-pagination.jpg" alt="Posts Grid Pagination"></p>
554
- <p>The <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin has support for pagination, lazy load with load more button and
555
  lightbox option for images. The additional posts are loaded via AJAX when the user navigates through
556
  the pages populated or when the user hits the Load More button.</p>
557
 
@@ -721,7 +721,7 @@ else {
721
  image.</p>
722
  <p>The element options are mostly self-explanatory and you can view a live preview of the buttons <a
723
  title="Livemesh Elementor Button Element Demo"
724
- href="https://www.livemeshthemes.com/elementor-addons/buttons/">here</a>.</p>
725
 
726
 
727
  <hr>
@@ -890,7 +890,7 @@ else {
890
  video tutorial sites, video marketers, small businesses or websites with a major presence on
891
  YouTube/Vimeo. The videos can be played with a single click of the play button on the gallery item
892
  as seen in this <a title="Video Gallery"
893
- href="https://www.livemeshthemes.com/elementor-addons/video-gallery/">demo page</a>.
894
  </p>
895
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/image-gallery-edit1.png" alt="Image Gallery Element Edit Window"></p>
896
  <p>The configuration for creating a video gallery is similar to that of image gallery; a video URL would be required along with image that acts as a placeholder.</p>
@@ -960,7 +960,7 @@ else {
960
  video tutorial sites, video marketers, small businesses or websites with a major presence on
961
  YouTube/Vimeo. The videos can be played with a single click of the play button on the gallery item
962
  as seen in this <a title="Video Gallery"
963
- href="https://www.livemeshthemes.com/elementor-addons/video-gallery/">demo page</a>.
964
  </p>
965
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/image-carousel-edit.png" alt="Image Carousel Element Edit Window"></p>
966
  <p>The option for creation of video carousel is similar to that of image carousel - requires input of URL for the Vimeo/YouTube video along with placeholder image. </p>
@@ -1064,7 +1064,7 @@ else {
1064
 
1065
  <hr>
1066
  <h3 id="plugin-support">Plugin Support</span><a class="back-to-top" href="#panel"> Back to top</a></h3>
1067
- <p>If you have queries or issues to report related to the plugin, please submit the same through our <a href="https://www.livemeshthemes.com/elementor-addons/contact-us/" title="Livemesh Contact form">website contact form</a>. This will create a support ticket in our support portal.</p>
1068
 
1069
  </div>
1070
 
@@ -1164,8 +1164,18 @@ else {
1164
  <div id="updates-panel" class="panel-left">
1165
 
1166
  <h2>Change Log for the Premium Version</h2>
 
 
 
 
 
 
 
 
 
1167
  <h3>2.6</h3>
1168
  <ul>
 
1169
  <li>Added - Twitter grid addon for showcasing tweets on your website.</li>
1170
  <li>Added - 3 styles for display of tweets in a Twitter grid.</li>
1171
  <li>Added - Extensive customization options for Twitter grid addon.</li>
@@ -1440,7 +1450,7 @@ else {
1440
  <p><?php _e('Premium version offers multiple benefits - more addon elements, advanced features for addons including those part of the free plugin and priority support through a dedicated support portal.', 'livemesh-el-addons'); ?></p>
1441
 
1442
  <a class="button button-primary"
1443
- href="https://www.livemeshthemes.com/elementor-addons/addons-demo/#why-upgrade"
1444
  title="<?php esc_attr_e('Know More', 'livemesh-el-addons'); ?>"><?php _e('Know More Details', 'livemesh-el-addons'); ?></a>
1445
  </div><!-- .panel-aside knowledge base -->
1446
 
@@ -1453,10 +1463,10 @@ else {
1453
 
1454
  <p>The premium version of the plugin entitles you to quick support with replies posted within 24 hours (on week days). </p>
1455
 
1456
- <p>Please submit your support query through our <a href="https://www.livemeshthemes.com/elementor-addons/contact-us/" title="Livemesh Contact form">website contact form</a>. This will create a support ticket in our support portal.</p>
1457
 
1458
  <a class="button button-primary"
1459
- href="https://www.livemeshthemes.com/elementor-addons/contact-us/"
1460
  title="<?php esc_attr_e('Contact Us', 'livemesh-el-addons'); ?>"><?php _e('Contact Us', 'livemesh-el-addons'); ?></a>
1461
  </div><!-- .panel-aside knowledge base -->
1462
 
@@ -1469,7 +1479,7 @@ else {
1469
  we will get back to you promptly.</p>
1470
 
1471
  <a class="button button-primary"
1472
- href="https://www.livemeshthemes.com/elementor-addons/contact-us/"
1473
  title="<?php esc_attr_e('Write to Us', 'livemesh-el-addons'); ?>"><?php _e('Write to Us', 'livemesh-el-addons'); ?></a>
1474
  </div><!-- .panel-aside knowledge base -->
1475
 
124
  The portfolio examples of Posts Grid element is built using custom post type registered by
125
  this plugin.
126
  </li>
127
+ <li>Optionally, if you have <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin installed, you can import the sample data
128
  that replicates the demo site for you by importing the
129
  file sample-data.xml file located in the plugin directory. The import option is available under
130
  <strong> <a href="<?php echo admin_url() . 'import.php'; ?>"
140
  <p>Below is a list of required/recommended plugins to install that will help you get the most out of this plugin.
141
  Although some of these plugins are optional, we recommend that you install these popular plugins if
142
  you plan to install the demo data and get most out of this plugin. The demo site and the sample data
143
+ provided with the <a href="https://livemeshelementor.com/pricing/"
144
  title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of
145
  the plugin utilizes all of these plugins including the Portfolio Post type plugin.</p>
146
  <p>These plugins are also listed in the Plugins tab of this help file under Elementor Addons →
167
  <hr>
168
  <h3 id="demo-data">Installing Demo Data<a class="back-to-top" href="#panel"><span
169
  class="dashicons dashicons-arrow-up-alt2"></span> Back to top</a></h3>
170
+ <p>If you have <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin installed, you can install the demo data to replicate the
171
  plugin demo site to get a head start on building your site. Installing demo data reduces the
172
  learning curve associated with trying out the powerful elements part of this plugin.</p>
173
  <p>The sample data imports the pages, posts and portfolio items part of the demo site. Once you are done with playing around the
299
  allow you to input a subtitle which is usually displayed on top of the main heading title.</p>
300
  <p>You can choose to align the heading left, right or center with center being the default
301
  alignment.</p>
302
+ <p>The <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin allows selection of a custom font for the heading title. You may
303
  choose one of 500+ custom fonts hosted in the Google Fonts library. By default, the heading font
304
  used by the theme is used for main heading title.</p>
305
 
313
  <p>Many agencies, freelancers, corporates, products/apps require capturing the services provided by the
314
  agency or the features of a product. The services element is designed to help users capture these
315
  services or features in a multi-column grid.</p>
316
+ <p>The element supports about 3 different styles (with 2 additional styles in <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the
317
  plugin) and each of these styles can be customized further by choosing the type of icon desired to
318
  represent the service – a font icon or an custom image icon. While the choice of font icons is huge
319
  in number and perhaps sufficient for most common services, the icon images can help present the
321
  <p>Each of the service requires you to input a title for the service/feature and a short description of
322
  the service offered or the product feature. Additionally, each service allows you to enter a font
323
  icon or an icon image file to represent that service.</p>
324
+ <p>The <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin allows you specify a custom font size, font color and and hover
325
  color for the font icon along with providing two additional styles of services/features.</p>
326
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/services-widget-edit1.png" alt="Services Element Edit Window"></p>
327
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/services-widget-edit2.png" alt="Services Element Edit Window"></p>
344
  <p>This element provides an easy way to capture the team members of your organization or an agency. The
345
  details captured include team member name, position, a short description and the email plus social
346
  profile of the individual team members.</p>
347
+ <p>Two different styles are provided with more styles planned in the <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin. Most
348
  of the styles display the team members in a multi-column grid. The option to specify the number of
349
  columns is provided that helps to control the number of team members displayed per row of the team
350
  members.</p>
551
  you select Portfolio Post type under Post Type entry in Build Tools window as explained below.</p>
552
 
553
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/livemesh-grid-pagination.jpg" alt="Posts Grid Pagination"></p>
554
+ <p>The <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Pro" target="_blank">premium version</a> of the plugin has support for pagination, lazy load with load more button and
555
  lightbox option for images. The additional posts are loaded via AJAX when the user navigates through
556
  the pages populated or when the user hits the Load More button.</p>
557
 
721
  image.</p>
722
  <p>The element options are mostly self-explanatory and you can view a live preview of the buttons <a
723
  title="Livemesh Elementor Button Element Demo"
724
+ href="https://livemeshelementor.com/buttons/">here</a>.</p>
725
 
726
 
727
  <hr>
890
  video tutorial sites, video marketers, small businesses or websites with a major presence on
891
  YouTube/Vimeo. The videos can be played with a single click of the play button on the gallery item
892
  as seen in this <a title="Video Gallery"
893
+ href="https://livemeshelementor.com/video-gallery/">demo page</a>.
894
  </p>
895
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/image-gallery-edit1.png" alt="Image Gallery Element Edit Window"></p>
896
  <p>The configuration for creating a video gallery is similar to that of image gallery; a video URL would be required along with image that acts as a placeholder.</p>
960
  video tutorial sites, video marketers, small businesses or websites with a major presence on
961
  YouTube/Vimeo. The videos can be played with a single click of the play button on the gallery item
962
  as seen in this <a title="Video Gallery"
963
+ href="https://livemeshelementor.com/video-gallery/">demo page</a>.
964
  </p>
965
  <p><img class="alignnone size-large" src="https://www.livemeshthemes.com/wp-content/uploads/plugin-doc/elementor-addons/image-carousel-edit.png" alt="Image Carousel Element Edit Window"></p>
966
  <p>The option for creation of video carousel is similar to that of image carousel - requires input of URL for the Vimeo/YouTube video along with placeholder image. </p>
1064
 
1065
  <hr>
1066
  <h3 id="plugin-support">Plugin Support</span><a class="back-to-top" href="#panel"> Back to top</a></h3>
1067
+ <p>If you have queries or issues to report related to the plugin, please submit the same through our <a href="https://livemeshelementor.com/contact-us/" title="Livemesh Contact form">website contact form</a>. This will create a support ticket in our support portal.</p>
1068
 
1069
  </div>
1070
 
1164
  <div id="updates-panel" class="panel-left">
1165
 
1166
  <h2>Change Log for the Premium Version</h2>
1167
+ <h3>2.6.2</h3>
1168
+ <ul>
1169
+ <li>Updated - Readme.txt and documentation.</li>
1170
+ </ul>
1171
+ <h3>2.6.1</h3>
1172
+ <ul>
1173
+ <li>Fixed - Fancybox lightbox combines images from multiple grids/galleries when displaying images/videos in the lightbox.</li>
1174
+ <li>Fixed - The direct link to lightbox image does not work.</li>
1175
+ </ul>
1176
  <h3>2.6</h3>
1177
  <ul>
1178
+ <li>Updated - Freemius library with a security fix. Recommended to update immediately.</li>
1179
  <li>Added - Twitter grid addon for showcasing tweets on your website.</li>
1180
  <li>Added - 3 styles for display of tweets in a Twitter grid.</li>
1181
  <li>Added - Extensive customization options for Twitter grid addon.</li>
1450
  <p><?php _e('Premium version offers multiple benefits - more addon elements, advanced features for addons including those part of the free plugin and priority support through a dedicated support portal.', 'livemesh-el-addons'); ?></p>
1451
 
1452
  <a class="button button-primary"
1453
+ href="https://livemeshelementor.com/addons-demo/#why-upgrade"
1454
  title="<?php esc_attr_e('Know More', 'livemesh-el-addons'); ?>"><?php _e('Know More Details', 'livemesh-el-addons'); ?></a>
1455
  </div><!-- .panel-aside knowledge base -->
1456
 
1463
 
1464
  <p>The premium version of the plugin entitles you to quick support with replies posted within 24 hours (on week days). </p>
1465
 
1466
+ <p>Please submit your support query through our <a href="https://livemeshelementor.com/contact-us/" title="Livemesh Contact form">website contact form</a>. This will create a support ticket in our support portal.</p>
1467
 
1468
  <a class="button button-primary"
1469
+ href="https://livemeshelementor.com/contact-us/"
1470
  title="<?php esc_attr_e('Contact Us', 'livemesh-el-addons'); ?>"><?php _e('Contact Us', 'livemesh-el-addons'); ?></a>
1471
  </div><!-- .panel-aside knowledge base -->
1472
 
1479
  we will get back to you promptly.</p>
1480
 
1481
  <a class="button button-primary"
1482
+ href="https://livemeshelementor.com/contact-us/"
1483
  title="<?php esc_attr_e('Write to Us', 'livemesh-el-addons'); ?>"><?php _e('Write to Us', 'livemesh-el-addons'); ?></a>
1484
  </div><!-- .panel-aside knowledge base -->
1485
 
admin/views/settings.php CHANGED
@@ -595,47 +595,47 @@ if ( lae_fs()->is_not_paying() ) {
595
 
596
 
597
  <ul>
598
- <li><a href="https://www.livemeshthemes.com/elementor-addons/posts-block/" title="Post Blocks Addon" target="_blank">Post
599
  Blocks!</a> - Present your blog posts, events, news items or portfolio in a dozen creative ways. Comes with AJAX filtering,
600
  pagination and load more features to help visitors navigate your entire collection of blog posts or custom post types and
601
  their categories without reloading the page.
602
  </li>
603
- <li><a href="https://www.livemeshthemes.com/elementor-addons/tabs/" title="Tabs Addon" target="_blank">Responsive
604
  Tabs</a> - Exquisitely designed tabs that function seamlessly across all devices and resolutions. The
605
  plugin features never before choice of over dozen styles of tabs to choose from.
606
  </li>
607
- <li><a href="https://www.livemeshthemes.com/elementor-addons/accordion/" title="Accordion/Toggle Addon" target="_blank">Accordion/Toggle</a> - Controls
608
  that capture collapsible content panels when space is limited.
609
  </li>
610
- <li><a href="https://www.livemeshthemes.com/elementor-addons/sliders/" title="Image Slider Widget" target="_blank">Image
611
  Slider</a> - Create a responsive slider of images with support
612
  for captions,
613
  multiple slider types like Nivo, Flex, Slick and lightweight sliders, thumbnail
614
  navigation etc.
615
  </li>
616
- <li><a href="https://www.livemeshthemes.com/elementor-addons/image-gallery/" title="Image Gallery Widget" target="_blank">Image
617
  Gallery</a> - Create a gallery of images with options for masonry
618
  or fit rows, pagination, lazy load, lightbox support etc.
619
  </li>
620
- <li><a href="https://www.livemeshthemes.com/elementor-addons/video-gallery/" title="Video Gallery Widget" target="_blank">Video
621
  Gallery</a> - Create a beautiful gallery of videos to help
622
  showcase a collection of YouTube/Vimeo videos on your site.
623
  </li>
624
- <li><a href="https://www.livemeshthemes.com/elementor-addons/gallery-carousel/" title="Image Carousel" target="_blank">Image
625
  Carousel</a> - Build a responsive carousel of images.</li>
626
- <li><a href="https://www.livemeshthemes.com/elementor-addons/gallery-carousel/" title="Video Carousel" target="_blank">Video
627
  Carousel</a> - Build a responsive carousel of YouTube/Vimeo
628
  videos.
629
  </li>
630
- <li><a href="https://www.livemeshthemes.com/elementor-addons/buttons/" title="Buttons Addon" target="_blank">Buttons</a> - Animated buttons with great choice of colors.
631
  </li>
632
- <li><a href="https://www.livemeshthemes.com/elementor-addons/icon-lists/" title="Icon List" target="_blank">Icon List</a> - - Create a list of icons with description and link - for social media profiles,
633
  for showcasing services or features as well with icons or images.
634
  </li>
635
- <li><a href="https://www.livemeshthemes.com/elementor-addons/faq-element/" title="FAQ Addon" target="_blank">FAQ</a> - Create a set of Frequently Asked Questions for display in a
636
  page.
637
  </li>
638
- <li><a href="https://www.livemeshthemes.com/elementor-addons/features/" title="Features Addon" target="_blank">Features Addon</a> for showcasing product features or services provided by an agency/business.
639
  </li>
640
  </ul>
641
 
@@ -665,10 +665,10 @@ if ( lae_fs()->is_not_paying() ) {
665
  updated with additional features for existing elements -</p>
666
 
667
  <ul>
668
- <li><a href="https://www.livemeshthemes.com/elementor-addons/portfolio-grid-pro/" title="Posts Grid" target="_blank">Lazy Load</a> - The portfolio/post grid and image gallery elements
669
  incorporate option to lazy load posts/images with the click of a Load More button.
670
  </li>
671
- <li><a href="https://www.livemeshthemes.com/elementor-addons/portfolio-grid-pro/" title="Posts Grid" target="_blank">Pagination</a> - Create a grid of posts or custom post types with AJAX
672
  based pagination support.
673
  </li>
674
  <li><strong>Lightbox Support</strong> - The premium version comes with support for
@@ -727,7 +727,7 @@ if ( lae_fs()->is_not_paying() ) {
727
  } else {
728
  ?>
729
 
730
- <a class="lae-button know-more" href="https://www.livemeshthemes.com/elementor-addons/"><i class="dashicons dashicons-external"></i><?php
731
  echo __( 'Know More', 'livemesh-el-addons' ) ;
732
  ?></a>
733
 
595
 
596
 
597
  <ul>
598
+ <li><a href="https://livemeshelementor.com/posts-block/" title="Post Blocks Addon" target="_blank">Post
599
  Blocks!</a> - Present your blog posts, events, news items or portfolio in a dozen creative ways. Comes with AJAX filtering,
600
  pagination and load more features to help visitors navigate your entire collection of blog posts or custom post types and
601
  their categories without reloading the page.
602
  </li>
603
+ <li><a href="https://livemeshelementor.com/tabs/" title="Tabs Addon" target="_blank">Responsive
604
  Tabs</a> - Exquisitely designed tabs that function seamlessly across all devices and resolutions. The
605
  plugin features never before choice of over dozen styles of tabs to choose from.
606
  </li>
607
+ <li><a href="https://livemeshelementor.com/accordion/" title="Accordion/Toggle Addon" target="_blank">Accordion/Toggle</a> - Controls
608
  that capture collapsible content panels when space is limited.
609
  </li>
610
+ <li><a href="https://livemeshelementor.com/sliders/" title="Image Slider Widget" target="_blank">Image
611
  Slider</a> - Create a responsive slider of images with support
612
  for captions,
613
  multiple slider types like Nivo, Flex, Slick and lightweight sliders, thumbnail
614
  navigation etc.
615
  </li>
616
+ <li><a href="https://livemeshelementor.com/image-gallery/" title="Image Gallery Widget" target="_blank">Image
617
  Gallery</a> - Create a gallery of images with options for masonry
618
  or fit rows, pagination, lazy load, lightbox support etc.
619
  </li>
620
+ <li><a href="https://livemeshelementor.com/video-gallery/" title="Video Gallery Widget" target="_blank">Video
621
  Gallery</a> - Create a beautiful gallery of videos to help
622
  showcase a collection of YouTube/Vimeo videos on your site.
623
  </li>
624
+ <li><a href="https://livemeshelementor.com/gallery-carousel/" title="Image Carousel" target="_blank">Image
625
  Carousel</a> - Build a responsive carousel of images.</li>
626
+ <li><a href="https://livemeshelementor.com/gallery-carousel/" title="Video Carousel" target="_blank">Video
627
  Carousel</a> - Build a responsive carousel of YouTube/Vimeo
628
  videos.
629
  </li>
630
+ <li><a href="https://livemeshelementor.com/buttons/" title="Buttons Addon" target="_blank">Buttons</a> - Animated buttons with great choice of colors.
631
  </li>
632
+ <li><a href="https://livemeshelementor.com/icon-lists/" title="Icon List" target="_blank">Icon List</a> - - Create a list of icons with description and link - for social media profiles,
633
  for showcasing services or features as well with icons or images.
634
  </li>
635
+ <li><a href="https://livemeshelementor.com/faq-element/" title="FAQ Addon" target="_blank">FAQ</a> - Create a set of Frequently Asked Questions for display in a
636
  page.
637
  </li>
638
+ <li><a href="https://livemeshelementor.com/features/" title="Features Addon" target="_blank">Features Addon</a> for showcasing product features or services provided by an agency/business.
639
  </li>
640
  </ul>
641
 
665
  updated with additional features for existing elements -</p>
666
 
667
  <ul>
668
+ <li><a href="https://livemeshelementor.com/portfolio-grid-pro/" title="Posts Grid" target="_blank">Lazy Load</a> - The portfolio/post grid and image gallery elements
669
  incorporate option to lazy load posts/images with the click of a Load More button.
670
  </li>
671
+ <li><a href="https://livemeshelementor.com/portfolio-grid-pro/" title="Posts Grid" target="_blank">Pagination</a> - Create a grid of posts or custom post types with AJAX
672
  based pagination support.
673
  </li>
674
  <li><strong>Lightbox Support</strong> - The premium version comes with support for
727
  } else {
728
  ?>
729
 
730
+ <a class="lae-button know-more" href="https://livemeshelementor.com/"><i class="dashicons dashicons-external"></i><?php
731
  echo __( 'Know More', 'livemesh-el-addons' ) ;
732
  ?></a>
733
 
assets/css/fonts/icomoon/icomoon.eot ADDED
Binary file
assets/css/fonts/icomoon/icomoon.svg ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
+ <metadata>Generated by IcoMoon</metadata>
5
+ <defs>
6
+ <font id="icomoon" horiz-adv-x="1024">
7
+ <font-face units-per-em="1024" ascent="960" descent="-64" />
8
+ <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#xe900;" glyph-name="arrow-left" d="M592 672c-12.512 0-23.776-4.896-32.352-12.736l-0.096 0.16-192-176.032c-9.888-9.12-15.552-21.952-15.552-35.424 0-13.44 5.664-26.24 15.552-35.328l192-176 0.096 0.128c8.576-7.904 19.84-12.768 32.352-12.768 26.496 0 48 21.504 48 48 0 14.016-6.080 26.496-15.648 35.264l0.096 0.064-153.408 140.64 153.408 140.64-0.096 0.16c9.568 8.704 15.648 21.216 15.648 35.232 0 26.496-21.504 48-48 48zM512 960c-282.752 0-512-229.28-512-512.032 0-282.72 229.248-511.968 512-511.968s512 229.248 512 511.968c0 282.752-229.248 512.032-512 512.032zM512 32c-229.376 0-416 186.624-416 415.968 0 229.376 186.624 416.032 416 416.032s416-186.656 416-416.064c0-229.312-186.624-415.936-416-415.936z" />
11
+ <glyph unicode="&#xe901;" glyph-name="arrow-right" d="M464.448 659.392l-0.096-0.16c-8.576 7.84-19.84 12.768-32.352 12.768-26.496 0-48-21.504-48-48 0-14.016 6.080-26.496 15.648-35.264l-0.096-0.16 153.408-140.64-153.312-140.704c-9.568-8.736-15.648-21.248-15.648-35.232 0-26.496 21.504-48 48-48 12.512 0 23.776 4.864 32.352 12.736l0.096-0.128 192 176c9.888 9.088 15.552 21.92 15.552 35.36 0 13.504-5.664 26.304-15.552 35.392l-192 176.032zM512 960c-282.752 0-512-229.28-512-512.032 0-282.72 229.248-511.968 512-511.968s512 229.248 512 511.968c0 282.752-229.248 512.032-512 512.032zM512 32c-229.376 0-416 186.624-416 415.968 0 229.376 186.624 416.032 416 416.032s416-186.656 416-416.064c0-229.312-186.624-415.936-416-415.936z" />
12
+ <glyph unicode="&#xe902;" glyph-name="icon-aim" d="M865.472 104.341c-55.723 144.341-230.571 247.552-238.677 252.245-14.549 7.787-28.011 18.581-35.307 24.875-0.384 9.579 1.408 13.504 2.069 14.080 0 0 0.939 0.576 3.776 0.576 6.187 0 13.461-2.709 17.259-4.373 18.965-7.083 46.187-8.533 65.707-8.533 5.717 0 9.515 0.128 9.6 0.128 100.907 0.043 163.755 61.675 166.379 64.299 6.528 6.549 8.128 16.491 3.968 24.747l-40.512 80.085c-2.603 5.163-7.211 9.045-12.757 10.752s-11.52 1.088-16.576-1.707c-51.179-28.203-95.893-43.157-129.301-43.157-29.909 0-41.387 11.755-43.627 14.464-7.744 15.424-28.373 55.829-28.373 55.829-0.789 1.536-1.749 3.008-2.88 4.288-12.885 14.912-30.571 22.784-51.115 22.784-26.837 0-50.005-13.419-52.096-14.699-102.997-58.283-103.275-223.744-103.168-229.163-12.011-172.992-198.72-222.613-206.677-224.661-9.451-2.411-16.085-10.923-16.085-20.672 0-4.629 0-13.248 46.677-120.341 3.435-7.872 11.2-12.8 19.541-12.8 1.301 0 2.581 0.085 3.883 0.341 159.189 29.248 268.864 166.208 302.635 213.717 162.411-82.496 207.616-185.003 208.043-185.963 2.539-6.080 7.765-10.667 14.144-12.416 6.4-1.621 13.205-0.384 18.475 3.627l88.043 66.965c7.531 5.76 10.389 15.808 6.955 24.683zM764.459 61.76c-24.768 40.427-89.856 124.245-232.704 192.299-9.771 4.629-21.504 1.259-27.264-7.915-1.088-1.707-106.816-167.659-268.523-206.869-12.011 27.84-23.744 56-30.592 73.621 56.725 20.672 205.547 90.581 217.067 257.621-0.021 1.451 0.107 147.243 81.963 193.621 4.245 2.453 18.048 8.917 30.699 8.917 7.275 0 12.843-2.048 17.323-6.421 4.885-9.621 21.781-42.709 28.416-55.829 2.133-3.584 22.635-35.115 80.256-35.115 36.501 0 80.277 12.843 130.347 38.165l23.061-45.632c-20.011-14.997-64.704-42.219-125.589-42.219-0.192 0-3.499-0.128-8.619-0.128-21.973 0-40.981 2.176-49.195 5.163-1.685 0.789-16.939 7.744-33.771 7.744-18.624 0-29.781-8.213-35.84-15.125-11.029-12.501-14.827-30.549-11.669-55.168 0.597-4.843 2.88-9.301 6.379-12.672 0.96-0.917 23.552-22.464 49.792-36.459 1.621-0.96 156.885-92.587 213.504-215.787l-55.040-41.813zM621.611 622.912c77.099 0 139.861 62.699 139.861 139.84 0 77.077-62.741 139.84-139.861 139.84s-139.819-62.741-139.819-139.84c0-77.12 62.699-139.84 139.819-139.84zM621.611 859.925c53.611 0 97.195-43.584 97.195-97.173s-43.584-97.173-97.195-97.173c-53.589 0-97.152 43.584-97.152 97.173s43.563 97.173 97.152 97.173z" />
13
+ <glyph unicode="&#xe903;" glyph-name="icon-behance" d="M168.661 484.16h152.811c47.787 0 71.019 28.8 71.019 88 0 62.933-39.851 79.552-60.907 79.552h-162.923c-11.797 0-21.333-9.557-21.333-21.333v-124.885c0-11.776 9.557-21.333 21.333-21.333zM189.995 609.067h141.589c0.192 0 18.24-0.427 18.24-36.885 0-45.333-13.12-45.333-28.352-45.333h-131.477v82.219zM468.459 478.976c23.552 19.499 42.837 51.605 42.837 101.867 0 103.509-70.549 170.368-179.712 170.368h-291.243c-11.776 0-21.333-9.557-21.333-21.333v-559.701c0-11.776 9.557-21.312 21.333-21.312h290.56c0.235 0 2.432-0.043 2.645-0.043 0 0 0 0 0.021 0 13.227 0 59.883 1.813 104.896 24.853 42.091 21.568 92.245 67.115 92.203 160.491 0.192 3.243 3.947 80.149-40.235 126.848-6.656 7.083-13.995 13.077-21.973 17.963zM488.043 335.381c0-58.624-23.211-100.245-69.013-123.712-37.483-19.179-77.781-20.16-85.461-20.16h-0.021l-1.963 0.021h-269.909v517.035h269.909c85.824 0 137.045-47.744 137.045-127.701 0-77.099-59.093-84.672-65.643-85.248-11.456-0.853-20.16-10.603-19.755-22.059 0.448-11.477 9.856-20.544 21.333-20.544 23.36 0 41.259-6.912 54.763-21.141 31.552-33.237 28.779-94.741 28.715-96.491zM331.584 440.555h-162.923c-11.797 0-21.333-9.557-21.333-21.333v-149.611c0-11.776 9.536-21.333 21.333-21.333l155.179 0.021c55.979 1.259 88.085 35.52 88.085 94.037 0 77.696-52.501 98.219-80.341 98.219zM322.944 290.965h-132.949v106.944h141.547c6.293-0.128 37.717-3.328 37.717-55.552 0-44.245-22.293-50.859-46.315-51.392zM789.461 547.2c-83.093 0-114.581-68.459-119.616-104.64-0.853-6.123 0.981-12.288 5.035-16.96 4.032-4.651 9.899-7.339 16.085-7.339h183.851c11.691 0 21.163 9.387 21.333 21.056 0.021 1.92 0.256 47.552-30.891 79.104-18.837 19.115-44.352 28.779-75.797 28.779zM719.765 460.928c9.216 19.499 28.864 43.605 69.696 43.605 19.797 0 34.581-5.184 45.248-15.872 8.192-8.213 12.821-18.624 15.424-27.733h-130.368zM1003.221 362.155c0.661 5.013 15.317 124.075-53.333 202.283-37.739 42.965-92.437 64.747-162.624 64.747-122.091 0-180.117-64.875-207.317-119.317-28.779-57.621-29.056-114.688-28.992-115.733-0.32-4.693-6.443-115.712 64.235-190.997 41.109-43.755 98.923-65.963 170.688-65.963h0.171c0 0 3.243-0.192 8.939-0.192 99.179 0 205.163 44.736 205.163 170.304 0 11.776-9.536 21.333-21.333 21.333h-98.517c-5.717 0-11.179-2.475-15.211-6.549-4.011-4.053-6.208-9.749-6.123-15.467 0.021-0.576 0.107-14.016-10.176-24.448-10.752-10.944-29.547-15.701-56.747-13.781-34.56 2.389-71.211 10.752-77.675 75.157h267.712c10.709 0.043 19.755 8 21.141 18.624zM962.112 386.24h-270.080c-11.776 0-21.333-9.557-21.333-21.333 0-130.837 89.088-137.024 118.379-139.072 41.749-2.944 71.040 6.443 90.944 27.264 10.368 10.859 15.787 22.805 18.603 32.853h57.493c-5.397-40.043-26.795-68.48-64.939-86.592-37.568-17.813-79.765-19.733-96.213-19.733-3.904 0-6.229 0.107-7.701 0.149-60.693 0-108.032 17.6-140.779 52.331-58.048 61.611-53.013 158.4-52.928 160.619 0.043 7.915 2.859 193.749 193.707 193.749 57.28 0 101.141-16.832 130.432-50.069 41.621-47.232 45.312-117.12 44.416-150.165zM666.88 647.424h230.891c11.776 0 21.333 9.536 21.333 21.333v68.907c0 11.797-9.557 21.333-21.333 21.333h-230.891c-11.797 0-21.333-9.536-21.333-21.333v-68.907c0-11.797 9.536-21.333 21.333-21.333zM688.213 716.331h188.224v-26.24h-188.224v26.24z" />
14
+ <glyph unicode="&#xe904;" glyph-name="icon-dribbble" d="M804.715 756.992l-19.456 18.432-0.661-1.109c-76.672 64.235-172.331 99.669-272.597 99.669-54.464 0-107.456-10.795-158.059-31.125l-0.555 0.576-13.504-5.952c-125.419-55.531-216.96-168.469-244.843-302.187l-3.456-16.597 0.811-0.384c-3.904-23.317-6.4-46.848-6.4-70.315 0-124.736 53.909-241.323 148.309-322.517l-0.192-0.448 12.843-10.219c76.245-60.715 167.915-92.8 265.045-92.8 51.285 0 101.909 9.429 150.955 28.096l13.461 5.227v0.363c139.968 56.747 236.011 181.419 256.704 332.565l1.131-0.405 2.133 27.648c0.832 10.752 1.621 21.525 1.621 32.469 0 117.824-47.339 227.563-133.291 309.013zM889.749 448v-2.155c-42.667 14.549-98.411 21.888-150.464 21.888-45.205 0-89.493-5.632-133.376-16.683-8.491 22.677-16.939 44.821-26.624 66.24l1.408 0.619-0.469 1.003c86.4 43.221 157.675 107.691 210.816 188.395 65.664-70.976 98.709-162.091 98.709-259.307zM762.069 737.451c-49.472-77.675-118.187-139.499-200.491-180.501-46.229 92.032-105.152 176.768-175.616 252.523 40.597 14.272 82.816 21.845 126.037 21.845 92.331 0 180.309-33.451 250.069-93.867zM343.787 792.256c72.299-75.349 132.459-160.32 179.157-252.949-59.328-23.637-121.877-35.627-186.219-35.627-68.011 0-133.867 13.333-196.075 39.616 27.776 108.224 102.272 199.595 203.136 248.96zM128.661 448c0 17.493 1.664 35.029 4.075 52.459 64.896-26.176 133.376-39.467 204.011-39.467s139.2 13.461 204.288 39.701c9.088-20.053 17.643-40.747 25.664-61.973-136.683-46.144-249.003-143.787-313.749-272.789-79.232 72.661-124.288 173.973-124.288 282.069zM286.741 138.133c59.093 123.541 164.949 217.216 294.464 260.629 33.621-101.291 51.456-206.677 52.992-313.707-39.872-13.525-80.917-20.352-122.219-20.352-81.813-0.021-159.36 25.323-225.237 73.429zM675.755 101.675c-3.008 105.216-21.035 208.725-53.931 308.48 89.003 21.781 182.677 18.901 269.888-8.149-15.637-133.803-96.299-245.653-215.957-300.331z" />
15
+ <glyph unicode="&#xe905;" glyph-name="icon-facebook" d="M766.101 908.203l-139.947-0.064c0 0-2.859 0.213-7.957 0.213-28.715 0-173.909-7.979-213.44-163.691-0.619-1.728-13.888-40.704-14.123-131.371h-132.757c-11.776 0-21.333-9.536-21.333-21.333v-122.304c0-11.776 9.557-21.333 21.333-21.333h145.195v-439.339c0-11.776 9.557-21.333 21.333-21.333h166.251c11.797 0 21.333 9.557 21.333 21.333v438.891h145.664c11.797 0 21.333 9.536 21.333 21.333v122.752c0 11.797-9.536 21.333-21.333 21.333h-145.344v52.523c0 34.965 22.187 72.32 84.48 72.32h69.312c11.776 0 21.333 9.557 21.333 21.333v127.403c0 11.776-9.557 21.333-21.333 21.333zM744.768 780.8h-47.979c-87.829 0-127.147-57.749-127.147-114.987v-73.856c0-11.776 9.536-21.333 21.333-21.333h145.344v-80.085h-145.664c-11.776 0-21.333-9.557-21.333-21.333v-438.891h-123.584v439.339c0 11.797-9.536 21.333-21.333 21.333h-145.195v79.637h132.928c5.739 0 11.2 2.304 15.232 6.421 4.011 4.075 6.208 9.621 6.101 15.36-1.92 97.024 11.435 137.877 12.053 139.947 31.488 123.755 140.096 133.355 172.651 133.355 2.965 0 4.757-0.107 6.485-0.149h120.085v-84.757z" />
16
+ <glyph unicode="&#xe906;" glyph-name="icon-flickr" d="M358.379 588.523c-76.928 0-139.52-63.040-139.52-140.523 0-77.525 62.592-140.565 139.52-140.565s139.52 63.040 139.52 140.565c0 77.483-62.592 140.523-139.52 140.523zM358.379 350.101c-53.419 0-96.853 43.925-96.853 97.899 0 53.952 43.435 97.856 96.853 97.856 53.397 0 96.853-43.904 96.853-97.856 0-53.973-43.456-97.899-96.853-97.899zM673.536 588.523c-76.928 0-139.52-63.040-139.52-140.523 0-77.525 62.592-140.565 139.52-140.565 76.907 0 139.499 63.040 139.499 140.565 0 77.483-62.571 140.523-139.499 140.523zM673.536 350.101c-53.419 0-96.853 43.925-96.853 97.899 0 53.952 43.435 97.856 96.853 97.856 53.397 0 96.832-43.904 96.832-97.856 0-53.973-43.435-97.899-96.832-97.899zM515.968 906.603c-255.168 0-462.741-205.739-462.741-458.624s207.573-458.581 462.741-458.581c250.795 0 454.827 205.717 454.827 458.581 0 252.907-204.053 458.624-454.827 458.624zM515.968 32.064c-231.616 0-420.075 186.581-420.075 415.915 0 229.355 188.459 415.957 420.075 415.957 227.264 0 412.16-186.603 412.16-415.957 0-229.333-184.896-415.915-412.16-415.915z" />
17
+ <glyph unicode="&#xe907;" glyph-name="icon-googleplus" d="M498.581 564.864c8 12.053 13.227 24.725 15.808 39.189 1.173 10.816 1.771 20.181 1.771 27.883 0 33.173-8.491 66.859-25.173 99.947-8.555 17.451-20.117 31.957-35.029 43.563-15.467 11.136-33.344 17.109-53.056 17.728-0.405 0.021-0.789 0.021-1.195 0-26.816-0.619-49.387-11.52-67.115-32.384-0.469-0.576-0.939-1.173-1.344-1.792-13.995-20.544-20.8-43.733-20.203-68.416 0-30.912 8.981-63.189 26.859-96.213 9.195-16.299 21.141-30.272 35.541-41.536 16.085-12.608 34.667-19.029 56.085-19.029h0.085c25.515 0.96 47.211 10.347 64.427 27.947 0.939 0.939 1.792 1.984 2.539 3.115zM472.192 610.155c-1.195-6.613-3.904-13.333-8.043-19.968-9.195-8.725-20.331-13.227-33.344-13.739-11.029 0-20.501 3.243-29.035 9.941-9.963 7.808-18.261 17.515-24.491 28.587-14.293 26.389-21.547 51.84-21.547 76.075-0.384 15.936 3.605 29.995 12.16 42.944 9.429 10.773 20.373 16.021 34.261 16.469 11.008-0.448 20.437-3.605 28.224-9.216 9.237-7.189 16.512-16.427 22.4-28.395 13.739-27.285 20.715-54.528 20.715-80.96 0-6.293-0.533-14.037-1.301-21.739zM462.827 320.256c-2.944 2.069-6.336 3.328-9.92 3.733-5.483 0.576-11.883 0.875-19.221 0.896-5.525 0.448-15.637 0.107-35.413-1.749-17.472-2.475-35.648-6.549-55.531-12.544-4.245-1.621-10.219-4.053-18.475-7.552-8.896-4.096-18.048-9.92-27.84-17.899-9.301-8.235-17.195-18.389-23.083-29.547-7.723-13.419-11.648-29.355-11.648-47.403 0-35.285 15.872-64.533 46.741-86.613 27.84-20.949 65.515-31.872 112.597-32.448 42.496 0.576 76.011 10.603 99.733 29.845 24.448 20.053 36.885 46.251 36.885 77.824 0 25.6-8.491 48.235-25.984 68.053-15.083 15.488-37.611 33.6-68.843 55.403zM493.803 152.064c-16-12.992-40.661-19.819-72.768-20.245-37.248 0.448-66.496 8.469-87.339 24.171-20.011 14.293-29.333 30.891-29.333 52.203 0 10.453 2.005 19.221 6.315 26.731 3.883 7.317 8.597 13.461 13.333 17.685 6.293 5.099 12.373 9.024 17.472 11.371 7.083 3.008 12.587 5.248 14.976 6.251 16.341 4.885 32.427 8.448 46.741 10.517 11.733 1.088 20.117 1.643 25.173 1.643l1.579-0.021c4.629-0.619 9.237-0.192 13.141-0.405 26.219-18.539 45.696-34.261 57.301-46.080 9.813-11.157 14.592-23.936 14.592-39.061 0.021-18.667-6.741-32.917-21.184-44.757zM581.781 407.168l-35.904 29.269c-4.971 4.971-10.048 10.709-15.893 18.005-2.005 2.24-4.672 6.165-4.672 14.315 0 7.36 1.835 13.269 6.421 19.627 4.885 7.509 10.176 14.229 14.379 18.709 11.755 10.24 22.827 20.309 34.027 30.976 9.877 10.389 19.307 21.845 28.075 34.155 19.243 27.157 29.376 63.083 30.080 107.093l0.021 7.147c0.085 16.683 0.128 25.877-5.44 44.288-6.891 18.88-13.483 33.877-23.040 45.163h13.696c6.656 0 12.907 3.115 16.939 8.384l54.293 71.040c4.928 6.464 5.781 15.147 2.197 22.421-3.627 7.232-11.029 11.84-19.157 11.84h-220.757c-30.528 0-63.616-3.584-99.008-10.795-36.928-8.597-72.789-27.093-107.84-56.043-49.792-48.149-75.051-102.933-75.051-162.859 0-50.368 18.261-94.997 53.44-131.755 34.816-40.981 85.397-62.144 150.656-62.976 1.664 0 3.371 0.021 5.099 0.064-1.259-6.037-1.877-12.629-1.877-19.883 0-20.309 4.8-38.187 13.333-51.563 0.811-1.557 1.643-3.115 2.496-4.693-18.752-1.685-39.787-4.245-63.040-7.659-41.621-7.189-81.877-21.781-119.957-43.563-35.371-21.077-60.352-46.357-74.155-74.88-13.952-27.968-21.013-54.144-21.013-77.803 0-48.619 22.165-90.624 65.28-124.309 41.856-35.392 104.704-53.739 186.795-54.507h0.533c97.131 1.515 173.056 25.579 225.728 71.509 51.84 45.312 78.123 98.56 78.123 158.613-0.747 41.92-10.752 76.757-30.165 104.107-18.411 24.171-40.192 46.549-64.64 66.56zM570.411 110.037c-44.8-39.061-111.445-59.584-198.059-60.971-71.744 0.704-125.376 15.637-160.021 44.928-33.344 26.069-49.515 55.893-49.515 91.2 0 17.003 5.568 36.779 16.64 59.008 10.219 21.099 29.632 40.299 57.365 56.853 33.408 19.115 68.971 32 105.173 38.272 37.909 5.589 69.739 8.747 94.592 9.451 8 0.213 15.211 4.885 18.645 12.096 3.456 7.232 2.581 15.765-2.261 22.123-7.168 9.429-13.675 19.712-20.203 32.064-5.099 8.085-7.595 18.005-7.595 30.293 0 8.469 1.344 13.355 2.965 17.301 2.368 6.784 4.629 13.056 6.677 18.731 2.496 6.933 1.259 14.677-3.307 20.48-4.053 5.163-10.261 8.128-16.747 8.128-0.789 0-1.579-0.043-2.368-0.128-11.947-1.344-23.061-2.027-32.832-2.027-52.843 0.661-91.563 16.363-119.232 48.853-28.565 29.888-42.453 63.637-42.453 103.211 0 48.576 20.288 91.819 60.779 131.072 28.651 23.595 58.645 39.189 88.533 46.144 31.979 6.528 62.229 9.813 89.899 9.813h177.6l-21.675-28.373h-57.557c-9.387 0-17.429-6.336-20.16-15.339-2.709-9.003 1.045-18.901 8.896-24.107 4.331-2.88 20.203-18.219 26.987-24.768l5.696-5.461c6.464-6.677 13.355-25.643 15.573-31.595 3.328-11.136 3.307-15.296 3.243-30.677l-0.021-6.976c-0.555-34.901-8.043-62.741-22.165-82.709-7.573-10.603-15.744-20.523-23.509-28.715-9.984-9.493-20.629-19.157-33.237-30.272-7.424-7.68-14.4-16.533-20.075-25.344-9.301-12.693-13.995-27.435-13.995-43.861 0-16.853 5.227-31.253 14.741-41.813 6.037-7.595 12.181-14.549 19.883-22.080l37.483-30.677c21.888-17.92 41.344-37.909 57.344-58.859 13.909-19.627 21.269-46.4 21.845-79.189-0.043-47.467-20.843-88.725-63.573-126.080zM882.517 767.232h-64v64c0 11.797-9.557 21.333-21.333 21.333s-21.333-9.536-21.333-21.333v-64h-64c-11.776 0-21.333-9.536-21.333-21.333 0-11.776 9.557-21.333 21.333-21.333h64v-64c0-11.776 9.557-21.333 21.333-21.333s21.333 9.557 21.333 21.333v64h64c11.776 0 21.333 9.557 21.333 21.333 0 11.797-9.557 21.333-21.333 21.333z" />
18
+ <glyph unicode="&#xe908;" glyph-name="icon-linkedin" d="M255.915 646.272h-172.181c-11.797 0-21.333-9.536-21.333-21.333v-601.899c0-11.797 9.536-21.333 21.333-21.333h172.181c11.797 0 21.333 9.536 21.333 21.333v601.899c0 11.797-9.536 21.333-21.333 21.333zM234.581 44.373h-129.515v559.232h129.515v-559.232zM736 653.589c-83.605 0-138.304-36.053-170.069-67.435l-3.947 40.832c-1.067 10.965-10.261 19.285-21.227 19.285h-0.427l-156.971-3.008c-5.76-0.107-11.2-2.539-15.147-6.741-3.947-4.181-6.016-9.792-5.76-15.552 1.963-43.947 1.899-95.317 1.813-154.795l-0.021-446.165c0-11.797 9.536-21.333 21.333-21.333h172.203c11.776 0 21.333 9.536 21.333 21.333v347.947c0 17.792 1.515 30.635 4.587 38.293 10.731 27.307 46.123 55.573 86.784 55.573 52.672 0 84.096-40.064 84.096-107.2v-334.592c0-11.797 9.557-21.333 21.333-21.333h169.173c11.797 0 21.333 9.536 21.333 21.333v356.416c0.043 173.568-86.101 277.141-230.421 277.141zM923.797 41.365h-126.507v313.259c0 91.029-49.749 149.867-126.763 149.867-61.077 0-110.763-42.581-126.464-82.581-5.184-12.949-7.573-30.080-7.573-53.952v-326.592h-129.536l0.021 424.747c0.085 50.539 0.128 95.253-1.045 134.912l115.499 2.219 6.635-68.821c1.067-10.944 10.24-19.264 21.248-19.264h3.627c7.36 0 14.187 3.776 18.091 10.027 12.587 20.096 61.675 85.739 164.992 85.739 119.36 0 187.797-85.44 187.797-234.475v-335.083zM177.067 897.301c-69.269 0-119.531-47.723-119.531-113.493 0-65.728 49.259-113.429 117.12-113.429 69.952 0 120.704 47.701 120.704 113.941-1.557 66.496-50.197 112.981-118.293 112.981zM174.677 713.024c-43.84 0-74.453 29.099-74.453 70.763 0 42.368 30.869 70.827 76.864 70.827 44.928 0 74.645-28.011 75.648-70.827-0.021-42.325-31.403-70.763-78.059-70.763z" />
19
+ <glyph unicode="&#xe909;" glyph-name="icon-pinterest" d="M877.205 689.515c-14.592 49.472-38.037 91.136-71.723 127.403-32.939 35.435-70.784 62.293-115.776 82.112-32.384 14.272-84.715 31.275-150.123 31.275-5.717 0-11.477-0.149-17.259-0.427-19.712-0.896-40.597-2.027-60.587-4.885-55.851-8-105.003-24.704-150.251-51.072-57.856-33.664-102.997-79.488-134.165-136.149-16.235-29.483-32.192-81.429-38.955-115.349-8.043-40.171-0.939-109.781 15.189-148.971 19.947-48.384 37.269-71.019 77.269-100.949 0.256-0.171 24.683-18.304 43.029-18.304h0.021c31.915 0.597 38.123 30.677 41.109 45.12 0.512 2.581 1.067 5.141 1.685 7.531 0.533 2.133 1.259 4.395 1.984 6.763 4.352 14.165 10.304 33.557 0.235 51.115-3.712 6.485-8.064 11.435-11.925 15.808-1.963 2.24-3.968 4.437-5.568 6.827-14.016 20.928-21.141 47.168-21.141 77.952 0 40.619 9.173 77.419 28.011 112.448 34.155 63.531 90.88 103.616 164.011 115.989 40.981 6.891 91.157 3.797 126.677-7.616 33.131-10.645 61.333-29.525 81.557-54.571 21.419-26.475 33.664-60.139 36.395-100.053 1.344-19.627 0.576-41.387-2.432-68.523-7.403-65.899-26.453-118.912-56.704-157.589-24.555-31.424-50.944-47.189-80.661-48.192l-4.011-0.085c-17.152 0-30.123 3.84-42.112 12.437-12.011 8.619-19.2 19.243-22.592 33.429-3.861 16.235 0.875 33.365 5.909 51.541l0.789 2.944c4.459 16.149 9.088 30.912 13.632 45.44 7.211 23.040 14.677 46.848 20.843 74.496 6.976 31.381 7.893 56.789 2.816 77.675-6.336 26.091-20.309 45.632-41.557 58.112-21.845 12.8-54.528 15.595-81.003 6.507-39.573-13.568-69.76-49.536-82.795-98.731-6.613-24.832-8.491-50.944-5.675-77.525 2.176-20.651 6.72-39.36 15.125-61.803-0.235-0.768-0.448-1.536-0.704-2.304-0.597-2.069-1.195-4.032-1.6-5.781-9.237-38.677-18.219-76.843-27.179-114.944-8.341-35.413-16.661-70.784-25.173-106.517l-1.92-7.957c-8.832-36.907-18.005-75.093-20.117-120.768l-0.939-18.88c-1.856-35.413-3.776-72.021 0.981-106.112 0.917-6.336 3.2-22.293 18.581-28.011 2.795-2.027 7.509-4.629 14.037-4.629 12.416 0 20.416 8.448 33.408 23.339 30.080 34.325 55.659 77.675 78.251 132.501 10.091 24.533 16.768 50.901 23.232 76.373l3.861 15.104c4.501 17.344 8.917 34.88 13.269 52.267 7.851-6.592 16.811-12.608 27.008-18.261 24.235-13.504 51.563-21.355 81.259-23.36 28.864-2.048 56.939 1.643 89.152 10.944 24.448 6.997 47.893 17.643 69.696 31.616 77.888 50.069 130.987 137.557 149.525 246.4 5.525 32.512 7.872 58.624 7.872 87.275-0.021 33.131-3.989 63.296-11.776 89.579zM838.997 519.787c-16.469-96.875-62.827-174.165-130.496-217.664-18.261-11.733-37.909-20.651-58.389-26.496-27.413-7.893-50.56-11.008-74.453-9.387-23.701 1.6-44.48 7.531-63.424 18.069-19.029 10.581-31.317 21.909-39.915 36.757-4.331 7.531-12.8 11.691-21.376 10.453-8.576-1.195-15.595-7.445-17.749-15.851l-9.6-38.037c-4.501-17.899-9.024-36.011-13.675-53.867l-3.947-15.339c-6.357-25.152-12.352-48.896-21.312-70.613-19.115-46.464-40.299-83.584-64.555-113.195-1.429 24.427-0.021 51.371 1.344 77.632l0.96 19.115c1.941 41.643 10.603 77.824 19.008 112.789l1.92 8.021c8.512 35.755 16.853 71.189 25.216 106.645 8.96 38.037 17.92 76.139 27.115 114.731l1.024 3.563c2.283 7.68 4.885 16.405 1.387 25.173-8.085 20.864-12.373 37.483-14.293 55.637-2.261 21.397-0.768 42.283 4.501 62.080 9.323 35.179 29.504 60.437 55.403 69.312 6.080 2.091 12.651 3.136 19.499 3.136 9.813 0 19.541-2.261 26.048-6.080 11.072-6.507 18.155-16.768 21.717-31.403 3.477-14.208 2.453-33.813-3.008-58.304-5.781-25.899-12.651-47.808-19.904-71.019-4.715-14.976-9.451-30.208-14.059-46.869l-0.789-2.901c-5.931-21.504-12.672-45.867-6.272-72.768 5.803-24.448 18.645-43.477 39.211-58.219 19.136-13.76 41.045-20.437 66.987-20.437l5.461 0.107c42.496 1.429 80.469 23.168 112.811 64.533 35.179 44.971 57.237 105.259 65.493 179.115 3.328 29.76 4.139 53.973 2.624 76.203-3.371 48.811-18.773 90.517-45.781 123.947-25.472 31.552-60.629 55.168-101.717 68.373-41.899 13.483-99.157 17.109-146.816 9.088-86.635-14.656-153.877-62.315-194.496-137.856-22.272-41.408-33.109-84.821-33.109-132.672 0-39.403 9.536-73.6 28.352-101.696 2.603-3.925 5.739-7.552 8.96-11.243 2.773-3.136 5.397-6.144 6.72-8.363 0.789-3.115-2.176-12.715-3.755-17.877-0.917-2.965-1.792-5.803-2.496-8.469-0.789-3.093-1.493-6.4-2.176-9.728-0.576-2.752-1.408-6.741-2.283-9.685-4.48 2.069-10.88 5.717-14.528 8.427-33.899 25.344-46.336 41.643-63.381 83.051-12.821 31.104-19.136 92.715-12.821 124.373 7.125 35.605 22.272 80.917 34.496 103.147 27.392 49.792 67.157 90.112 118.251 119.829 40.427 23.552 84.523 38.507 134.848 45.717 18.133 2.603 37.035 3.627 56.469 4.501 64.277 2.901 117.099-13.568 148.224-27.264 39.552-17.408 72.811-41.003 101.717-72.107 29.077-31.317 49.365-67.435 62.059-110.443 6.635-22.4 10.005-48.469 10.005-77.547 0.043-26.133-2.155-50.112-7.253-80.128z" />
20
+ <glyph unicode="&#xe90a;" glyph-name="icon-skype" d="M942.699 369.941c6.699 37.888 32.192 230.229-111.232 371.264-10.901 12.672-118.507 131.733-316.651 131.733-22.315 0-45.184-1.557-68.139-4.651-18.176 9.557-69.653 33.216-133.995 33.216-69.376 0-131.008-26.773-183.445-79.829-1.216-1.28-118.997-127.061-39.893-289.152-5.931-27.243-19.669-116.011 21.675-224.149 2.261-8.149 57.984-200.341 268.309-263.019 2.859-1.109 70.912-26.667 164.864-26.667 14.613 0 29.227 0.619 43.541 1.877 16.192-7.296 63.467-26.069 121.621-26.069 69.525 0 131.563 27.392 178.859 78.613 4.885 4.885 117.845 120.576 54.485 296.832zM857.451 102.656c-40.171-43.456-89.984-65.493-148.096-65.493-59.947 0-107.584 23.915-108.011 24.149-3.029 1.557-6.4 2.368-9.771 2.368-0.704 0-1.408-0.043-2.133-0.107-14.784-1.472-30.016-2.219-45.248-2.219-85.653 0-149.013 23.616-151.125 24.384-188.715 56.277-240.448 232.341-241.536 235.968-44.096 115.605-19.328 206.677-19.093 207.509 1.515 5.269 0.939 10.923-1.6 15.765-71.893 137.963 25.109 242.816 28.992 246.933 43.904 44.395 95.317 66.923 152.853 66.923 66.56 0 118.4-30.613 118.869-30.891 4.224-2.581 9.323-3.584 14.144-2.859 23.317 3.435 46.571 5.184 69.12 5.184 184.064 0 283.648-116.096 284.608-117.227 0.469-0.555 0.981-1.109 1.472-1.621 140.053-137.024 99.285-336.768 98.859-338.795-0.853-4.011-0.555-8.213 0.896-12.032 57.963-153.045-38.528-253.184-43.2-257.941zM625.579 514.773c-0.704 0.213-1.408 0.384-2.133 0.491-104.363 18.624-165.611 46.571-165.781 46.571-13.547 7.68-21.355 15.829-22.016 22.955-0.704 7.616 6.421 16.811 10.923 21.163 26.133 13.248 50.624 19.968 72.789 19.968 48.491 0 71.296-32.235 72.277-33.6 31.723-46.933 64.32-70.72 96.811-70.72 21.781 0 34.773 10.944 36.779 12.8 21.419 18.795 32.747 41.771 32.811 66.453 0.085 47.339-39.979 84.053-44.096 87.701-48.085 44.843-112.107 67.584-190.229 67.584-72.875 0-131.157-20.309-133.312-21.056-125.44-42.155-135.765-150.293-123.733-201.579 0.192-0.811 0.448-1.6 0.704-2.368 46.293-128.107 240.448-144.683 248.683-145.344 88.832-7.019 92.971-48.448 93.12-50.837 3.093-43.243-74.432-56.576-86.443-58.389-77.525 4.373-96.171 34.005-96.213 34.005 0 0 0 0 0-0.021-0.619 1.28-1.344 2.453-2.197 3.563-42.581 56.341-59.2 75.883-96.448 76.843l-2.88 0.043c-29.845 0-47.509-12.587-57.045-23.147-24.256-26.837-21.077-65.664-20.651-69.995 0.107-0.939 0.277-1.877 0.469-2.816 34.475-144.299 218.56-148.459 239.467-148.459h0.491c11.221-0.661 22.037-0.981 32.427-0.981 245.867 0 262.72 179.627 262.805 181.035 10.731 110.059-98.24 171.2-157.376 188.139zM740.544 330.411c-0.533-6.059-17.579-155.2-250.901-141.248-0.448 0.043-1.941 0.043-2.347 0.043-17.344 0-169.536 3.221-197.547 114.048-0.213 4.907-0.341 24.597 9.899 35.968 5.547 6.123 14.72 9.387 27.157 9.067 15.424-0.405 22.101-5.184 62.656-58.773 6.635-11.157 36.8-50.837 133.099-55.659 1.195-0.064 2.325-0.021 3.477 0.107 49.045 5.589 130.731 33.771 125.781 102.869-0.064 3.307-2.816 81.259-132.416 91.499-1.728 0.149-173.461 14.677-211.435 116.053-2.56 12.373-19.157 111.552 96.341 150.357 0.533 0.192 53.781 18.731 119.424 18.731 66.987 0 121.195-18.901 161.493-56.448 8.427-7.552 30.272-32.363 30.165-56.213-0.085-12.373-6.037-23.595-18.027-34.133-0.128-0.085-3.264-2.411-8.896-2.411-7.915 0-29.76 5.056-61.376 51.819-1.408 2.155-35.669 52.523-107.712 52.523-29.76 0-61.632-8.725-94.763-25.963-1.301-0.683-2.496-1.472-3.627-2.389-3.136-2.56-30.613-25.984-27.84-58.944 1.877-22.229 16.512-41.259 44.971-57.344 2.667-1.259 66.091-30.613 176.619-50.475 13.269-4.032 135.381-44.011 125.803-143.083z" />
21
+ <glyph unicode="&#xe90b;" glyph-name="icon-twitter" d="M973.397 743.083c-7.552 5.163-17.515 4.971-24.832-0.491-5.056-3.776-12.587-7.125-21.376-10.069 28.949 35.925 29.376 59.925 28.949 65.813-0.576 7.68-5.248 14.485-12.224 17.749-6.976 3.285-15.168 2.56-21.461-1.963-39.467-28.267-78.955-34.389-101.973-35.2-37.504 34.859-86.016 53.952-137.536 53.952-111.509 0-202.24-90.709-202.24-202.219 0-8.064 0.491-16.107 1.429-24.085-186.112 4.608-337.024 180.011-338.539 181.824-4.48 5.269-11.179 8.085-18.133 7.445-6.891-0.576-13.056-4.501-16.555-10.453-47.36-80.981-28.032-157.696 4.437-211.328-6.037 3.243-13.333 3.456-19.584 0.341-7.147-3.541-11.712-10.795-11.861-18.752-1.387-85.056 37.461-136.064 76.672-165.76-2.88-1.173-5.504-2.987-7.68-5.355-5.099-5.589-6.869-13.483-4.629-20.715 27.243-87.851 91.243-120.789 136.149-133.141-51.477-36.288-115.2-44.821-163.605-44.821-30.891 0-52.203 3.669-52.416 3.712-9.643 1.707-19.349-3.456-23.275-12.523-3.904-9.045-1.152-19.627 6.741-25.536 97.152-73.024 214.421-88.384 295.744-88.384 64.256 0 108.907 9.387 111.168 9.877 417.323 97.472 433.195 471.659 432.512 539.819 78.229 71.893 90.688 99.947 92.651 106.944 2.411 8.768-1.003 18.155-8.533 23.317zM853.333 637.781c-4.843-4.373-7.403-10.731-6.955-17.28 0.277-4.053 23.083-407.317-398.955-505.877-0.427-0.085-42.453-8.853-101.867-8.853-55.381 0-128.704 7.595-198.635 38.293 64.021 4.096 142.571 23.744 199.061 86.229 5.653 6.272 7.040 15.275 3.605 22.976-3.435 7.68-11.115 12.672-19.563 12.672-3.968 0-87.936 1.024-129.963 79.061 19.456-0.619 37.077 2.261 50.176 8.235 8.405 3.819 13.333 12.565 12.352 21.717-0.981 9.173-7.765 16.64-16.768 18.581-4.544 0.981-101.205 22.976-118.635 124.928 15.147-5.781 33.579-9.792 51.413-7.168 8.277 1.237 15.083 7.189 17.365 15.253 2.304 8.043-0.299 16.704-6.677 22.123-4.267 3.627-96.448 83.733-56.427 188.565 53.696-54.528 199.808-182.805 376-172.885 6.357 0.363 12.224 3.563 16 8.704s5.035 11.712 3.456 17.877c-3.307 12.928-4.971 26.283-4.971 39.723 0 87.979 71.595 159.552 159.573 159.552 43.115 0 83.499-16.939 113.749-47.659 3.925-3.989 9.259-6.272 14.848-6.379l3.285-0.021c15.68 0 40.256 1.899 68.437 10.987-9.024-9.536-20.757-20.288-35.989-32.043-7.467-5.781-10.24-15.765-6.848-24.576 3.413-8.789 12.267-14.336 21.589-13.589 3.456 0.299 18.645 1.6 37.44 4.971-11.797-12.117-26.88-26.688-46.101-44.117z" />
22
+ <glyph unicode="&#xe90c;" glyph-name="icon-vimeo" d="M924.011 765.44c-41.131 61.333-114.411 63.872-117.504 63.957l-7.467 0.107c-200.555 0-249.429-210.581-249.92-212.715-1.621-7.339 0.747-14.997 6.251-20.16 5.504-5.141 13.248-7.019 20.501-4.928 43.2 12.459 73.792 11.435 84.8-2.624 8.448-10.795 6.699-29.248 5.12-36.629-64.299-162.603-104.256-182.016-111.573-184.256-22.037 15.275-55.36 143.381-72.299 279.36-19.563 140.715-80.427 170.24-128 170.24-31.147 0-55.915-13.184-62.272-16.917-80.341-37.205-206.507-169.003-211.861-174.635-7.509-7.851-7.893-20.096-0.917-28.416l40.171-47.915c3.925-4.693 9.707-7.488 15.829-7.616 5.803-0.299 12.011 2.325 16.171 6.827 27.328 29.525 43.179 32.704 48.725 32.704 8.149 0 12.16-7.061 13.013-8.704 46.528-93.525 78.315-227.904 78.656-229.397 60.544-250.219 142.336-277.227 174.699-277.227 3.861 0 6.229 0.427 6.187 0.448 231.829 29.696 437.099 439.488 446.549 458.773 39.872 104.683 41.621 185.323 5.141 239.723zM879.787 542.763c-2.027-4.053-203.733-407.040-413.376-433.6l-0.299-21.333v21.333c-3.029 0-74.709 2.795-133.184 244.437-1.344 5.696-33.216 140.501-81.664 237.867-5.611 12.245-22.763 33.024-51.52 33.024-19.925 0-40.64-9.664-62.891-29.483l-12.907 15.403c34.432 34.688 127.68 125.44 186.432 152.128 0.853 0.405 1.664 0.832 2.453 1.344 0.171 0.107 18.688 11.243 41.045 11.243 55.531 0 77.291-72.555 85.717-133.163 10.816-87.019 42.24-291.392 100.48-314.347 2.624-1.109 6.976-2.368 12.864-2.368 45.867 0 97.365 71.637 153.088 212.971 0.341 0.789 0.576 1.6 0.811 2.411 1.173 4.48 10.731 44.544-12.331 74.389-18.112 23.467-48.811 32.469-92.587 26.069 21.035 51.904 75.883 145.749 197.099 145.749l6.357-0.085c0.533-0.021 54.208-1.877 83.179-45.056 27.947-41.664 24.619-111.061-8.768-198.933z" />
23
+ <glyph unicode="&#xe90d;" glyph-name="icon-zerply" d="M871.915 200.555c-1.728 6.805-6.677 12.352-13.291 14.763-6.592 2.411-13.909 1.472-19.712-2.581-28.096-19.861-57.344-29.525-89.387-29.525-60.715 0-123.264 33.963-189.525 69.867-52.544 28.523-106.539 57.792-162.133 70.485 45.525 49.707 94.123 100.843 141.419 150.571 56.789 59.691 115.499 121.429 170.411 182.336 8.021 8.875 16.448 17.664 24.917 26.475 49.344 51.413 105.259 109.717 93.291 203.285-0.704 5.781-3.797 11.029-8.469 14.485s-10.581 4.821-16.341 3.84c-44.693-7.787-134.251-20.885-232.277-20.885-88.747 0-160.213 11.264-206.677 32.555-8.277 3.861-18.027 1.941-24.299-4.608-40.619-42.347-85.44-97.664-71.253-150.037 17.045-62.869 129.301-57.813 224.619-55.36 2.752 0.085 5.419 0.149 8.128 0.213-66.795-86.955-146.411-181.184-237.099-280.64-8.512-9.344-17.429-18.368-26.325-27.435-50.645-51.435-108.011-109.781-88.363-220.075 2.005-11.264 12.416-18.923 23.936-17.365 99.968 13.909 194.432-6.4 279.851-60.053 17.92-11.264 35.264-23.936 53.675-37.312 42.816-31.211 87.104-63.488 140.075-78.251 17.877-4.992 36.096-7.531 54.165-7.531 56.832 0 108.501 24.469 141.717 67.136 33.259 42.688 43.541 97.963 28.949 155.648zM809.344 71.125c-33.259-42.688-93.077-60.779-150.741-44.757-45.547 12.715-86.677 42.667-126.443 71.637-18.155 13.205-36.885 26.901-56.064 38.933-74.88 47.040-156.203 70.891-241.792 70.891-14.912 0-30.101-0.725-45.355-2.197-6.443 75.541 33.6 116.224 79.403 162.795 9.301 9.429 18.581 18.88 27.456 28.629 103.872 113.899 193.408 221.12 266.133 318.677 4.843 6.485 5.589 15.104 1.963 22.315-3.605 7.211-10.987 11.776-19.072 11.776-16.149 0-34.069-0.469-52.672-0.939-19.776-0.533-40.405-1.067-60.565-1.067-100.075 0-119.296 15.616-121.792 24.917-5.952 21.973 11.157 55.147 50.88 98.667 51.755-20.181 122.325-30.421 210.176-30.421 86.123 0 165.781 9.771 216 17.6-1.173-60.843-41.045-102.4-83.008-146.133-8.789-9.152-17.493-18.219-25.792-27.435-54.571-60.48-113.067-122.027-169.664-181.525-56.875-59.84-115.712-121.664-168.96-180.928-5.483-6.059-6.976-14.741-3.883-22.336 3.093-7.552 10.24-12.715 18.411-13.205 60.821-3.733 124.288-38.144 185.707-71.467 68.011-36.885 138.304-75.051 209.856-75.051 30.421 0 58.731 6.677 85.781 20.288 2.347-33.557-6.528-64.683-25.963-89.664z" />
24
+ <glyph unicode="&#xe90e;" glyph-name="quote" d="M861.576 486.852h-155.377c0 128.663 104.358 233.020 233.050 233.020 42.918 0 77.673 34.786 77.673 77.704 0 42.857-34.756 77.673-77.673 77.673-214.528 0-388.397-173.899-388.397-388.397v-310.724c0-85.835 69.572-155.347 155.347-155.347h155.377c85.805 0 155.347 69.542 155.347 155.347v155.347c0.030 85.805-69.542 155.377-155.347 155.377zM395.475 719.872c42.918 0 77.704 34.786 77.704 77.704 0 42.857-34.786 77.673-77.704 77.673-214.498 0-388.397-173.899-388.397-388.397v-310.724c0-85.835 69.572-155.347 155.377-155.347h155.347c85.805 0 155.377 69.542 155.377 155.347v155.347c0 85.835-69.602 155.377-155.377 155.377h-155.347c0 128.663 104.297 233.020 233.020 233.020z" />
25
+ <glyph unicode="&#xe90f;" glyph-name="video-play" d="M511 960c-267.568 0-487.158-205.256-510-466.896v-90.208c22.842-261.64 242.432-466.896 510-466.896 282.77 0 512 229.23 512 512s-229.23 512-512 512zM513-20c-259.574 0-470 210.426-470 470s210.426 469 470 469 470-209.426 470-469-210.426-470-470-470zM372 688.5c0 0-30 10.5-29-14.5-1-25 0.5-421 0-452 0-27 7.2-29.4 29-14 29 16 398.6 231 398.6 231l-1.2 19.8-397.4 229.7zM704 447l-319-184.5v370.5l319-183.5v-2.5z" />
26
+ <glyph unicode="&#xe910;" glyph-name="icon-email" d="M960 108.885h-896c-35.285 0-64 28.715-64 64v550.229c0 35.285 28.715 64 64 64h896c35.285 0 64-28.715 64-64v-550.229c0-35.307-28.715-64-64-64zM64 744.448c-11.755 0-21.333-9.579-21.333-21.333v-550.229c0-11.776 9.579-21.333 21.333-21.333h896c11.776 0 21.333 9.557 21.333 21.333v550.229c0 11.755-9.557 21.333-21.333 21.333h-896zM512.064 303.125c-0.021 0-0.043 0-0.085 0-42.069 0.043-81.408 17.536-110.784 49.344l-342.144 369.195c-8 8.64-7.509 22.144 1.152 30.144 8.619 8 22.144 7.509 30.144-1.152l342.144-369.216c21.227-22.976 49.451-35.627 79.509-35.648 0.021 0 0.043 0 0.064 0 30.080 0 58.368 12.672 79.659 35.648l341.909 369.216c7.979 8.661 21.483 9.173 30.144 1.173 8.64-8 9.173-21.504 1.152-30.144l-341.909-369.237c-29.461-31.808-68.843-49.323-110.955-49.323zM61.696 151.381c-5.099 0-10.197 1.813-14.272 5.504-8.747 7.893-9.429 21.376-1.536 30.123l262.229 290.603c7.872 8.768 21.355 9.451 30.123 1.536 8.747-7.893 9.429-21.376 1.536-30.123l-262.251-290.603c-4.203-4.672-10.005-7.040-15.829-7.040zM962.325 151.381c-5.803 0-11.627 2.368-15.829 7.040l-262.251 290.603c-7.893 8.747-7.211 22.229 1.536 30.123 8.725 7.893 22.229 7.232 30.123-1.536l262.251-290.603c7.893-8.747 7.211-22.229-1.536-30.123-4.075-3.691-9.173-5.504-14.293-5.504z" />
27
+ <glyph unicode="&#xe911;" glyph-name="close" d="M36.447 953.748l981.311-981.311-30.17-30.17-981.311 981.311 30.17 30.17zM987.576 953.748l30.17-30.17-981.311-981.311-30.17 30.17 981.311 981.311z" />
28
+ <glyph unicode="&#xe912;" glyph-name="icon-plus" d="M0.021 469.333h1023.957v-42.667h-1023.957v42.667zM490.688 960h42.667v-1024h-42.667v1024z" />
29
+ <glyph unicode="&#xe913;" glyph-name="arrow-right-toggle" d="M777.312 503.168l-306.752 306.752c-28.096 28.096-74.144 28.096-102.24 0l-25.6-25.6c-28.096-28.064-28.096-74.112 0-102.208l234.048-234.112-234.080-234.080c-28.096-28.096-28.096-74.144 0-102.208l25.6-25.6c28.096-28.128 74.144-28.128 102.24 0l306.752 306.784c15.104 15.072 21.824 35.296 20.704 55.136 1.152 19.808-5.568 40.032-20.672 55.136z" />
30
+ <glyph unicode="&#xe914;" glyph-name="menu" d="M0 783.275h1024v-42.667h-1024v42.667zM0 469.312h1024v-42.667h-1024v42.667zM0 155.392h1024v-42.667h-1024v42.667z" />
31
+ <glyph unicode="&#xe915;" glyph-name="menu-2" d="M916.523-64h-809.003c-59.285 0-107.52 48.256-107.52 107.541v26.283c0 59.264 48.235 107.499 107.52 107.499h809.003c59.264 0 107.477-48.235 107.477-107.499v-26.283c0-59.285-48.213-107.541-107.477-107.541zM107.52 134.656c-35.755 0-64.853-29.077-64.853-64.832v-26.283c0-35.776 29.099-64.875 64.853-64.875h809.003c35.733 0 64.811 29.099 64.811 64.875v26.283c0 35.755-29.077 64.832-64.811 64.832h-809.003zM916.523 327.317h-809.003c-59.285 0-107.52 48.256-107.52 107.541v26.325c0 59.264 48.235 107.499 107.52 107.499h809.003c59.264 0 107.477-48.235 107.477-107.499v-26.325c0-59.307-48.213-107.541-107.477-107.541zM107.52 526.016c-35.755 0-64.853-29.077-64.853-64.832v-26.325c0-35.776 29.099-64.875 64.853-64.875h809.003c35.733 0 64.811 29.099 64.811 64.875v26.325c0 35.755-29.077 64.832-64.811 64.832h-809.003zM916.523 718.677h-809.003c-59.285 0-107.52 48.213-107.52 107.477v26.347c0 59.264 48.235 107.499 107.52 107.499h809.003c59.264 0 107.477-48.235 107.477-107.499v-26.304c0-59.285-48.213-107.52-107.477-107.52zM107.52 917.333c-35.755 0-64.853-29.077-64.853-64.832v-26.347c0-35.733 29.099-64.811 64.853-64.811h809.003c35.733 0 64.811 29.099 64.811 64.853v26.304c0 35.755-29.077 64.832-64.811 64.832h-809.003z" />
32
+ <glyph unicode="&#xe916;" glyph-name="Fit-To" d="M17.067-64c-4.403 0-8.772 1.673-12.117 5.052-6.622 6.656-6.554 17.51 0.102 24.132l331.503 328.533c6.69 6.588 17.476 6.554 24.132-0.068 6.622-6.69 6.588-17.545-0.102-24.201l-331.503-328.533c-3.345-3.277-7.68-4.915-12.015-4.915zM691.746 607.642c-4.335 0-8.67 1.638-12.049 4.949-6.69 6.622-6.758 17.442-0.137 24.132l315.221 318.191c6.588 6.724 17.476 6.758 24.132 0.137s6.724-17.442 0.137-24.132l-315.221-318.225c-3.379-3.345-7.68-5.052-12.083-5.052zM1006.933 738.133c-9.387 0-17.067 7.646-17.067 17.067v170.667h-170.667c-9.387 0-17.067 7.646-17.067 17.067s7.68 17.067 17.067 17.067h187.733c9.387 0 17.067-7.646 17.067-17.067v-187.733c0-9.421-7.68-17.067-17.067-17.067zM204.8-64h-187.733c-9.421 0-17.067 7.68-17.067 17.067v187.733c0 9.387 7.646 17.067 17.067 17.067s17.067-7.68 17.067-17.067v-170.667h170.667c9.421 0 17.067-7.68 17.067-17.067s-7.646-17.067-17.067-17.067z" />
33
+ <glyph unicode="&#xe917;" glyph-name="Full-Screen2" d="M17.067-64c-4.403 0-8.772 1.673-12.117 5.052-6.622 6.656-6.554 17.51 0.102 24.132l331.503 328.533c6.69 6.588 17.476 6.554 24.132-0.068 6.622-6.69 6.588-17.545-0.102-24.201l-331.503-328.533c-3.345-3.277-7.68-4.915-12.015-4.915zM691.746 607.642c-4.335 0-8.67 1.638-12.049 4.949-6.69 6.622-6.758 17.442-0.137 24.132l315.221 318.191c6.588 6.724 17.476 6.758 24.132 0.137s6.724-17.442 0.137-24.132l-315.221-318.225c-3.379-3.345-7.68-5.052-12.083-5.052zM1006.933-64c-4.471 0-9.011 1.775-12.322 5.257l-315.187 328.533c-6.519 6.793-6.349 17.613 0.546 24.132 6.793 6.485 17.613 6.315 24.132-0.546l315.187-328.533c6.519-6.793 6.349-17.613-0.546-24.132-3.311-3.14-7.543-4.71-11.81-4.71zM348.604 607.642c-4.267 0-8.533 1.57-11.81 4.745l-331.537 318.225c-6.793 6.519-7.031 17.34-0.512 24.132 6.554 6.793 17.34 7.031 24.132 0.512l331.537-318.225c6.793-6.519 7.031-17.34 0.512-24.132-3.345-3.482-7.817-5.257-12.322-5.257zM1006.933 738.133c-9.387 0-17.067 7.646-17.067 17.067v170.667h-170.667c-9.387 0-17.067 7.646-17.067 17.067s7.68 17.067 17.067 17.067h187.733c9.387 0 17.067-7.646 17.067-17.067v-187.733c0-9.421-7.68-17.067-17.067-17.067zM1006.933-64h-187.733c-9.387 0-17.067 7.68-17.067 17.067s7.68 17.067 17.067 17.067h170.667v170.667c0 9.387 7.68 17.067 17.067 17.067s17.067-7.68 17.067-17.067v-187.733c0-9.387-7.68-17.067-17.067-17.067zM17.067 738.133c-9.421 0-17.067 7.646-17.067 17.067v187.733c0 9.421 7.646 17.067 17.067 17.067h187.733c9.421 0 17.067-7.646 17.067-17.067s-7.646-17.067-17.067-17.067h-170.667v-170.667c0-9.421-7.646-17.067-17.067-17.067zM204.8-64h-187.733c-9.421 0-17.067 7.68-17.067 17.067v187.733c0 9.387 7.646 17.067 17.067 17.067s17.067-7.68 17.067-17.067v-170.667h170.667c9.421 0 17.067-7.68 17.067-17.067s-7.646-17.067-17.067-17.067z" />
34
+ <glyph unicode="&#xe918;" glyph-name="arrow-left2" d="M167.488 448.043l-1.643 1.664 241.344 241.344 30.165-30.165-188.075-188.096h-7.957v-42.667h0.896l195.008-195.008-30.165-30.165-241.323 241.344z" />
35
+ <glyph unicode="&#xe919;" glyph-name="arrow-left22" d="M241.003 426.603c-5.781 0-11.584 2.368-15.787 7.040-7.872 8.704-7.211 22.165 1.493 30.037l541.995 490.816c8.704 7.915 22.208 7.253 30.037-1.493 7.915-8.704 7.253-22.165-1.493-30.080l-541.952-490.773c-4.075-3.712-9.195-5.547-14.293-5.547zM782.997-64.021c-5.12 0-10.24 1.835-14.293 5.547l-541.995 490.624c-8.704 7.872-9.365 21.333-1.493 30.037 7.872 8.747 21.333 9.451 30.080 1.493l541.952-490.581c8.747-7.872 9.408-21.376 1.493-30.080-4.203-4.629-9.941-7.040-15.744-7.040z" />
36
+ <glyph unicode="&#xe91a;" glyph-name="arrow-right2" d="M856.512 447.957l1.643-1.621-241.387-241.387-30.165 30.165 188.075 188.096h7.979v42.667h-0.875l-195.051 195.008 30.165 30.165 241.365-241.344z" />
37
+ <glyph unicode="&#xe91b;" glyph-name="arrow-right22" d="M782.976 426.624c-5.077 0-10.219 1.792-14.251 5.504l-542.037 490.773c-8.704 7.893-9.365 21.355-1.493 30.059 7.915 8.747 21.376 9.408 30.080 1.493l541.995-490.752c8.747-7.915 9.408-21.376 1.493-30.080-4.203-4.672-9.941-6.997-15.787-6.997zM241.024-64c-5.824 0-11.627 2.368-15.829 6.997-7.872 8.704-7.168 22.208 1.493 30.080l542.037 490.624c8.661 7.915 22.165 7.211 30.037-1.493 7.915-8.704 7.211-22.208-1.493-30.080l-541.995-490.624c-4.075-3.669-9.195-5.504-14.251-5.504z" />
38
+ <glyph unicode="&#xe91c;" glyph-name="Start" d="M105.54-59.733c-2.867 0-5.769 0.717-8.397 2.15-5.359 3.038-8.67 8.738-8.67 14.916v981.333c0 6.144 3.311 11.844 8.67 14.848 5.359 3.038 11.947 2.935 17.203-0.239l812.954-490.598c5.086-3.072 8.226-8.602 8.226-14.609 0-5.973-3.14-11.537-8.226-14.609l-812.954-490.735c-2.697-1.673-5.769-2.458-8.806-2.458zM122.607 908.459v-920.883l762.88 460.493-762.88 460.39z" />
39
+ <glyph unicode="&#xea92;" glyph-name="instagram" d="M512 867.8c136.8 0 153-0.6 206.8-3 50-2.2 77-10.6 95-17.6 23.8-9.2 41-20.4 58.8-38.2 18-18 29-35 38.4-58.8 7-18 15.4-45.2 17.6-95 2.4-54 3-70.2 3-206.8s-0.6-153-3-206.8c-2.2-50-10.6-77-17.6-95-9.2-23.8-20.4-41-38.2-58.8-18-18-35-29-58.8-38.4-18-7-45.2-15.4-95-17.6-54-2.4-70.2-3-206.8-3s-153 0.6-206.8 3c-50 2.2-77 10.6-95 17.6-23.8 9.2-41 20.4-58.8 38.2-18 18-29 35-38.4 58.8-7 18-15.4 45.2-17.6 95-2.4 54-3 70.2-3 206.8s0.6 153 3 206.8c2.2 50 10.6 77 17.6 95 9.2 23.8 20.4 41 38.2 58.8 18 18 35 29 58.8 38.4 18 7 45.2 15.4 95 17.6 53.8 2.4 70 3 206.8 3zM512 960c-139 0-156.4-0.6-211-3-54.4-2.4-91.8-11.2-124.2-23.8-33.8-13.2-62.4-30.6-90.8-59.2-28.6-28.4-46-57-59.2-90.6-12.6-32.6-21.4-69.8-23.8-124.2-2.4-54.8-3-72.2-3-211.2s0.6-156.4 3-211c2.4-54.4 11.2-91.8 23.8-124.2 13.2-33.8 30.6-62.4 59.2-90.8 28.4-28.4 57-46 90.6-59 32.6-12.6 69.8-21.4 124.2-23.8 54.6-2.4 72-3 211-3s156.4 0.6 211 3c54.4 2.4 91.8 11.2 124.2 23.8 33.6 13 62.2 30.6 90.6 59s46 57 59 90.6c12.6 32.6 21.4 69.8 23.8 124.2 2.4 54.6 3 72 3 211s-0.6 156.4-3 211c-2.4 54.4-11.2 91.8-23.8 124.2-12.6 34-30 62.6-58.6 91-28.4 28.4-57 46-90.6 59-32.6 12.6-69.8 21.4-124.2 23.8-54.8 2.6-72.2 3.2-211.2 3.2v0zM512 711c-145.2 0-263-117.8-263-263s117.8-263 263-263 263 117.8 263 263c0 145.2-117.8 263-263 263zM512 277.4c-94.2 0-170.6 76.4-170.6 170.6s76.4 170.6 170.6 170.6c94.2 0 170.6-76.4 170.6-170.6s-76.4-170.6-170.6-170.6zM846.8 721.4c0-33.91-27.49-61.4-61.4-61.4s-61.4 27.49-61.4 61.4c0 33.91 27.49 61.4 61.4 61.4s61.4-27.49 61.4-61.4z" />
40
+ </font></defs></svg>
assets/css/fonts/icomoon/icomoon.ttf ADDED
Binary file
assets/css/fonts/icomoon/icomoon.woff ADDED
Binary file
assets/js/modernizr-custom.js DELETED
@@ -1,1384 +0,0 @@
1
- /*!
2
- * modernizr v3.3.1
3
- * Build http://modernizr.com/download?-csstransforms-csstransforms3d-flexbox-flexboxlegacy-touchevents-setclasses-shiv-dontmin-cssclassprefix:lae-
4
- *
5
- * Copyright (c)
6
- * Faruk Ates
7
- * Paul Irish
8
- * Alex Sexton
9
- * Ryan Seddon
10
- * Patrick Kettner
11
- * Stu Cox
12
- * Richard Herrera
13
-
14
- * MIT License
15
- */
16
-
17
- /*
18
- * Modernizr tests which native CSS3 and HTML5 features are available in the
19
- * current UA and makes the results available to you in two ways: as properties on
20
- * a global `Modernizr` object, and as classes on the `<html>` element. This
21
- * information allows you to progressively enhance your pages with a granular level
22
- * of control over the experience.
23
- */
24
-
25
- ;(function(window, document, undefined){
26
- var classes = [];
27
-
28
-
29
- var tests = [];
30
-
31
-
32
- /**
33
- *
34
- * ModernizrProto is the constructor for Modernizr
35
- *
36
- * @class
37
- * @access public
38
- */
39
-
40
- var ModernizrProto = {
41
- // The current version, dummy
42
- _version: '3.3.1',
43
-
44
- // Any settings that don't work as separate modules
45
- // can go in here as configuration.
46
- _config: {
47
- 'classPrefix': "lae-",
48
- 'enableClasses': true,
49
- 'enableJSClass': true,
50
- 'usePrefixes': true
51
- },
52
-
53
- // Queue of tests
54
- _q: [],
55
-
56
- // Stub these for people who are listening
57
- on: function(test, cb) {
58
- // I don't really think people should do this, but we can
59
- // safe guard it a bit.
60
- // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.
61
- // This is in case people listen to synchronous tests. I would leave it out,
62
- // but the code to *disallow* sync tests in the real version of this
63
- // function is actually larger than this.
64
- var self = this;
65
- setTimeout(function() {
66
- cb(self[test]);
67
- }, 0);
68
- },
69
-
70
- addTest: function(name, fn, options) {
71
- tests.push({name: name, fn: fn, options: options});
72
- },
73
-
74
- addAsyncTest: function(fn) {
75
- tests.push({name: null, fn: fn});
76
- }
77
- };
78
-
79
-
80
-
81
- // Fake some of Object.create so we can force non test results to be non "own" properties.
82
- var Modernizr = function() {};
83
- Modernizr.prototype = ModernizrProto;
84
-
85
- // Leak modernizr globally when you `require` it rather than force it here.
86
- // Overwrite name so constructor name is nicer :D
87
- Modernizr = new Modernizr();
88
-
89
-
90
-
91
- /**
92
- * is returns a boolean if the typeof an obj is exactly type.
93
- *
94
- * @access private
95
- * @function is
96
- * @param {*} obj - A thing we want to check the type of
97
- * @param {string} type - A string to compare the typeof against
98
- * @returns {boolean}
99
- */
100
-
101
- function is(obj, type) {
102
- return typeof obj === type;
103
- }
104
- ;
105
-
106
- /**
107
- * Run through all tests and detect their support in the current UA.
108
- *
109
- * @access private
110
- */
111
-
112
- function testRunner() {
113
- var featureNames;
114
- var feature;
115
- var aliasIdx;
116
- var result;
117
- var nameIdx;
118
- var featureName;
119
- var featureNameSplit;
120
-
121
- for (var featureIdx in tests) {
122
- if (tests.hasOwnProperty(featureIdx)) {
123
- featureNames = [];
124
- feature = tests[featureIdx];
125
- // run the test, throw the return value into the Modernizr,
126
- // then based on that boolean, define an appropriate className
127
- // and push it into an array of classes we'll join later.
128
- //
129
- // If there is no name, it's an 'async' test that is run,
130
- // but not directly added to the object. That should
131
- // be done with a post-run addTest call.
132
- if (feature.name) {
133
- featureNames.push(feature.name.toLowerCase());
134
-
135
- if (feature.options && feature.options.aliases && feature.options.aliases.length) {
136
- // Add all the aliases into the names list
137
- for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {
138
- featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());
139
- }
140
- }
141
- }
142
-
143
- // Run the test, or use the raw value if it's not a function
144
- result = is(feature.fn, 'function') ? feature.fn() : feature.fn;
145
-
146
-
147
- // Set each of the names on the Modernizr object
148
- for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {
149
- featureName = featureNames[nameIdx];
150
- // Support dot properties as sub tests. We don't do checking to make sure
151
- // that the implied parent tests have been added. You must call them in
152
- // order (either in the test, or make the parent test a dependency).
153
- //
154
- // Cap it to TWO to make the logic simple and because who needs that kind of subtesting
155
- // hashtag famous last words
156
- featureNameSplit = featureName.split('.');
157
-
158
- if (featureNameSplit.length === 1) {
159
- Modernizr[featureNameSplit[0]] = result;
160
- } else {
161
- // cast to a Boolean, if not one already
162
- /* jshint -W053 */
163
- if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {
164
- Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);
165
- }
166
-
167
- Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;
168
- }
169
-
170
- classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));
171
- }
172
- }
173
- }
174
- }
175
- ;
176
-
177
- /**
178
- * docElement is a convenience wrapper to grab the root element of the document
179
- *
180
- * @access private
181
- * @returns {HTMLElement|SVGElement} The root element of the document
182
- */
183
-
184
- var docElement = document.documentElement;
185
-
186
-
187
- /**
188
- * A convenience helper to check if the document we are running in is an SVG document
189
- *
190
- * @access private
191
- * @returns {boolean}
192
- */
193
-
194
- var isSVG = docElement.nodeName.toLowerCase() === 'svg';
195
-
196
-
197
- /**
198
- * setClasses takes an array of class names and adds them to the root element
199
- *
200
- * @access private
201
- * @function setClasses
202
- * @param {string[]} classes - Array of class names
203
- */
204
-
205
- // Pass in an and array of class names, e.g.:
206
- // ['no-webp', 'borderradius', ...]
207
- function setClasses(classes) {
208
- var className = docElement.className;
209
- var classPrefix = Modernizr._config.classPrefix || '';
210
-
211
- if (isSVG) {
212
- className = className.baseVal;
213
- }
214
-
215
- // Change `no-js` to `js` (independently of the `enableClasses` option)
216
- // Handle classPrefix on this too
217
- if (Modernizr._config.enableJSClass) {
218
- var reJS = new RegExp('(^|\\s)' + classPrefix + 'no-js(\\s|$)');
219
- className = className.replace(reJS, '$1' + classPrefix + 'js$2');
220
- }
221
-
222
- if (Modernizr._config.enableClasses) {
223
- // Add the new classes
224
- className += ' ' + classPrefix + classes.join(' ' + classPrefix);
225
- isSVG ? docElement.className.baseVal = className : docElement.className = className;
226
- }
227
-
228
- }
229
-
230
- ;
231
-
232
- /**
233
- * @optionName html5shiv
234
- * @optionProp html5shiv
235
- */
236
-
237
- // Take the html5 variable out of the html5shiv scope so we can return it.
238
- var html5;
239
- if (!isSVG) {
240
- /**
241
- * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
242
- */
243
- ;(function(window, document) {
244
- /*jshint evil:true */
245
- /** version */
246
- var version = '3.7.3';
247
-
248
- /** Preset options */
249
- var options = window.html5 || {};
250
-
251
- /** Used to skip problem elements */
252
- var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
253
-
254
- /** Not all elements can be cloned in IE **/
255
- var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
256
-
257
- /** Detect whether the browser supports default html5 styles */
258
- var supportsHtml5Styles;
259
-
260
- /** Name of the expando, to work with multiple documents or to re-shiv one document */
261
- var expando = '_html5shiv';
262
-
263
- /** The id for the the documents expando */
264
- var expanID = 0;
265
-
266
- /** Cached data for each document */
267
- var expandoData = {};
268
-
269
- /** Detect whether the browser supports unknown elements */
270
- var supportsUnknownElements;
271
-
272
- (function() {
273
- try {
274
- var a = document.createElement('a');
275
- a.innerHTML = '<xyz></xyz>';
276
- //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
277
- supportsHtml5Styles = ('hidden' in a);
278
-
279
- supportsUnknownElements = a.childNodes.length == 1 || (function() {
280
- // assign a false positive if unable to shiv
281
- (document.createElement)('a');
282
- var frag = document.createDocumentFragment();
283
- return (
284
- typeof frag.cloneNode == 'undefined' ||
285
- typeof frag.createDocumentFragment == 'undefined' ||
286
- typeof frag.createElement == 'undefined'
287
- );
288
- }());
289
- } catch(e) {
290
- // assign a false positive if detection fails => unable to shiv
291
- supportsHtml5Styles = true;
292
- supportsUnknownElements = true;
293
- }
294
-
295
- }());
296
-
297
- /*--------------------------------------------------------------------------*/
298
-
299
- /**
300
- * Creates a style sheet with the given CSS text and adds it to the document.
301
- * @private
302
- * @param {Document} ownerDocument The document.
303
- * @param {String} cssText The CSS text.
304
- * @returns {StyleSheet} The style element.
305
- */
306
- function addStyleSheet(ownerDocument, cssText) {
307
- var p = ownerDocument.createElement('p'),
308
- parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
309
-
310
- p.innerHTML = 'x<style>' + cssText + '</style>';
311
- return parent.insertBefore(p.lastChild, parent.firstChild);
312
- }
313
-
314
- /**
315
- * Returns the value of `html5.elements` as an array.
316
- * @private
317
- * @returns {Array} An array of shived element node names.
318
- */
319
- function getElements() {
320
- var elements = html5.elements;
321
- return typeof elements == 'string' ? elements.split(' ') : elements;
322
- }
323
-
324
- /**
325
- * Extends the built-in list of html5 elements
326
- * @memberOf html5
327
- * @param {String|Array} newElements whitespace separated list or array of new element names to shiv
328
- * @param {Document} ownerDocument The context document.
329
- */
330
- function addElements(newElements, ownerDocument) {
331
- var elements = html5.elements;
332
- if(typeof elements != 'string'){
333
- elements = elements.join(' ');
334
- }
335
- if(typeof newElements != 'string'){
336
- newElements = newElements.join(' ');
337
- }
338
- html5.elements = elements +' '+ newElements;
339
- shivDocument(ownerDocument);
340
- }
341
-
342
- /**
343
- * Returns the data associated to the given document
344
- * @private
345
- * @param {Document} ownerDocument The document.
346
- * @returns {Object} An object of data.
347
- */
348
- function getExpandoData(ownerDocument) {
349
- var data = expandoData[ownerDocument[expando]];
350
- if (!data) {
351
- data = {};
352
- expanID++;
353
- ownerDocument[expando] = expanID;
354
- expandoData[expanID] = data;
355
- }
356
- return data;
357
- }
358
-
359
- /**
360
- * returns a shived element for the given nodeName and document
361
- * @memberOf html5
362
- * @param {String} nodeName name of the element
363
- * @param {Document|DocumentFragment} ownerDocument The context document.
364
- * @returns {Object} The shived element.
365
- */
366
- function createElement(nodeName, ownerDocument, data){
367
- if (!ownerDocument) {
368
- ownerDocument = document;
369
- }
370
- if(supportsUnknownElements){
371
- return ownerDocument.createElement(nodeName);
372
- }
373
- if (!data) {
374
- data = getExpandoData(ownerDocument);
375
- }
376
- var node;
377
-
378
- if (data.cache[nodeName]) {
379
- node = data.cache[nodeName].cloneNode();
380
- } else if (saveClones.test(nodeName)) {
381
- node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
382
- } else {
383
- node = data.createElem(nodeName);
384
- }
385
-
386
- // Avoid adding some elements to fragments in IE < 9 because
387
- // * Attributes like `name` or `type` cannot be set/changed once an element
388
- // is inserted into a document/fragment
389
- // * Link elements with `src` attributes that are inaccessible, as with
390
- // a 403 response, will cause the tab/window to crash
391
- // * Script elements appended to fragments will execute when their `src`
392
- // or `text` property is set
393
- return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
394
- }
395
-
396
- /**
397
- * returns a shived DocumentFragment for the given document
398
- * @memberOf html5
399
- * @param {Document} ownerDocument The context document.
400
- * @returns {Object} The shived DocumentFragment.
401
- */
402
- function createDocumentFragment(ownerDocument, data){
403
- if (!ownerDocument) {
404
- ownerDocument = document;
405
- }
406
- if(supportsUnknownElements){
407
- return ownerDocument.createDocumentFragment();
408
- }
409
- data = data || getExpandoData(ownerDocument);
410
- var clone = data.frag.cloneNode(),
411
- i = 0,
412
- elems = getElements(),
413
- l = elems.length;
414
- for(;i<l;i++){
415
- clone.createElement(elems[i]);
416
- }
417
- return clone;
418
- }
419
-
420
- /**
421
- * Shivs the `createElement` and `createDocumentFragment` methods of the document.
422
- * @private
423
- * @param {Document|DocumentFragment} ownerDocument The document.
424
- * @param {Object} data of the document.
425
- */
426
- function shivMethods(ownerDocument, data) {
427
- if (!data.cache) {
428
- data.cache = {};
429
- data.createElem = ownerDocument.createElement;
430
- data.createFrag = ownerDocument.createDocumentFragment;
431
- data.frag = data.createFrag();
432
- }
433
-
434
-
435
- ownerDocument.createElement = function(nodeName) {
436
- //abort shiv
437
- if (!html5.shivMethods) {
438
- return data.createElem(nodeName);
439
- }
440
- return createElement(nodeName, ownerDocument, data);
441
- };
442
-
443
- ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
444
- 'var n=f.cloneNode(),c=n.createElement;' +
445
- 'h.shivMethods&&(' +
446
- // unroll the `createElement` calls
447
- getElements().join().replace(/[\w\-:]+/g, function(nodeName) {
448
- data.createElem(nodeName);
449
- data.frag.createElement(nodeName);
450
- return 'c("' + nodeName + '")';
451
- }) +
452
- ');return n}'
453
- )(html5, data.frag);
454
- }
455
-
456
- /*--------------------------------------------------------------------------*/
457
-
458
- /**
459
- * Shivs the given document.
460
- * @memberOf html5
461
- * @param {Document} ownerDocument The document to shiv.
462
- * @returns {Document} The shived document.
463
- */
464
- function shivDocument(ownerDocument) {
465
- if (!ownerDocument) {
466
- ownerDocument = document;
467
- }
468
- var data = getExpandoData(ownerDocument);
469
-
470
- if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
471
- data.hasCSS = !!addStyleSheet(ownerDocument,
472
- // corrects block display not defined in IE6/7/8/9
473
- 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
474
- // adds styling not present in IE6/7/8/9
475
- 'mark{background:#FF0;color:#000}' +
476
- // hides non-rendered elements
477
- 'template{display:none}'
478
- );
479
- }
480
- if (!supportsUnknownElements) {
481
- shivMethods(ownerDocument, data);
482
- }
483
- return ownerDocument;
484
- }
485
-
486
- /*--------------------------------------------------------------------------*/
487
-
488
- /**
489
- * The `html5` object is exposed so that more elements can be shived and
490
- * existing shiving can be detected on iframes.
491
- * @type Object
492
- * @example
493
- *
494
- * // options can be changed before the script is included
495
- * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
496
- */
497
- var html5 = {
498
-
499
- /**
500
- * An array or space separated string of node names of the elements to shiv.
501
- * @memberOf html5
502
- * @type Array|String
503
- */
504
- 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video',
505
-
506
- /**
507
- * current version of html5shiv
508
- */
509
- 'version': version,
510
-
511
- /**
512
- * A flag to indicate that the HTML5 style sheet should be inserted.
513
- * @memberOf html5
514
- * @type Boolean
515
- */
516
- 'shivCSS': (options.shivCSS !== false),
517
-
518
- /**
519
- * Is equal to true if a browser supports creating unknown/HTML5 elements
520
- * @memberOf html5
521
- * @type boolean
522
- */
523
- 'supportsUnknownElements': supportsUnknownElements,
524
-
525
- /**
526
- * A flag to indicate that the document's `createElement` and `createDocumentFragment`
527
- * methods should be overwritten.
528
- * @memberOf html5
529
- * @type Boolean
530
- */
531
- 'shivMethods': (options.shivMethods !== false),
532
-
533
- /**
534
- * A string to describe the type of `html5` object ("default" or "default print").
535
- * @memberOf html5
536
- * @type String
537
- */
538
- 'type': 'default',
539
-
540
- // shivs the document according to the specified `html5` object options
541
- 'shivDocument': shivDocument,
542
-
543
- //creates a shived element
544
- createElement: createElement,
545
-
546
- //creates a shived documentFragment
547
- createDocumentFragment: createDocumentFragment,
548
-
549
- //extends list of elements
550
- addElements: addElements
551
- };
552
-
553
- /*--------------------------------------------------------------------------*/
554
-
555
- // expose html5
556
- window.html5 = html5;
557
-
558
- // shiv the document
559
- shivDocument(document);
560
-
561
- if(typeof module == 'object' && module.exports){
562
- module.exports = html5;
563
- }
564
-
565
- }(typeof window !== "undefined" ? window : this, document));
566
- }
567
- ;
568
-
569
- /**
570
- * List of property values to set for css tests. See ticket #21
571
- * http://git.io/vUGl4
572
- *
573
- * @memberof Modernizr
574
- * @name Modernizr._prefixes
575
- * @optionName Modernizr._prefixes
576
- * @optionProp prefixes
577
- * @access public
578
- * @example
579
- *
580
- * Modernizr._prefixes is the internal list of prefixes that we test against
581
- * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply
582
- * an array of kebab-case vendor prefixes you can use within your code.
583
- *
584
- * Some common use cases include
585
- *
586
- * Generating all possible prefixed version of a CSS property
587
- * ```js
588
- * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');
589
- *
590
- * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'
591
- * ```
592
- *
593
- * Generating all possible prefixed version of a CSS value
594
- * ```js
595
- * rule = 'display:' + Modernizr._prefixes.join('flex; display:') + 'flex';
596
- *
597
- * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'
598
- * ```
599
- */
600
-
601
- // we use ['',''] rather than an empty array in order to allow a pattern of .`join()`ing prefixes to test
602
- // values in feature detects to continue to work
603
- var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : ['','']);
604
-
605
- // expose these for the plugin API. Look in the source for how to join() them against your input
606
- ModernizrProto._prefixes = prefixes;
607
-
608
-
609
- /*!
610
- {
611
- "name": "CSS Supports",
612
- "property": "supports",
613
- "caniuse": "css-featurequeries",
614
- "tags": ["css"],
615
- "builderAliases": ["css_supports"],
616
- "notes": [{
617
- "name": "W3 Spec",
618
- "href": "http://dev.w3.org/csswg/css3-conditional/#at-supports"
619
- },{
620
- "name": "Related Github Issue",
621
- "href": "github.com/Modernizr/Modernizr/issues/648"
622
- },{
623
- "name": "W3 Info",
624
- "href": "http://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface"
625
- }]
626
- }
627
- !*/
628
-
629
- var newSyntax = 'CSS' in window && 'supports' in window.CSS;
630
- var oldSyntax = 'supportsCSS' in window;
631
- Modernizr.addTest('supports', newSyntax || oldSyntax);
632
-
633
-
634
- /**
635
- * createElement is a convenience wrapper around document.createElement. Since we
636
- * use createElement all over the place, this allows for (slightly) smaller code
637
- * as well as abstracting away issues with creating elements in contexts other than
638
- * HTML documents (e.g. SVG documents).
639
- *
640
- * @access private
641
- * @function createElement
642
- * @returns {HTMLElement|SVGElement} An HTML or SVG element
643
- */
644
-
645
- function createElement() {
646
- if (typeof document.createElement !== 'function') {
647
- // This is the case in IE7, where the type of createElement is "object".
648
- // For this reason, we cannot call apply() as Object is not a Function.
649
- return document.createElement(arguments[0]);
650
- } else if (isSVG) {
651
- return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);
652
- } else {
653
- return document.createElement.apply(document, arguments);
654
- }
655
- }
656
-
657
- ;
658
-
659
- /**
660
- * getBody returns the body of a document, or an element that can stand in for
661
- * the body if a real body does not exist
662
- *
663
- * @access private
664
- * @function getBody
665
- * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an
666
- * artificially created element that stands in for the body
667
- */
668
-
669
- function getBody() {
670
- // After page load injecting a fake body doesn't work so check if body exists
671
- var body = document.body;
672
-
673
- if (!body) {
674
- // Can't use the real body create a fake one.
675
- body = createElement(isSVG ? 'svg' : 'body');
676
- body.fake = true;
677
- }
678
-
679
- return body;
680
- }
681
-
682
- ;
683
-
684
- /**
685
- * injectElementWithStyles injects an element with style element and some CSS rules
686
- *
687
- * @access private
688
- * @function injectElementWithStyles
689
- * @param {string} rule - String representing a css rule
690
- * @param {function} callback - A function that is used to test the injected element
691
- * @param {number} [nodes] - An integer representing the number of additional nodes you want injected
692
- * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes
693
- * @returns {boolean}
694
- */
695
-
696
- function injectElementWithStyles(rule, callback, nodes, testnames) {
697
- var mod = 'modernizr';
698
- var style;
699
- var ret;
700
- var node;
701
- var docOverflow;
702
- var div = createElement('div');
703
- var body = getBody();
704
-
705
- if (parseInt(nodes, 10)) {
706
- // In order not to give false positives we create a node for each test
707
- // This also allows the method to scale for unspecified uses
708
- while (nodes--) {
709
- node = createElement('div');
710
- node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
711
- div.appendChild(node);
712
- }
713
- }
714
-
715
- style = createElement('style');
716
- style.type = 'text/css';
717
- style.id = 's' + mod;
718
-
719
- // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
720
- // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
721
- (!body.fake ? div : body).appendChild(style);
722
- body.appendChild(div);
723
-
724
- if (style.styleSheet) {
725
- style.styleSheet.cssText = rule;
726
- } else {
727
- style.appendChild(document.createTextNode(rule));
728
- }
729
- div.id = mod;
730
-
731
- if (body.fake) {
732
- //avoid crashing IE8, if background image is used
733
- body.style.background = '';
734
- //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
735
- body.style.overflow = 'hidden';
736
- docOverflow = docElement.style.overflow;
737
- docElement.style.overflow = 'hidden';
738
- docElement.appendChild(body);
739
- }
740
-
741
- ret = callback(div, rule);
742
- // If this is done after page load we don't want to remove the body so check if body exists
743
- if (body.fake) {
744
- body.parentNode.removeChild(body);
745
- docElement.style.overflow = docOverflow;
746
- // Trigger layout so kinetic scrolling isn't disabled in iOS6+
747
- docElement.offsetHeight;
748
- } else {
749
- div.parentNode.removeChild(div);
750
- }
751
-
752
- return !!ret;
753
-
754
- }
755
-
756
- ;
757
-
758
- /**
759
- * testStyles injects an element with style element and some CSS rules
760
- *
761
- * @memberof Modernizr
762
- * @name Modernizr.testStyles
763
- * @optionName Modernizr.testStyles()
764
- * @optionProp testStyles
765
- * @access public
766
- * @function testStyles
767
- * @param {string} rule - String representing a css rule
768
- * @param {function} callback - A function that is used to test the injected element
769
- * @param {number} [nodes] - An integer representing the number of additional nodes you want injected
770
- * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes
771
- * @returns {boolean}
772
- * @example
773
- *
774
- * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page
775
- * along with (possibly multiple) DOM elements. This lets you check for features
776
- * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).
777
- *
778
- * ```js
779
- * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {
780
- * // elem is the first DOM node in the page (by default #modernizr)
781
- * // rule is the first argument you supplied - the CSS rule in string form
782
- *
783
- * addTest('widthworks', elem.style.width === '9px')
784
- * });
785
- * ```
786
- *
787
- * If your test requires multiple nodes, you can include a third argument
788
- * indicating how many additional div elements to include on the page. The
789
- * additional nodes are injected as children of the `elem` that is returned as
790
- * the first argument to the callback.
791
- *
792
- * ```js
793
- * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {
794
- * document.getElementById('modernizr').style.width === '1px'; // true
795
- * document.getElementById('modernizr2').style.width === '2px'; // true
796
- * elem.firstChild === document.getElementById('modernizr2'); // true
797
- * }, 1);
798
- * ```
799
- *
800
- * By default, all of the additional elements have an ID of `modernizr[n]`, where
801
- * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,
802
- * the second additional is `#modernizr3`, etc.).
803
- * If you want to have more meaningful IDs for your function, you can provide
804
- * them as the fourth argument, as an array of strings
805
- *
806
- * ```js
807
- * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {
808
- * elem.firstChild === document.getElementById('foo'); // true
809
- * elem.lastChild === document.getElementById('bar'); // true
810
- * }, 2, ['foo', 'bar']);
811
- * ```
812
- *
813
- */
814
-
815
- var testStyles = ModernizrProto.testStyles = injectElementWithStyles;
816
-
817
- /*!
818
- {
819
- "name": "Touch Events",
820
- "property": "touchevents",
821
- "caniuse" : "touch",
822
- "tags": ["media", "attribute"],
823
- "notes": [{
824
- "name": "Touch Events spec",
825
- "href": "https://www.w3.org/TR/2013/WD-touch-events-20130124/"
826
- }],
827
- "warnings": [
828
- "Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device"
829
- ],
830
- "knownBugs": [
831
- "False-positive on some configurations of Nokia N900",
832
- "False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695"
833
- ]
834
- }
835
- !*/
836
- /* DOC
837
- Indicates if the browser supports the W3C Touch Events API.
838
-
839
- This *does not* necessarily reflect a touchscreen device:
840
-
841
- * Older touchscreen devices only emulate mouse events
842
- * Modern IE touch devices implement the Pointer Events API instead: use `Modernizr.pointerevents` to detect support for that
843
- * Some browsers & OS setups may enable touch APIs when no touchscreen is connected
844
- * Future browsers may implement other event models for touch interactions
845
-
846
- See this article: [You Can't Detect A Touchscreen](http://www.stucox.com/blog/you-cant-detect-a-touchscreen/).
847
-
848
- It's recommended to bind both mouse and touch/pointer events simultaneously – see [this HTML5 Rocks tutorial](http://www.html5rocks.com/en/mobile/touchandmouse/).
849
-
850
- This test will also return `true` for Firefox 4 Multitouch support.
851
- */
852
-
853
- // Chrome (desktop) used to lie about its support on this, but that has since been rectified: http://crbug.com/36415
854
- Modernizr.addTest('touchevents', function() {
855
- var bool;
856
- if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
857
- bool = true;
858
- } else {
859
- // include the 'heartz' as a way to have a non matching MQ to help terminate the join
860
- // https://git.io/vznFH
861
- var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');
862
- testStyles(query, function(node) {
863
- bool = node.offsetTop === 9;
864
- });
865
- }
866
- return bool;
867
- });
868
-
869
-
870
- /**
871
- * If the browsers follow the spec, then they would expose vendor-specific style as:
872
- * elem.style.WebkitBorderRadius
873
- * instead of something like the following, which would be technically incorrect:
874
- * elem.style.webkitBorderRadius
875
-
876
- * Webkit ghosts their properties in lowercase but Opera & Moz do not.
877
- * Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
878
- * erik.eae.net/archives/2008/03/10/21.48.10/
879
-
880
- * More here: github.com/Modernizr/Modernizr/issues/issue/21
881
- *
882
- * @access private
883
- * @returns {string} The string representing the vendor-specific style properties
884
- */
885
-
886
- var omPrefixes = 'Moz O ms Webkit';
887
-
888
-
889
- var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);
890
- ModernizrProto._cssomPrefixes = cssomPrefixes;
891
-
892
-
893
- /**
894
- * List of JavaScript DOM values used for tests
895
- *
896
- * @memberof Modernizr
897
- * @name Modernizr._domPrefixes
898
- * @optionName Modernizr._domPrefixes
899
- * @optionProp domPrefixes
900
- * @access public
901
- * @example
902
- *
903
- * Modernizr._domPrefixes is exactly the same as [_prefixes](#modernizr-_prefixes), but rather
904
- * than kebab-case properties, all properties are their Capitalized variant
905
- *
906
- * ```js
907
- * Modernizr._domPrefixes === [ "Moz", "O", "ms", "Webkit" ];
908
- * ```
909
- */
910
-
911
- var domPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.toLowerCase().split(' ') : []);
912
- ModernizrProto._domPrefixes = domPrefixes;
913
-
914
-
915
-
916
- /**
917
- * contains checks to see if a string contains another string
918
- *
919
- * @access private
920
- * @function contains
921
- * @param {string} str - The string we want to check for substrings
922
- * @param {string} substr - The substring we want to search the first string for
923
- * @returns {boolean}
924
- */
925
-
926
- function contains(str, substr) {
927
- return !!~('' + str).indexOf(substr);
928
- }
929
-
930
- ;
931
-
932
- /**
933
- * cssToDOM takes a kebab-case string and converts it to camelCase
934
- * e.g. box-sizing -> boxSizing
935
- *
936
- * @access private
937
- * @function cssToDOM
938
- * @param {string} name - String name of kebab-case prop we want to convert
939
- * @returns {string} The camelCase version of the supplied name
940
- */
941
-
942
- function cssToDOM(name) {
943
- return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {
944
- return m1 + m2.toUpperCase();
945
- }).replace(/^-/, '');
946
- }
947
- ;
948
-
949
- /**
950
- * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.
951
- *
952
- * @access private
953
- * @function fnBind
954
- * @param {function} fn - a function you want to change `this` reference to
955
- * @param {object} that - the `this` you want to call the function with
956
- * @returns {function} The wrapped version of the supplied function
957
- */
958
-
959
- function fnBind(fn, that) {
960
- return function() {
961
- return fn.apply(that, arguments);
962
- };
963
- }
964
-
965
- ;
966
-
967
- /**
968
- * testDOMProps is a generic DOM property test; if a browser supports
969
- * a certain property, it won't return undefined for it.
970
- *
971
- * @access private
972
- * @function testDOMProps
973
- * @param {array.<string>} props - An array of properties to test for
974
- * @param {object} obj - An object or Element you want to use to test the parameters again
975
- * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check
976
- */
977
- function testDOMProps(props, obj, elem) {
978
- var item;
979
-
980
- for (var i in props) {
981
- if (props[i] in obj) {
982
-
983
- // return the property name as a string
984
- if (elem === false) {
985
- return props[i];
986
- }
987
-
988
- item = obj[props[i]];
989
-
990
- // let's bind a function
991
- if (is(item, 'function')) {
992
- // bind to obj unless overriden
993
- return fnBind(item, elem || obj);
994
- }
995
-
996
- // return the unbound function or obj or value
997
- return item;
998
- }
999
- }
1000
- return false;
1001
- }
1002
-
1003
- ;
1004
-
1005
- /**
1006
- * Create our "modernizr" element that we do most feature tests on.
1007
- *
1008
- * @access private
1009
- */
1010
-
1011
- var modElem = {
1012
- elem: createElement('modernizr')
1013
- };
1014
-
1015
- // Clean up this element
1016
- Modernizr._q.push(function() {
1017
- delete modElem.elem;
1018
- });
1019
-
1020
-
1021
-
1022
- var mStyle = {
1023
- style: modElem.elem.style
1024
- };
1025
-
1026
- // kill ref for gc, must happen before mod.elem is removed, so we unshift on to
1027
- // the front of the queue.
1028
- Modernizr._q.unshift(function() {
1029
- delete mStyle.style;
1030
- });
1031
-
1032
-
1033
-
1034
- /**
1035
- * domToCSS takes a camelCase string and converts it to kebab-case
1036
- * e.g. boxSizing -> box-sizing
1037
- *
1038
- * @access private
1039
- * @function domToCSS
1040
- * @param {string} name - String name of camelCase prop we want to convert
1041
- * @returns {string} The kebab-case version of the supplied name
1042
- */
1043
-
1044
- function domToCSS(name) {
1045
- return name.replace(/([A-Z])/g, function(str, m1) {
1046
- return '-' + m1.toLowerCase();
1047
- }).replace(/^ms-/, '-ms-');
1048
- }
1049
- ;
1050
-
1051
- /**
1052
- * nativeTestProps allows for us to use native feature detection functionality if available.
1053
- * some prefixed form, or false, in the case of an unsupported rule
1054
- *
1055
- * @access private
1056
- * @function nativeTestProps
1057
- * @param {array} props - An array of property names
1058
- * @param {string} value - A string representing the value we want to check via @supports
1059
- * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise
1060
- */
1061
-
1062
- // Accepts a list of property names and a single value
1063
- // Returns `undefined` if native detection not available
1064
- function nativeTestProps(props, value) {
1065
- var i = props.length;
1066
- // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface
1067
- if ('CSS' in window && 'supports' in window.CSS) {
1068
- // Try every prefixed variant of the property
1069
- while (i--) {
1070
- if (window.CSS.supports(domToCSS(props[i]), value)) {
1071
- return true;
1072
- }
1073
- }
1074
- return false;
1075
- }
1076
- // Otherwise fall back to at-rule (for Opera 12.x)
1077
- else if ('CSSSupportsRule' in window) {
1078
- // Build a condition string for every prefixed variant
1079
- var conditionText = [];
1080
- while (i--) {
1081
- conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');
1082
- }
1083
- conditionText = conditionText.join(' or ');
1084
- return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {
1085
- return getComputedStyle(node, null).position == 'absolute';
1086
- });
1087
- }
1088
- return undefined;
1089
- }
1090
- ;
1091
-
1092
- // testProps is a generic CSS / DOM property test.
1093
-
1094
- // In testing support for a given CSS property, it's legit to test:
1095
- // `elem.style[styleName] !== undefined`
1096
- // If the property is supported it will return an empty string,
1097
- // if unsupported it will return undefined.
1098
-
1099
- // We'll take advantage of this quick test and skip setting a style
1100
- // on our modernizr element, but instead just testing undefined vs
1101
- // empty string.
1102
-
1103
- // Property names can be provided in either camelCase or kebab-case.
1104
-
1105
- function testProps(props, prefixed, value, skipValueTest) {
1106
- skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;
1107
-
1108
- // Try native detect first
1109
- if (!is(value, 'undefined')) {
1110
- var result = nativeTestProps(props, value);
1111
- if (!is(result, 'undefined')) {
1112
- return result;
1113
- }
1114
- }
1115
-
1116
- // Otherwise do it properly
1117
- var afterInit, i, propsLength, prop, before;
1118
-
1119
- // If we don't have a style element, that means we're running async or after
1120
- // the core tests, so we'll need to create our own elements to use
1121
-
1122
- // inside of an SVG element, in certain browsers, the `style` element is only
1123
- // defined for valid tags. Therefore, if `modernizr` does not have one, we
1124
- // fall back to a less used element and hope for the best.
1125
- var elems = ['modernizr', 'tspan'];
1126
- while (!mStyle.style) {
1127
- afterInit = true;
1128
- mStyle.modElem = createElement(elems.shift());
1129
- mStyle.style = mStyle.modElem.style;
1130
- }
1131
-
1132
- // Delete the objects if we created them.
1133
- function cleanElems() {
1134
- if (afterInit) {
1135
- delete mStyle.style;
1136
- delete mStyle.modElem;
1137
- }
1138
- }
1139
-
1140
- propsLength = props.length;
1141
- for (i = 0; i < propsLength; i++) {
1142
- prop = props[i];
1143
- before = mStyle.style[prop];
1144
-
1145
- if (contains(prop, '-')) {
1146
- prop = cssToDOM(prop);
1147
- }
1148
-
1149
- if (mStyle.style[prop] !== undefined) {
1150
-
1151
- // If value to test has been passed in, do a set-and-check test.
1152
- // 0 (integer) is a valid property value, so check that `value` isn't
1153
- // undefined, rather than just checking it's truthy.
1154
- if (!skipValueTest && !is(value, 'undefined')) {
1155
-
1156
- // Needs a try catch block because of old IE. This is slow, but will
1157
- // be avoided in most cases because `skipValueTest` will be used.
1158
- try {
1159
- mStyle.style[prop] = value;
1160
- } catch (e) {}
1161
-
1162
- // If the property value has changed, we assume the value used is
1163
- // supported. If `value` is empty string, it'll fail here (because
1164
- // it hasn't changed), which matches how browsers have implemented
1165
- // CSS.supports()
1166
- if (mStyle.style[prop] != before) {
1167
- cleanElems();
1168
- return prefixed == 'pfx' ? prop : true;
1169
- }
1170
- }
1171
- // Otherwise just return true, or the property name if this is a
1172
- // `prefixed()` call
1173
- else {
1174
- cleanElems();
1175
- return prefixed == 'pfx' ? prop : true;
1176
- }
1177
- }
1178
- }
1179
- cleanElems();
1180
- return false;
1181
- }
1182
-
1183
- ;
1184
-
1185
- /**
1186
- * testPropsAll tests a list of DOM properties we want to check against.
1187
- * We specify literally ALL possible (known and/or likely) properties on
1188
- * the element including the non-vendor prefixed one, for forward-
1189
- * compatibility.
1190
- *
1191
- * @access private
1192
- * @function testPropsAll
1193
- * @param {string} prop - A string of the property to test for
1194
- * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip
1195
- * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against
1196
- * @param {string} [value] - A string of a css value
1197
- * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set
1198
- */
1199
- function testPropsAll(prop, prefixed, elem, value, skipValueTest) {
1200
-
1201
- var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
1202
- props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
1203
-
1204
- // did they call .prefixed('boxSizing') or are we just testing a prop?
1205
- if (is(prefixed, 'string') || is(prefixed, 'undefined')) {
1206
- return testProps(props, prefixed, value, skipValueTest);
1207
-
1208
- // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
1209
- } else {
1210
- props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
1211
- return testDOMProps(props, prefixed, elem);
1212
- }
1213
- }
1214
-
1215
- // Modernizr.testAllProps() investigates whether a given style property,
1216
- // or any of its vendor-prefixed variants, is recognized
1217
- //
1218
- // Note that the property names must be provided in the camelCase variant.
1219
- // Modernizr.testAllProps('boxSizing')
1220
- ModernizrProto.testAllProps = testPropsAll;
1221
-
1222
-
1223
-
1224
- /**
1225
- * testAllProps determines whether a given CSS property is supported in the browser
1226
- *
1227
- * @memberof Modernizr
1228
- * @name Modernizr.testAllProps
1229
- * @optionName Modernizr.testAllProps()
1230
- * @optionProp testAllProps
1231
- * @access public
1232
- * @function testAllProps
1233
- * @param {string} prop - String naming the property to test (either camelCase or kebab-case)
1234
- * @param {string} [value] - String of the value to test
1235
- * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection
1236
- * @example
1237
- *
1238
- * testAllProps determines whether a given CSS property, in some prefixed form,
1239
- * is supported by the browser.
1240
- *
1241
- * ```js
1242
- * testAllProps('boxSizing') // true
1243
- * ```
1244
- *
1245
- * It can optionally be given a CSS value in string form to test if a property
1246
- * value is valid
1247
- *
1248
- * ```js
1249
- * testAllProps('display', 'block') // true
1250
- * testAllProps('display', 'penguin') // false
1251
- * ```
1252
- *
1253
- * A boolean can be passed as a third parameter to skip the value check when
1254
- * native detection (@supports) isn't available.
1255
- *
1256
- * ```js
1257
- * testAllProps('shapeOutside', 'content-box', true);
1258
- * ```
1259
- */
1260
-
1261
- function testAllProps(prop, value, skipValueTest) {
1262
- return testPropsAll(prop, undefined, undefined, value, skipValueTest);
1263
- }
1264
- ModernizrProto.testAllProps = testAllProps;
1265
-
1266
- /*!
1267
- {
1268
- "name": "Flexbox",
1269
- "property": "flexbox",
1270
- "caniuse": "flexbox",
1271
- "tags": ["css"],
1272
- "notes": [{
1273
- "name": "The _new_ flexbox",
1274
- "href": "http://dev.w3.org/csswg/css3-flexbox"
1275
- }],
1276
- "warnings": [
1277
- "A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect."
1278
- ]
1279
- }
1280
- !*/
1281
- /* DOC
1282
- Detects support for the Flexible Box Layout model, a.k.a. Flexbox, which allows easy manipulation of layout order and sizing within a container.
1283
- */
1284
-
1285
- Modernizr.addTest('flexbox', testAllProps('flexBasis', '1px', true));
1286
-
1287
- /*!
1288
- {
1289
- "name": "Flexbox (legacy)",
1290
- "property": "flexboxlegacy",
1291
- "tags": ["css"],
1292
- "polyfills": ["flexie"],
1293
- "notes": [{
1294
- "name": "The _old_ flexbox",
1295
- "href": "https://www.w3.org/TR/2009/WD-css3-flexbox-20090723/"
1296
- }]
1297
- }
1298
- !*/
1299
-
1300
- Modernizr.addTest('flexboxlegacy', testAllProps('boxDirection', 'reverse', true));
1301
-
1302
- /*!
1303
- {
1304
- "name": "CSS Transforms",
1305
- "property": "csstransforms",
1306
- "caniuse": "transforms2d",
1307
- "tags": ["css"]
1308
- }
1309
- !*/
1310
-
1311
- Modernizr.addTest('csstransforms', function() {
1312
- // Android < 3.0 is buggy, so we sniff and blacklist
1313
- // http://git.io/hHzL7w
1314
- return navigator.userAgent.indexOf('Android 2.') === -1 &&
1315
- testAllProps('transform', 'scale(1)', true);
1316
- });
1317
-
1318
- /*!
1319
- {
1320
- "name": "CSS Transforms 3D",
1321
- "property": "csstransforms3d",
1322
- "caniuse": "transforms3d",
1323
- "tags": ["css"],
1324
- "warnings": [
1325
- "Chrome may occassionally fail this test on some systems; more info: https://code.google.com/p/chromium/issues/detail?id=129004"
1326
- ]
1327
- }
1328
- !*/
1329
-
1330
- Modernizr.addTest('csstransforms3d', function() {
1331
- var ret = !!testAllProps('perspective', '1px', true);
1332
- var usePrefix = Modernizr._config.usePrefixes;
1333
-
1334
- // Webkit's 3D transforms are passed off to the browser's own graphics renderer.
1335
- // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
1336
- // some conditions. As a result, Webkit typically recognizes the syntax but
1337
- // will sometimes throw a false positive, thus we must do a more thorough check:
1338
- if (ret && (!usePrefix || 'webkitPerspective' in docElement.style)) {
1339
- var mq;
1340
- var defaultStyle = '#modernizr{width:0;height:0}';
1341
- // Use CSS Conditional Rules if available
1342
- if (Modernizr.supports) {
1343
- mq = '@supports (perspective: 1px)';
1344
- } else {
1345
- // Otherwise, Webkit allows this media query to succeed only if the feature is enabled.
1346
- // `@media (transform-3d),(-webkit-transform-3d){ ... }`
1347
- mq = '@media (transform-3d)';
1348
- if (usePrefix) {
1349
- mq += ',(-webkit-transform-3d)';
1350
- }
1351
- }
1352
-
1353
- mq += '{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}';
1354
-
1355
- testStyles(defaultStyle + mq, function(elem) {
1356
- ret = elem.offsetWidth === 7 && elem.offsetHeight === 18;
1357
- });
1358
- }
1359
-
1360
- return ret;
1361
- });
1362
-
1363
-
1364
- // Run each test
1365
- testRunner();
1366
-
1367
- // Remove the "no-js" class if it exists
1368
- setClasses(classes);
1369
-
1370
- delete ModernizrProto.addTest;
1371
- delete ModernizrProto.addAsyncTest;
1372
-
1373
- // Run the things that are supposed to run after the tests
1374
- for (var i = 0; i < Modernizr._q.length; i++) {
1375
- Modernizr._q[i]();
1376
- }
1377
-
1378
- // Leak Modernizr namespace
1379
- window.laeModernizr = Modernizr;
1380
-
1381
-
1382
- ;
1383
-
1384
- })(window, document);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/modernizr-custom.min.js DELETED
@@ -1 +0,0 @@
1
- (function(window,document,undefined){var classes=[];var tests=[];var ModernizrProto={_version:"3.3.1",_config:{classPrefix:"lae-",enableClasses:true,enableJSClass:true,usePrefixes:true},_q:[],on:function(test,cb){var self=this;setTimeout(function(){cb(self[test])},0)},addTest:function(name,fn,options){tests.push({name:name,fn:fn,options:options})},addAsyncTest:function(fn){tests.push({name:null,fn:fn})}};var Modernizr=function(){};Modernizr.prototype=ModernizrProto;Modernizr=new Modernizr;function is(obj,type){return typeof obj===type}function testRunner(){var featureNames;var feature;var aliasIdx;var result;var nameIdx;var featureName;var featureNameSplit;for(var featureIdx in tests){if(tests.hasOwnProperty(featureIdx)){featureNames=[];feature=tests[featureIdx];if(feature.name){featureNames.push(feature.name.toLowerCase());if(feature.options&&feature.options.aliases&&feature.options.aliases.length){for(aliasIdx=0;aliasIdx<feature.options.aliases.length;aliasIdx++){featureNames.push(feature.options.aliases[aliasIdx].toLowerCase())}}}result=is(feature.fn,"function")?feature.fn():feature.fn;for(nameIdx=0;nameIdx<featureNames.length;nameIdx++){featureName=featureNames[nameIdx];featureNameSplit=featureName.split(".");if(featureNameSplit.length===1){Modernizr[featureNameSplit[0]]=result}else{if(Modernizr[featureNameSplit[0]]&&!(Modernizr[featureNameSplit[0]]instanceof Boolean)){Modernizr[featureNameSplit[0]]=new Boolean(Modernizr[featureNameSplit[0]])}Modernizr[featureNameSplit[0]][featureNameSplit[1]]=result}classes.push((result?"":"no-")+featureNameSplit.join("-"))}}}}var docElement=document.documentElement;var isSVG=docElement.nodeName.toLowerCase()==="svg";function setClasses(classes){var className=docElement.className;var classPrefix=Modernizr._config.classPrefix||"";if(isSVG){className=className.baseVal}if(Modernizr._config.enableJSClass){var reJS=new RegExp("(^|\\s)"+classPrefix+"no-js(\\s|$)");className=className.replace(reJS,"$1"+classPrefix+"js$2")}if(Modernizr._config.enableClasses){className+=" "+classPrefix+classes.join(" "+classPrefix);isSVG?docElement.className.baseVal=className:docElement.className=className}}var html5;if(!isSVG){(function(window,document){var version="3.7.3";var options=window.html5||{};var reSkip=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;var saveClones=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;var supportsHtml5Styles;var expando="_html5shiv";var expanID=0;var expandoData={};var supportsUnknownElements;(function(){try{var a=document.createElement("a");a.innerHTML="<xyz></xyz>";supportsHtml5Styles="hidden"in a;supportsUnknownElements=a.childNodes.length==1||function(){document.createElement("a");var frag=document.createDocumentFragment();return typeof frag.cloneNode=="undefined"||typeof frag.createDocumentFragment=="undefined"||typeof frag.createElement=="undefined"}()}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true}})();function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement("p"),parent=ownerDocument.getElementsByTagName("head")[0]||ownerDocument.documentElement;p.innerHTML="x<style>"+cssText+"</style>";return parent.insertBefore(p.lastChild,parent.firstChild)}function getElements(){var elements=html5.elements;return typeof elements=="string"?elements.split(" "):elements}function addElements(newElements,ownerDocument){var elements=html5.elements;if(typeof elements!="string"){elements=elements.join(" ")}if(typeof newElements!="string"){newElements=newElements.join(" ")}html5.elements=elements+" "+newElements;shivDocument(ownerDocument)}function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data}return data}function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createElement(nodeName)}if(!data){data=getExpandoData(ownerDocument)}var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode()}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode()}else{node=data.createElem(nodeName)}return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node}function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createDocumentFragment()}data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i<l;i++){clone.createElement(elems[i])}return clone}function shivMethods(ownerDocument,data){if(!data.cache){data.cache={};data.createElem=ownerDocument.createElement;data.createFrag=ownerDocument.createDocumentFragment;data.frag=data.createFrag()}ownerDocument.createElement=function(nodeName){if(!html5.shivMethods){return data.createElem(nodeName)}return createElement(nodeName,ownerDocument,data)};ownerDocument.createDocumentFragment=Function("h,f","return function(){"+"var n=f.cloneNode(),c=n.createElement;"+"h.shivMethods&&("+getElements().join().replace(/[\w\-:]+/g,function(nodeName){data.createElem(nodeName);data.frag.createElement(nodeName);return'c("'+nodeName+'")'})+");return n}")(html5,data.frag)}function shivDocument(ownerDocument){if(!ownerDocument){ownerDocument=document}var data=getExpandoData(ownerDocument);if(html5.shivCSS&&!supportsHtml5Styles&&!data.hasCSS){data.hasCSS=!!addStyleSheet(ownerDocument,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}"+"mark{background:#FF0;color:#000}"+"template{display:none}")}if(!supportsUnknownElements){shivMethods(ownerDocument,data)}return ownerDocument}var html5={elements:options.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:version,shivCSS:options.shivCSS!==false,supportsUnknownElements:supportsUnknownElements,shivMethods:options.shivMethods!==false,type:"default",shivDocument:shivDocument,createElement:createElement,createDocumentFragment:createDocumentFragment,addElements:addElements};window.html5=html5;shivDocument(document);if(typeof module=="object"&&module.exports){module.exports=html5}})(typeof window!=="undefined"?window:this,document)}var prefixes=ModernizrProto._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):["",""];ModernizrProto._prefixes=prefixes;var newSyntax="CSS"in window&&"supports"in window.CSS;var oldSyntax="supportsCSS"in window;Modernizr.addTest("supports",newSyntax||oldSyntax);function createElement(){if(typeof document.createElement!=="function"){return document.createElement(arguments[0])}else if(isSVG){return document.createElementNS.call(document,"http://www.w3.org/2000/svg",arguments[0])}else{return document.createElement.apply(document,arguments)}}function getBody(){var body=document.body;if(!body){body=createElement(isSVG?"svg":"body");body.fake=true}return body}function injectElementWithStyles(rule,callback,nodes,testnames){var mod="modernizr";var style;var ret;var node;var docOverflow;var div=createElement("div");var body=getBody();if(parseInt(nodes,10)){while(nodes--){node=createElement("div");node.id=testnames?testnames[nodes]:mod+(nodes+1);div.appendChild(node)}}style=createElement("style");style.type="text/css";style.id="s"+mod;(!body.fake?div:body).appendChild(style);body.appendChild(div);if(style.styleSheet){style.styleSheet.cssText=rule}else{style.appendChild(document.createTextNode(rule))}div.id=mod;if(body.fake){body.style.background="";body.style.overflow="hidden";docOverflow=docElement.style.overflow;docElement.style.overflow="hidden";docElement.appendChild(body)}ret=callback(div,rule);if(body.fake){body.parentNode.removeChild(body);docElement.style.overflow=docOverflow;docElement.offsetHeight}else{div.parentNode.removeChild(div)}return!!ret}var testStyles=ModernizrProto.testStyles=injectElementWithStyles;Modernizr.addTest("touchevents",function(){var bool;if("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch){bool=true}else{var query=["@media (",prefixes.join("touch-enabled),("),"heartz",")","{#modernizr{top:9px;position:absolute}}"].join("");testStyles(query,function(node){bool=node.offsetTop===9})}return bool});var omPrefixes="Moz O ms Webkit";var cssomPrefixes=ModernizrProto._config.usePrefixes?omPrefixes.split(" "):[];ModernizrProto._cssomPrefixes=cssomPrefixes;var domPrefixes=ModernizrProto._config.usePrefixes?omPrefixes.toLowerCase().split(" "):[];ModernizrProto._domPrefixes=domPrefixes;function contains(str,substr){return!!~(""+str).indexOf(substr)}function cssToDOM(name){return name.replace(/([a-z])-([a-z])/g,function(str,m1,m2){return m1+m2.toUpperCase()}).replace(/^-/,"")}function fnBind(fn,that){return function(){return fn.apply(that,arguments)}}function testDOMProps(props,obj,elem){var item;for(var i in props){if(props[i]in obj){if(elem===false){return props[i]}item=obj[props[i]];if(is(item,"function")){return fnBind(item,elem||obj)}return item}}return false}var modElem={elem:createElement("modernizr")};Modernizr._q.push(function(){delete modElem.elem});var mStyle={style:modElem.elem.style};Modernizr._q.unshift(function(){delete mStyle.style});function domToCSS(name){return name.replace(/([A-Z])/g,function(str,m1){return"-"+m1.toLowerCase()}).replace(/^ms-/,"-ms-")}function nativeTestProps(props,value){var i=props.length;if("CSS"in window&&"supports"in window.CSS){while(i--){if(window.CSS.supports(domToCSS(props[i]),value)){return true}}return false}else if("CSSSupportsRule"in window){var conditionText=[];while(i--){conditionText.push("("+domToCSS(props[i])+":"+value+")")}conditionText=conditionText.join(" or ");return injectElementWithStyles("@supports ("+conditionText+") { #modernizr { position: absolute; } }",function(node){return getComputedStyle(node,null).position=="absolute"})}return undefined}function testProps(props,prefixed,value,skipValueTest){skipValueTest=is(skipValueTest,"undefined")?false:skipValueTest;if(!is(value,"undefined")){var result=nativeTestProps(props,value);if(!is(result,"undefined")){return result}}var afterInit,i,propsLength,prop,before;var elems=["modernizr","tspan"];while(!mStyle.style){afterInit=true;mStyle.modElem=createElement(elems.shift());mStyle.style=mStyle.modElem.style}function cleanElems(){if(afterInit){delete mStyle.style;delete mStyle.modElem}}propsLength=props.length;for(i=0;i<propsLength;i++){prop=props[i];before=mStyle.style[prop];if(contains(prop,"-")){prop=cssToDOM(prop)}if(mStyle.style[prop]!==undefined){if(!skipValueTest&&!is(value,"undefined")){try{mStyle.style[prop]=value}catch(e){}if(mStyle.style[prop]!=before){cleanElems();return prefixed=="pfx"?prop:true}}else{cleanElems();return prefixed=="pfx"?prop:true}}}cleanElems();return false}function testPropsAll(prop,prefixed,elem,value,skipValueTest){var ucProp=prop.charAt(0).toUpperCase()+prop.slice(1),props=(prop+" "+cssomPrefixes.join(ucProp+" ")+ucProp).split(" ");if(is(prefixed,"string")||is(prefixed,"undefined")){return testProps(props,prefixed,value,skipValueTest)}else{props=(prop+" "+domPrefixes.join(ucProp+" ")+ucProp).split(" ");return testDOMProps(props,prefixed,elem)}}ModernizrProto.testAllProps=testPropsAll;function testAllProps(prop,value,skipValueTest){return testPropsAll(prop,undefined,undefined,value,skipValueTest)}ModernizrProto.testAllProps=testAllProps;Modernizr.addTest("flexbox",testAllProps("flexBasis","1px",true));Modernizr.addTest("flexboxlegacy",testAllProps("boxDirection","reverse",true));Modernizr.addTest("csstransforms",function(){return navigator.userAgent.indexOf("Android 2.")===-1&&testAllProps("transform","scale(1)",true)});Modernizr.addTest("csstransforms3d",function(){var ret=!!testAllProps("perspective","1px",true);var usePrefix=Modernizr._config.usePrefixes;if(ret&&(!usePrefix||"webkitPerspective"in docElement.style)){var mq;var defaultStyle="#modernizr{width:0;height:0}";if(Modernizr.supports){mq="@supports (perspective: 1px)"}else{mq="@media (transform-3d)";if(usePrefix){mq+=",(-webkit-transform-3d)"}}mq+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}";testStyles(defaultStyle+mq,function(elem){ret=elem.offsetWidth===7&&elem.offsetHeight===18})}return ret});testRunner();setClasses(classes);delete ModernizrProto.addTest;delete ModernizrProto.addAsyncTest;for(var i=0;i<Modernizr._q.length;i++){Modernizr._q[i]()}window.laeModernizr=Modernizr})(window,document);
 
freemius/.codeclimate.yml DELETED
@@ -1,19 +0,0 @@
1
- engines:
2
- phpcodesniffer:
3
- enabled: true
4
- config:
5
- standard: "WordPress"
6
- checks:
7
- Squiz Commenting InlineComment InvalidEndChar:
8
- enabled: false
9
- Squiz Commenting InlineComment SpacingBefore:
10
- enabled: false
11
- Squiz Commenting InlineComment WrongStyle:
12
- enabled: false
13
- Generic Commenting DocComment MissingShort:
14
- enabled: false
15
- Generic WhiteSpace ScopeIndent IncorrectExact:
16
- enabled: false
17
- ratings:
18
- paths:
19
- - "**.php"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
freemius/.travis.yml DELETED
@@ -1,11 +0,0 @@
1
- sudo: false
2
-
3
- language: php
4
-
5
- php:
6
- - 5.3
7
- - 5.4
8
- - 5.5
9
- - 5.6
10
- - 7.0
11
- - hhvm
 
 
 
 
 
 
 
 
 
 
 
freemius/README.md DELETED
@@ -1,253 +0,0 @@
1
- Freemius WordPress SDK
2
- ======================
3
-
4
- [Monetization](https://freemius.com/wordpress/), [analytics](https://freemius.com/wordpress/insights/), and marketing automation platform for plugin & theme developers. Freemius empower developers to create prosperous subscription based businesses.
5
-
6
- You can see some of the WordPress.org plugins & themes that are utilizing the power of Freemius here:
7
-
8
- https://includewp.com/freemius/#focus
9
-
10
- If you are a WordPress plugin or theme developer and you are interested to monetize with Freemius you can [sign-up here for free](https://dashboard.freemius.com/register/):
11
-
12
- https://dashboard.freemius.com/register/
13
-
14
- **Below you'll find the integration instructions for our WordPress SDK.**
15
-
16
- ## Code Documentation
17
-
18
- You can find the SDK's PHP-Doc documentation here:
19
- https://codedoc.pub/freemius/wordpress-sdk/master/
20
-
21
- ## Initializing the SDK
22
-
23
- Copy the code below and paste it into the top of your main plugin's PHP file, right after the plugin's header comment:
24
-
25
- ```php
26
- <?php
27
- // Create a helper function for easy SDK access.
28
- function my_prefix_fs() {
29
- global $my_prefix_fs;
30
- if ( ! isset( $my_prefix_fs ) ) {
31
- // Include Freemius SDK.
32
- require_once dirname(__FILE__) . '/freemius/start.php';
33
-
34
- $my_prefix_fs = fs_dynamic_init( array(
35
- 'id' => '1234',
36
- 'slug' => 'my-plugin-slug',
37
- 'menu_slug' => 'my_menu_slug', // You can also use __FILE__
38
- 'public_key' => 'pk_MY_PUBLIC_KEY',
39
- 'is_live' => true,
40
- 'is_premium' => true,
41
- 'has_addons' => false,
42
- 'has_paid_plans' => false,
43
- // Set the SDK to work in a sandbox mode (for development & testing).
44
- // IMPORTANT: MAKE SURE TO REMOVE SECRET KEY BEFORE DEPLOYMENT.
45
- 'secret_key' => 'sk_MY_SECRET_KEY',
46
- ) );
47
- }
48
-
49
- return $my_prefix_fs;
50
- }
51
-
52
- // Init Freemius.
53
- my_prefix_fs();
54
- ?>
55
- ```
56
-
57
- - **1234** - Replace with your plugin's ID.
58
- - **pk_MY_PUBLIC_KEY** - Replace with your plugin's public key.
59
- - **sk_MY_SECRET_KEY** - Replace with your plugin's secret key.
60
- - **my-plugin-slug** - Replace with your plugin's WordPress.org slug.
61
- - **my_menu_slug** - Replace with your admin dashboard settings menu slug.
62
-
63
-
64
- ## Usage example
65
-
66
- You can call the SDK by using the shortcode function:
67
-
68
- ```php
69
- <?php my_prefix_fs()->get_upgrade_url(); ?>
70
- ```
71
-
72
- Or when calling Freemius multiple times in a scope, it's recommended to use it with the global variable:
73
-
74
- ```php
75
- <?php
76
- global $my_prefix_fs;
77
- $my_prefix_fs->get_account_url();
78
- ?>
79
- ```
80
-
81
- ## Adding license based logic examples
82
-
83
- Add marketing content to encourage your users to upgrade for your paid version:
84
-
85
- ```php
86
- <?php
87
- if ( my_prefix_fs()->is_not_paying() ) {
88
- echo '<section><h1>' . esc_html__('Awesome Premium Features', 'my-plugin-slug') . '</h1>';
89
- echo '<a href="' . my_prefix_fs()->get_upgrade_url() . '">' .
90
- esc_html__('Upgrade Now!', 'my-plugin-slug') .
91
- '</a>';
92
- echo '</section>';
93
- }
94
- ?>
95
- ```
96
-
97
- Add logic which will only be available in your premium plugin version:
98
-
99
- ```php
100
- <?php
101
- // This "if" block will be auto removed from the Free version.
102
- if ( my_prefix_fs()->is__premium_only() ) {
103
-
104
- // ... premium only logic ...
105
-
106
- }
107
- ?>
108
- ```
109
-
110
- To add a function which will only be available in your premium plugin version, simply add __premium_only as the suffix of the function name. Just make sure that all lines that call that method directly or by hooks, are also wrapped in premium only logic:
111
-
112
- ```php
113
- <?php
114
- class My_Plugin {
115
- function init() {
116
- ...
117
-
118
- // This "if" block will be auto removed from the free version.
119
- if ( my_prefix_fs()->is__premium_only() ) {
120
- // Init premium version.
121
- $this->admin_init__premium_only();
122
-
123
- add_action( 'admin_init', array( &$this, 'admin_init_hook__premium_only' );
124
- }
125
-
126
- ...
127
- }
128
-
129
- // This method will be only included in the premium version.
130
- function admin_init__premium_only() {
131
- ...
132
- }
133
-
134
- // This method will be only included in the premium version.
135
- function admin_init_hook__premium_only() {
136
- ...
137
- }
138
- }
139
- ?>
140
- ```
141
-
142
- Add logic which will only be executed for customers in your 'professional' plan:
143
-
144
- ```php
145
- <?php
146
- if ( my_prefix_fs()->is_plan('professional', true) ) {
147
- // .. logic related to Professional plan only ...
148
- }
149
- ?>
150
- ```
151
-
152
- Add logic which will only be executed for customers in your 'professional' plan or higher plans:
153
-
154
- ```php
155
- <?php
156
- if ( my_prefix_fs()->is_plan('professional') ) {
157
- // ... logic related to Professional plan and higher plans ...
158
- }
159
- ?>
160
- ```
161
-
162
- Add logic which will only be available in your premium plugin version AND will only be executed for customers in your 'professional' plan (and higher plans):
163
-
164
- ```php
165
- <?php
166
- // This "if" block will be auto removed from the Free version.
167
- if ( my_prefix_fs()->is_plan__premium_only('professional') ) {
168
- // ... logic related to Professional plan and higher plans ...
169
- }
170
- ?>
171
- ```
172
-
173
- Add logic only for users in trial:
174
-
175
- ```php
176
- <?php
177
- if ( my_prefix_fs()->is_trial() ) {
178
- // ... logic for users in trial ...
179
- }
180
- ?>
181
- ```
182
-
183
- Add logic for specified paid plan:
184
-
185
- ```php
186
- <?php
187
- // This "if" block will be auto removed from the Free version.
188
- if ( my_prefix_fs()->is__premium_only() ) {
189
- if ( my_prefix_fs()->is_plan( 'professional', true ) ) {
190
-
191
- // ... logic related to Professional plan only ...
192
-
193
- } else if ( my_prefix_fs()->is_plan( 'business' ) ) {
194
-
195
- // ... logic related to Business plan and higher plans ...
196
-
197
- }
198
- }
199
- ?>
200
- ```
201
-
202
- ## Excluding files and folders from the free plugin version
203
- There are two ways to exclude files from your free version.
204
-
205
- 1. Add `__premium_only` just before the file extension. For example, functions__premium_only.php will be only included in the premium plugin version. This works for all type of files, not only PHP.
206
- 2. Add `@fs_premium_only` a sepcial meta tag to the plugin's main PHP file header. Example:
207
- ```php
208
- <?php
209
- /**
210
- * Plugin Name: My Very Awesome Plugin
211
- * Plugin URI: http://my-awesome-plugin.com
212
- * Description: Create and manage Awesomeness right in WordPress.
213
- * Version: 1.0.0
214
- * Author: Awesomattic
215
- * Author URI: http://my-awesome-plugin.com/me/
216
- * License: GPLv2
217
- * Text Domain: myplugin
218
- * Domain Path: /langs
219
- *
220
- * @fs_premium_only /lib/functions.php, /premium-files/
221
- */
222
-
223
- if ( ! defined( 'ABSPATH' ) ) {
224
- exit;
225
- }
226
-
227
- // ... my code ...
228
- ?>
229
- ```
230
- The file `/lib/functions.php` and the directory `/premium-files/` will be removed from the free plugin version.
231
-
232
- # WordPress.org Compliance
233
- Based on [WordPress.org Guidelines](https://wordpress.org/plugins/about/guidelines/) you are not allowed to submit a plugin that has premium code in it:
234
- > All code hosted by WordPress.org servers must be free and fully-functional. If you want to sell advanced features for a plugin (such as a "pro" version), then you must sell and serve that code from your own site, we will not host it on our servers.
235
-
236
- Therefore, if you want to deploy your free plugin's version to WordPress.org, make sure you wrap all your premium code with `if ( my_prefix_fs()->{{ method }}__premium_only() )` or the other methods provided to exclude premium features & files from the free version.
237
-
238
- ## Deployment
239
- Zip your plugin's root folder and upload it in the Deployment section in the *Freemius Developer's Dashboard*.
240
- The plugin will be scanned and processed by a custom developed *PHP Processor* which will auto-generate two versions of your plugin:
241
-
242
- 1. **Premium version**: Identical to your uploaded version, including all code (except your `secret_key`). Will be enabled for download ONLY for your paying or in trial customers.
243
- 2. **Free version**: The code stripped from all your paid features (based on the logic added wrapped in `{ method }__premium_only()`).
244
-
245
- The free version is the one that you should give your users to download. Therefore, download the free generated version and upload to your site. Or, if your plugin was WordPress.org complaint and you made sure to exclude all your premium code with the different provided techniques, you can deploy the downloaded free version to the .org repo.
246
-
247
- ## Reporting Bugs
248
- Email dev [at] freemius [dot] com
249
-
250
- ## FAQ
251
-
252
- ## Copyright
253
- Freemius, Inc.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
freemius/assets/css/admin/deactivation-feedback.css DELETED
@@ -1,2 +0,0 @@
1
- .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}.fs-modal .fs-modal-dialog li.reason{margin-bottom:10px}.fs-modal .fs-modal-dialog li.reason .reason-input,.fs-modal .fs-modal-dialog li.reason .internal-message{margin-left:29px}.fs-modal .fs-modal-dialog li.reason label{display:table}.fs-modal .fs-modal-dialog li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}.fs-modal .reason-input,.fs-modal .internal-message{margin:3px 0 3px 22px}.fs-modal .reason-input input,.fs-modal .reason-input textarea,.fs-modal .internal-message input,.fs-modal .internal-message textarea{width:100%}.fs-modal li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}body.has-fs-modal{overflow:hidden}#the-list .deactivate>.fs-slug{display:none}
2
- /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlYWN0aXZhdGlvbi1mZWVkYmFjay5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxlQUFlLGNBQWMsWUFBWSxXQUFXLE1BQU0sZUFBZSxhQUFhLDBCQUEwQixDQUFDLDJCQUEyQix1QkFBdUIsa0JBQWtCLFNBQVMsbUJBQW1CLG9CQUFvQixVQUFVLGVBQWUsV0FBVyxDQUFDLDBCQUEwQiwyQkFBMkIsaUJBQWlCLDhCQUFBLHNCQUFzQixrQkFBa0IsbUJBQW1CLFVBQVUsQ0FBQyxxREFBcUQsZUFBZSxDQUFDLHFDQUFxQyxrQkFBa0IsQ0FBQywwR0FBMEcsZ0JBQWdCLENBQUMsMkNBQTJDLGFBQWEsQ0FBQyxnREFBZ0QsbUJBQW1CLGVBQWUsQ0FBQyxDQUFDLGlCQUFpQixhQUFhLENBQUMsd0JBQXdCLGFBQWEsQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDLG9EQUFvRCxTQUFTLG1CQUFtQixZQUFZLENBQUMseUJBQXlCLGVBQWUsQ0FBQyw0QkFBNEIsY0FBYyxDQUFDLDZCQUE2QixlQUFlLENBQUMsZ0NBQWdDLGlCQUFpQixlQUFlLFlBQVksQ0FBQywyQkFBMkIsNkJBQTZCLGdCQUFnQixDQUFDLG1DQUFtQyxZQUFZLENBQUMsK0NBQStDLFFBQVEsQ0FBQyx1Q0FBdUMsWUFBWSxDQUFDLG9EQUFvRCxxQkFBcUIsQ0FBQyxzSUFBc0ksVUFBVSxDQUFDLDJEQUEyRCxzQkFBc0IsWUFBWSxZQUFZLENBQUMsa0JBQWtCLGVBQWUsQ0FBQywrQkFBK0IsWUFBWSxDQUFDIiwiZmlsZSI6ImRlYWN0aXZhdGlvbi1mZWVkYmFjay5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZnMtbW9kYWx7cG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6YXV0bztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3RvcDowO3otaW5kZXg6MTAwMDAwO2Rpc3BsYXk6bm9uZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC42KX0uZnMtbW9kYWwgLmZzLW1vZGFsLWRpYWxvZ3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0yOThweDtwYWRkaW5nLWJvdHRvbTozMHB4O3RvcDotMTAwJTt6LWluZGV4OjEwMDAwMTt3aWR0aDo1OTZweH1AbWVkaWEgKG1heC13aWR0aDogNjUwcHgpey5mcy1tb2RhbCAuZnMtbW9kYWwtZGlhbG9ne21hcmdpbi1sZWZ0Oi01MCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDt3aWR0aDoxMDAlfS5mcy1tb2RhbCAuZnMtbW9kYWwtZGlhbG9nIC5mcy1tb2RhbC1wYW5lbD5oMz5zdHJvbmd7Zm9udC1zaXplOjEuM2VtfS5mcy1tb2RhbCAuZnMtbW9kYWwtZGlhbG9nIGxpLnJlYXNvbnttYXJnaW4tYm90dG9tOjEwcHh9LmZzLW1vZGFsIC5mcy1tb2RhbC1kaWFsb2cgbGkucmVhc29uIC5yZWFzb24taW5wdXQsLmZzLW1vZGFsIC5mcy1tb2RhbC1kaWFsb2cgbGkucmVhc29uIC5pbnRlcm5hbC1tZXNzYWdle21hcmdpbi1sZWZ0OjI5cHh9LmZzLW1vZGFsIC5mcy1tb2RhbC1kaWFsb2cgbGkucmVhc29uIGxhYmVse2Rpc3BsYXk6dGFibGV9LmZzLW1vZGFsIC5mcy1tb2RhbC1kaWFsb2cgbGkucmVhc29uIGxhYmVsPnNwYW57ZGlzcGxheTp0YWJsZS1jZWxsO2ZvbnQtc2l6ZToxLjNlbX19LmZzLW1vZGFsLmFjdGl2ZXtkaXNwbGF5OmJsb2NrfS5mcy1tb2RhbC5hY3RpdmU6YmVmb3Jle2Rpc3BsYXk6YmxvY2t9LmZzLW1vZGFsLmFjdGl2ZSAuZnMtbW9kYWwtZGlhbG9ne3RvcDoxMCV9LmZzLW1vZGFsIC5mcy1tb2RhbC1ib2R5LC5mcy1tb2RhbCAuZnMtbW9kYWwtZm9vdGVye2JvcmRlcjowO2JhY2tncm91bmQ6I2ZlZmVmZTtwYWRkaW5nOjIwcHh9LmZzLW1vZGFsIC5mcy1tb2RhbC1ib2R5e2JvcmRlci1ib3R0b206MH0uZnMtbW9kYWwgLmZzLW1vZGFsLWJvZHkgaDJ7Zm9udC1zaXplOjIwcHh9LmZzLW1vZGFsIC5mcy1tb2RhbC1ib2R5PmRpdnttYXJnaW4tdG9wOjEwcHh9LmZzLW1vZGFsIC5mcy1tb2RhbC1ib2R5PmRpdiBoMntmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MH0uZnMtbW9kYWwgLmZzLW1vZGFsLWZvb3Rlcntib3JkZXItdG9wOiNlZWVlZWUgc29saWQgMXB4O3RleHQtYWxpZ246cmlnaHR9LmZzLW1vZGFsIC5mcy1tb2RhbC1mb290ZXI+LmJ1dHRvbnttYXJnaW46MCA3cHh9LmZzLW1vZGFsIC5mcy1tb2RhbC1mb290ZXI+LmJ1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW46MH0uZnMtbW9kYWwgLmZzLW1vZGFsLXBhbmVsOm5vdCguYWN0aXZlKXtkaXNwbGF5Om5vbmV9LmZzLW1vZGFsIC5yZWFzb24taW5wdXQsLmZzLW1vZGFsIC5pbnRlcm5hbC1tZXNzYWdle21hcmdpbjozcHggMCAzcHggMjJweH0uZnMtbW9kYWwgLnJlYXNvbi1pbnB1dCBpbnB1dCwuZnMtbW9kYWwgLnJlYXNvbi1pbnB1dCB0ZXh0YXJlYSwuZnMtbW9kYWwgLmludGVybmFsLW1lc3NhZ2UgaW5wdXQsLmZzLW1vZGFsIC5pbnRlcm5hbC1tZXNzYWdlIHRleHRhcmVhe3dpZHRoOjEwMCV9LmZzLW1vZGFsIGxpLnJlYXNvbi5oYXMtaW50ZXJuYWwtbWVzc2FnZSAuaW50ZXJuYWwtbWVzc2FnZXtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzo3cHg7ZGlzcGxheTpub25lfWJvZHkuaGFzLWZzLW1vZGFse292ZXJmbG93OmhpZGRlbn0jdGhlLWxpc3QgLmRlYWN0aXZhdGU+LmZzLXNsdWd7ZGlzcGxheTpub25lfVxuIl19 */
 
 
freemius/assets/css/admin/license-activation.css DELETED
@@ -1,2 +0,0 @@
1
- .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body .license-activation-message{margin:0;display:none}.fs-modal .fs-modal-body input.license_key{width:100%}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel:not(.active){display:none}body.has-fs-modal{overflow:hidden}
2
- /*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpY2Vuc2UtYWN0aXZhdGlvbi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxlQUFlLGNBQWMsWUFBWSxXQUFXLE1BQU0sZUFBZSxhQUFhLDBCQUEwQixDQUFDLDJCQUEyQix1QkFBdUIsa0JBQWtCLFNBQVMsbUJBQW1CLG9CQUFvQixVQUFVLGVBQWUsV0FBVyxDQUFDLDBCQUEwQiwyQkFBMkIsaUJBQWlCLDhCQUFBLHNCQUFzQixrQkFBa0IsbUJBQW1CLFVBQVUsQ0FBQyxxREFBcUQsZUFBZSxDQUFDLENBQUMsaUJBQWlCLGFBQWEsQ0FBQyx3QkFBd0IsYUFBYSxDQUFDLGtDQUFrQyxPQUFPLENBQUMsb0RBQW9ELFNBQVMsbUJBQW1CLFlBQVksQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLHFEQUFxRCxTQUFTLFlBQVksQ0FBQywyQ0FBMkMsVUFBVSxDQUFDLDJCQUEyQixjQUFjLENBQUMsNEJBQTRCLGNBQWMsQ0FBQyw2QkFBNkIsZUFBZSxDQUFDLGdDQUFnQyxpQkFBaUIsZUFBZSxZQUFZLENBQUMsMkJBQTJCLDZCQUE2QixnQkFBZ0IsQ0FBQyxtQ0FBbUMsWUFBWSxDQUFDLCtDQUErQyxRQUFRLENBQUMsdUNBQXVDLFlBQVksQ0FBQyxrQkFBa0IsZUFBZSxDQUFDIiwiZmlsZSI6ImxpY2Vuc2UtYWN0aXZhdGlvbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIuZnMtbW9kYWx7cG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6YXV0bztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3RvcDowO3otaW5kZXg6MTAwMDAwO2Rpc3BsYXk6bm9uZTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC42KX0uZnMtbW9kYWwgLmZzLW1vZGFsLWRpYWxvZ3tiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi0yOThweDtwYWRkaW5nLWJvdHRvbTozMHB4O3RvcDotMTAwJTt6LWluZGV4OjEwMDAwMTt3aWR0aDo1OTZweH1AbWVkaWEgKG1heC13aWR0aDogNjUwcHgpey5mcy1tb2RhbCAuZnMtbW9kYWwtZGlhbG9ne21hcmdpbi1sZWZ0Oi01MCU7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDt3aWR0aDoxMDAlfS5mcy1tb2RhbCAuZnMtbW9kYWwtZGlhbG9nIC5mcy1tb2RhbC1wYW5lbD5oMz5zdHJvbmd7Zm9udC1zaXplOjEuM2VtfX0uZnMtbW9kYWwuYWN0aXZle2Rpc3BsYXk6YmxvY2t9LmZzLW1vZGFsLmFjdGl2ZTpiZWZvcmV7ZGlzcGxheTpibG9ja30uZnMtbW9kYWwuYWN0aXZlIC5mcy1tb2RhbC1kaWFsb2d7dG9wOjEwJX0uZnMtbW9kYWwgLmZzLW1vZGFsLWJvZHksLmZzLW1vZGFsIC5mcy1tb2RhbC1mb290ZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDojZmVmZWZlO3BhZGRpbmc6MjBweH0uZnMtbW9kYWwgLmZzLW1vZGFsLWJvZHl7Ym9yZGVyLWJvdHRvbTowfS5mcy1tb2RhbCAuZnMtbW9kYWwtYm9keSAubGljZW5zZS1hY3RpdmF0aW9uLW1lc3NhZ2V7bWFyZ2luOjA7ZGlzcGxheTpub25lfS5mcy1tb2RhbCAuZnMtbW9kYWwtYm9keSBpbnB1dC5saWNlbnNlX2tleXt3aWR0aDoxMDAlfS5mcy1tb2RhbCAuZnMtbW9kYWwtYm9keSBwe2ZvbnQtc2l6ZToxNHB4fS5mcy1tb2RhbCAuZnMtbW9kYWwtYm9keSBoMntmb250LXNpemU6MjBweH0uZnMtbW9kYWwgLmZzLW1vZGFsLWJvZHk+ZGl2e21hcmdpbi10b3A6MTBweH0uZnMtbW9kYWwgLmZzLW1vZGFsLWJvZHk+ZGl2IGgye2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDowfS5mcy1tb2RhbCAuZnMtbW9kYWwtZm9vdGVye2JvcmRlci10b3A6I2VlZWVlZSBzb2xpZCAxcHg7dGV4dC1hbGlnbjpyaWdodH0uZnMtbW9kYWwgLmZzLW1vZGFsLWZvb3Rlcj4uYnV0dG9ue21hcmdpbjowIDdweH0uZnMtbW9kYWwgLmZzLW1vZGFsLWZvb3Rlcj4uYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbjowfS5mcy1tb2RhbCAuZnMtbW9kYWwtcGFuZWw6bm90KC5hY3RpdmUpe2Rpc3BsYXk6bm9uZX1ib2R5Lmhhcy1mcy1tb2RhbHtvdmVyZmxvdzpoaWRkZW59XG4iXX0= */
 
 
freemius/assets/img/addons-for-beaver-builder.png DELETED
Binary file
freemius/assets/img/addons-for-elementor.png DELETED
Binary file
freemius/assets/js/nojquery.ba-postmessage.min.min.js DELETED
@@ -1 +0,0 @@
1
- function NoJQueryPostMessageMixin(g,a){var b,h,e,d,f,c=1;if(window.postMessage){if(window.addEventListener){b=function(i){window.addEventListener("message",i,false)};h=function(i){window.removeEventListener("message",i,false)}}else{b=function(i){window.attachEvent("onmessage",i)};h=function(i){window.detachEvent("onmessage",i)}}this[g]=function(i,k,j){if(!k){return}j.postMessage(i,k.replace(/([^:]+:\/\/[^\/]+).*/,"$1"))};this[a]=function(k,j,i){if(e){h(e);e=null}if(!k){return false}e=b(function(l){switch(Object.prototype.toString.call(j)){case"[object String]":if(j!==l.origin){return false}break;case"[object Function]":if(j(l.origin)){return false}break}k(l)})}}else{this[g]=function(i,k,j){if(!k){return}j.location=k.replace(/#.*$/,"")+"#"+ +new Date+c+++"&"+i};this[a]=function(k,j,i){if(d){clearInterval(d);d=null}if(k){i=typeof j==="number"?j:typeof i==="number"?i:100;d=setInterval(function(){var m=document.location.hash,l=/^#?\d+&/;if(m!==f&&l.test(m)){f=m;k({data:m.replace(l,"")})}},i)}}}return this}
 
freemius/composer.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "name": "freemius/wordpress-sdk",
3
- "description": "Freemius WordPress SDK",
4
- "keywords": ["freemius", "wordpress", "plugin", "sdk"],
5
- "homepage": "https://freemius.com",
6
- "license": "GPL-3.0-only",
7
- "require": {
8
- "php": ">=5.2"
9
- }
10
- }
 
 
 
 
 
 
 
 
 
 
freemius/gulpfile.js DELETED
@@ -1,167 +0,0 @@
1
- var gulp = require('gulp');
2
- var path = require('path');
3
- var filesystem = require('fs');
4
- var wpPot = require('gulp-wp-pot');
5
- var gettext = require('gulp-gettext');
6
- var sort = require('gulp-sort');
7
- var pofill = require('gulp-pofill');
8
- var rename = require('gulp-rename');
9
- var clean = require('gulp-clean');
10
-
11
- var languagesFolder = './languages/';
12
-
13
- var options = require('./transifex-config.json');
14
-
15
- function getFolders(dir) {
16
- return filesystem.readdirSync(dir)
17
- .filter(function (file) {
18
- return filesystem.statSync(path.join(dir, file)).isDirectory();
19
- });
20
- }
21
-
22
- var transifex = require('gulp-transifex').createClient(options);
23
-
24
- // Create POT out of i18n.php.
25
- gulp.task('prepare-source', function () {
26
- gulp.src('**/*.php')
27
- .pipe(sort())
28
- .pipe(wpPot({
29
- destFile : 'freemius.pot',
30
- package : 'freemius',
31
- bugReport : 'https://github.com/Freemius/wordpress-sdk/issues',
32
- lastTranslator : 'Vova Feldman <vova@freemius.com>',
33
- team : 'Freemius Team <admin@freemius.com>',
34
- /*gettextMethods: {
35
- instances: ['this', '_fs'],
36
- methods: [
37
- 'get_text_inline'
38
- ]
39
- },*/
40
- gettextFunctions: [
41
- {name: 'get_text_inline'},
42
-
43
- {name: 'fs_text_inline'},
44
- {name: 'fs_echo_inline'},
45
- {name: 'fs_esc_js_inline'},
46
- {name: 'fs_esc_attr_inline'},
47
- {name: 'fs_esc_attr_echo_inline'},
48
- {name: 'fs_esc_html_inline'},
49
- {name: 'fs_esc_html_echo_inline'},
50
-
51
- {name: 'get_text_x_inline', context: 2},
52
- {name: 'fs_text_x_inline', context: 2},
53
- {name: 'fs_echo_x_inline', context: 2},
54
- {name: 'fs_esc_attr_x_inline', context: 2},
55
- {name: 'fs_esc_js_x_inline', context: 2},
56
- {name: 'fs_esc_js_echo_x_inline', context: 2},
57
- {name: 'fs_esc_html_x_inline', context: 2},
58
- {name: 'fs_esc_html_echo_x_inline', context: 2}
59
- /*,
60
-
61
-
62
- {name: '_fs_text'},
63
- {name: '_fs_x', context: 2},
64
- {name: '_fs_echo'},
65
- {name: '_fs_esc_attr'},
66
- {name: '_fs_esc_attr_echo'},
67
- {name: '_fs_esc_html'},
68
- {name: '_fs_esc_html_echo'},
69
- {name: '_fs_ex', context: 2},
70
- {name: '_fs_esc_attr_x', context: 2},
71
- {name: '_fs_esc_html_x', context: 2},
72
-
73
- {name: '_fs_n', plural: 2},
74
- {name: '_fs_n_noop', plural: 2},
75
- {name: '_fs_nx', plural: 2, context: 4},
76
- {name: '_fs_nx_noop', plural: 2, context: 3}*/
77
- ]
78
- }))
79
- .pipe(gulp.dest(languagesFolder + 'freemius.pot'));
80
-
81
- // Create English PO out of the POT.
82
- return gulp.src(languagesFolder + 'freemius.pot')
83
- .pipe(pofill({
84
- items: function (item) {
85
- // If msgstr is empty, use identity translation
86
- if (!item.msgstr.length) {
87
- item.msgstr = [''];
88
- }
89
- if (!item.msgstr[0]) {
90
- item.msgstr[0] = item.msgid;
91
- }
92
- return item;
93
- }
94
- }))
95
- .pipe(rename('freemius-en.po'))
96
- .pipe(gulp.dest(languagesFolder));
97
- });
98
-
99
- // Push updated po resource to transifex.
100
- gulp.task('update-transifex', ['prepare-source'], function () {
101
- return gulp.src(languagesFolder + 'freemius-en.po')
102
- .pipe(transifex.pushResource());
103
- });
104
-
105
- // Download latest *.po translations.
106
- gulp.task('download-translations', ['update-transifex'], function () {
107
- return gulp.src(languagesFolder + 'freemius-en.po')
108
- .pipe(transifex.pullResource());
109
- });
110
-
111
- // Move translations to languages root.
112
- gulp.task('prepare-translations', ['download-translations'], function () {
113
- var folders = getFolders(languagesFolder);
114
-
115
- return folders.map(function (folder) {
116
- return gulp.src(path.join(languagesFolder, folder, 'freemius-en.po'))
117
- .pipe(rename('freemius-' + folder + '.po'))
118
- .pipe(gulp.dest(languagesFolder));
119
- });
120
- });
121
-
122
- // Feel up empty translations with English.
123
- gulp.task('translations-feelup', ['prepare-translations'], function () {
124
- return gulp.src(languagesFolder + '*.po')
125
- .pipe(pofill({
126
- items: function (item) {
127
- // If msgstr is empty, use identity translation
128
- if (0 == item.msgstr.length) {
129
- item.msgstr = [''];
130
- }
131
- if (0 == item.msgstr[0].length) {
132
- // item.msgid[0] = item.msgid;
133
- item.msgstr[0] = item.msgid;
134
- }
135
- return item;
136
- }
137
- }))
138
- .pipe(gulp.dest(languagesFolder));
139
- });
140
-
141
- // Cleanup temporary translation folders.
142
- gulp.task('cleanup', ['prepare-translations'], function () {
143
- var folders = getFolders(languagesFolder);
144
-
145
- return folders.map(function (folder) {
146
- return gulp.src(path.join(languagesFolder, folder), {read: false})
147
- .pipe(clean());
148
- });
149
- });
150
-
151
- // Compile *.po to *.mo binaries for usage.
152
- gulp.task('compile-translations', ['translations-feelup'], function () {
153
- // Compile POs to MOs.
154
- return gulp.src(languagesFolder + '*.po')
155
- .pipe(gettext())
156
- .pipe(gulp.dest(languagesFolder))
157
- });
158
-
159
- gulp.task('default', [], function () {
160
- gulp.run('prepare-source');
161
- gulp.run('update-transifex');
162
- gulp.run('download-translations');
163
- gulp.run('prepare-translations');
164
- gulp.run('translations-feelup');
165
- gulp.run('cleanup');
166
- gulp.run('compile-translations');
167
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
freemius/package.json DELETED
@@ -1,27 +0,0 @@
1
- {
2
- "name": "freemius-wordpress-sdk",
3
- "description": "Monetization, analytics, and marketing automation platform for plugin & theme developers.",
4
- "author": "Freemius, Inc.",
5
- "license": "GPL-3.0",
6
- "homepage": "https://freemius.com",
7
- "version": "2.1.2",
8
- "main": "gulpfile.js",
9
- "dependencies": {},
10
- "scripts": {
11
- "test": "echo \"Error: no test specified\" && exit 1",
12
- "prune": "rimraf .codeclimate.yml .git .github .gitignore .travis.yml gulpfile.js composer.json"
13
- },
14
- "repository": "Freemius/wordpress-sdk.git",
15
- "devDependencies": {
16
- "gulp": "^3.9.1",
17
- "gulp-clean": "^0.3.2",
18
- "gulp-fs": "0.0.2",
19
- "gulp-gettext": "^0.3.0",
20
- "gulp-path": "^3.0.3",
21
- "gulp-pofill": "^1.0.0",
22
- "gulp-rename": "^1.2.2",
23
- "gulp-sort": "^2.0.0",
24
- "gulp-transifex": "^0.1.17",
25
- "gulp-wp-pot": "^1.3.5"
26
- }
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/controls/checkbox.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace LivemeshAddons\Controls;
4
+
5
+ use Elementor\Control_Base;
6
+
7
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
8
+
9
+ /**
10
+ * A single Checkbox control
11
+ *
12
+ * @param string $default Whether to initial it as checked. 'on' for checked, and '' (empty string) for unchecked
13
+ * Default ''
14
+ *
15
+ * @since 1.0.0
16
+ */
17
+ class LAE_Control_Checkbox extends Control_Base {
18
+
19
+ public function get_type() {
20
+ return 'lae-checkbox';
21
+ }
22
+
23
+ public function content_template() {
24
+ ?>
25
+ <label class="elementor-control-title">
26
+ <input type="checkbox" data-setting="{{ data.name }}" />
27
+ <span>{{{ data.label }}}</span>
28
+ </label>
29
+ <# if ( data.description ) { #>
30
+ <div class="elementor-control-field-description">{{{ data.description }}}</div>
31
+ <# } #>
32
+ <?php
33
+ }
34
+ }
plugin.php CHANGED
@@ -45,7 +45,7 @@ if ( !class_exists( 'Livemesh_Elementor_Addons' ) ) {
45
  public function __clone()
46
  {
47
  // Cloning instances of the class is forbidden
48
- _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '2.6' );
49
  }
50
 
51
  /**
@@ -55,7 +55,7 @@ if ( !class_exists( 'Livemesh_Elementor_Addons' ) ) {
55
  public function __wakeup()
56
  {
57
  // Unserializing instances of the class is forbidden
58
- _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '2.6' );
59
  }
60
 
61
  private function setup_debug_constants()
45
  public function __clone()
46
  {
47
  // Cloning instances of the class is forbidden
48
+ _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '2.6.2' );
49
  }
50
 
51
  /**
55
  public function __wakeup()
56
  {
57
  // Unserializing instances of the class is forbidden
58
+ _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'livemesh-el-addons' ), '2.6.2' );
59
  }
60
 
61
  private function setup_debug_constants()
readme.txt CHANGED
@@ -1,11 +1,11 @@
1
  === Livemesh Addons for Elementor ===
2
- Author URI: https://www.livemeshthemes.com/elementor-addons
3
- Plugin URI: https://www.livemeshthemes.com/elementor-addons
4
  Contributors: livemesh, freemius
5
  Tags: elementor, elementor addons, elementor extensions, elementor modules, page builder, portfolio, carousel, posts grid
6
  Requires at least: 4.5
7
- Tested up to: 5.1
8
- Stable Tag: 2.6
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -15,51 +15,51 @@ A collection of premium quality addons or modules for use in Elementor page buil
15
 
16
  Livemesh Addons for Elementor features huge collection of premium, easy to use yet highly functional extensions that can be used in a Elementor page builder. This is really a premium plugin that you can get for free.
17
 
18
- This plugin comes with widgets for just about everything you need to build a professional website without switching to a premium theme - services, team profiles, counters, bar charts, piecharts, testimonials, clients list, portfolio/posts grid, posts carousels, pricing plan and much more in the <a href="https://www.livemeshthemes.com/elementor-addons" title="Livemesh Addons for Elementor Premium Version">PRO version</a>. All the addons that help turn your free theme into a premium one with just a few clicks. Every premium page builder element you need is available for easy drag and drop into your page by just activating this plugin.
19
 
20
  <a href="https://wordpress.org/plugins/elementor/" rel="nofollow">Elementor</a> plugin must be activated to use this plugin. After you activate the required plugins, the addons should be available for use in Elementor.
21
 
22
  See the all of elements in action here -
23
 
24
- <a href="https://www.livemeshthemes.com/elementor-addons/addons-demo#demo-section" title="Livemesh Addons for Elementor Demo Site"><strong>LIVE DEMO</strong></a> | <a href="https://www.livemeshthemes.com/elementor-addons/pricing/" title="Livemesh Addons for Elementor Premium Version"><strong>Premium Version</strong></a>.
25
 
26
  The plugin comes with the following Elementor addons or extensions. <strong>Almost all of the elements come with a dark version.</strong> -
27
 
28
  <ul>
29
- <li><a href="https://www.livemeshthemes.com/elementor-addons/services/" title="Services Extension">Services</a> that capture what you can offer for your clients/customers.</li>
30
- <li><a href="https://www.livemeshthemes.com/elementor-addons/portfolio-grid/" title="Portfolio Grid Addon">Portfolio Grid addon</a> that displays portfolio/blog entries in a nice responsive grid. Masonry and packed options are supported.</li>
31
- <li><a href="https://www.livemeshthemes.com/elementor-addons/posts-grid/" title="Posts Grid Extension">Blog Posts Grid</a> that displays portfolio/blog entries in a nice responsive grid. Masonry and packed options are supported.</li>
32
- <li><a href="https://www.livemeshthemes.com/elementor-addons/team-member-profiles/" title="Team Profiles Addon">Team Profiles</a> extension to display all the team members.</li>
33
- <li><a href="https://www.livemeshthemes.com/elementor-addons/odometer-counters/" title="Odometer/Counters Extension">Odometers/Counters</a> to show impressive numbers pertaining to your work or company.</li>
34
- <li><a href="https://www.livemeshthemes.com/elementor-addons/progress-bars/" title="Bar Charts">Bar charts addon</a> to capture skills or any type of percentage stats.</li>
35
- <li><a href="https://www.livemeshthemes.com/elementor-addons/piecharts/" title="Piecharts Extension">Animated Pie charts</a> for visual depiction of percentage stats.</li>
36
- <li><a href="https://www.livemeshthemes.com/elementor-addons/testimonials/" title="Testimonials Addon">Testimonials</a> to tell everyone the good things you often hear from your clients/customers.</li>
37
- <li><a href="https://www.livemeshthemes.com/elementor-addons/testimonial-slider/" title="Testimonial Slider Addon">Testimonials slider</a> is a responsive touch enabled slider that cycles through testimonials.</li>
38
- <li><a href="https://www.livemeshthemes.com/elementor-addons/posts-carousel/" title="Posts Carousel Extension">Post Carousel extension</a> that displays your posts as a highly responsive carousel.</li>
39
- <li><a href="https://www.livemeshthemes.com/elementor-addons/generic-carousel/" title="Generic Carousel Addon">Generic Carousel</a> element that displays lets you present a list of HTML content in a carousel.</li>
40
  <li>Heading styles to capture effective headings for your page sections.</li>
41
- <li><a href="https://www.livemeshthemes.com/elementor-addons/clients-module/" title="Clients List Element">Clients List</a> extension to showcase the clients that you have handled.</li>
42
- <li><a href="https://www.livemeshthemes.com/elementor-addons/pricing-table/" title="Pricing Table Extension">Pricing Plans</a> to help get more sales.</li></ul>
43
 
44
- The <strong><a href="https://www.livemeshthemes.com/elementor-addons/" title="Livemesh Addons for Elementor Premium" target="_blank">Premium version</a></strong> of the plugin comes with additional addons and advanced features added to elements above -
45
 
46
  <ul>
47
- <li><a href="https://www.livemeshthemes.com/elementor-addons/posts-block/" title="Posts Block Addon">Posts Block</a> to help present your blog posts, events, news items or portfolio in a dozen creative ways. Comes with AJAX filtering, pagination and load more features to help visitors navigate your entire collection of blog posts or custom post types and their categories without reloading the page.</li>
48
- <li><a href="https://www.livemeshthemes.com/elementor-addons/twitter-grid/" title="Twitter Grid Addon">Twitter Grid</a> to help showcase tweets on your site with load more option.</li>
49
- <li><a href="https://www.livemeshthemes.com/elementor-addons/tabs/" title="Tabs Addon">Responsive Tabs</a> that function seamlessly across all devices and resolutions. The plugin features never before choice of over dozen styles of tabs to choosen from.</li>
50
- <li><a href="https://www.livemeshthemes.com/elementor-addons/accordion/" title="Accordion Module">Accordion/Toggle</a> that capture collapsible content panels when space is limited.</li>
51
- <li><a href="https://www.livemeshthemes.com/elementor-addons/sliders/" title="Image Slider Extension">Image Slider</a> to create a responsive slider of images with support for captions, multiple slider types like Nivo, Flex, Slick and lightweight sliders, thumbnail navigation etc.</li>
52
- <li><a href="https://www.livemeshthemes.com/elementor-addons/image-gallery/" title="Image Gallery Addon">Image Gallery</a> addon that lets you create a grid of images with options for masonry or fit rows, pagination, lazy load, lightbox support etc.</li>
53
- <li><a href="https://www.livemeshthemes.com/elementor-addons/video-gallery/" title="Video Gallery Addon">Video Gallery</a> to build a beautiful grid of videos to help showcase a collection of YouTube/Vimeo videos on your site.</li>
54
- <li><a href="https://www.livemeshthemes.com/elementor-addons/gallery-carousel/" title="Image Carousel">Image Carousel</a> for a responsive carousel of images.</li>
55
- <li><a href="https://www.livemeshthemes.com/elementor-addons/gallery-carousel/" title="Video Carousel">Video Carousel</a> for creation of a responsive carousel of YouTube/Vimeo videos.</li>
56
- <li><a href="https://www.livemeshthemes.com/elementor-addons/faq-element/" title="FAQ Element">FAQ element</a> to display a set of Frequently Asked Questions in a page.</li>
57
- <li><a href="https://www.livemeshthemes.com/elementor-addons/features/" title="Features Addon">Features Addon</a> for showcasing product features or services provided by an agency/business.</li>
58
- <li><a href="https://www.livemeshthemes.com/elementor-addons/buttons/" title="Buttons">Flat style buttons</a> with rich set of customization options.</li>
59
- <li><a href="https://www.livemeshthemes.com/elementor-addons/icon-lists/" title="Icon List element">Icon list addon</a> that lets you use either images or icon fonts to create custom social icons list, capture payment options etc.</li>
60
- <li><a href="https://www.livemeshthemes.com/elementor-addons/services-advanced/" title="Advanced Services">Advanced Services</a> with additional styles and animations for services addon.</li>
61
- <li><a href="https://www.livemeshthemes.com/elementor-addons/portfolio-grid-pro/" title="Posts Grid">Lazy Load</a> - The portfolio/post grid and image gallery addons incorporate option to lazy load posts/images with the click of a Load More button.</li>
62
- <li><a href="https://www.livemeshthemes.com/elementor-addons/portfolio-grid-pro/" title="Posts Grid">Pagination</a> - Create a grid of posts or custom post types with AJAX based pagination support. </li>
63
  <li>Lightbox Support - The premium version comes with support for Lightbox for grid and carousel addons.</li>
64
  <li>Customizations - Ability to choose custom font size, color or hover color for certain addons. More coming.</li>
65
  <li>Custom Animations - Choose from over <strong>40+ animations</strong> for most addon elements (excludes sliders, carousels and grid). The animations display on user scrolling to the element or when the element becomes visible in the browser window.</li>
@@ -79,7 +79,7 @@ Optionally, if you have premium version of the plugin installed, you can import
79
 
80
  The premium version of the plugin entitles you to quick support with replies posted within 24 hours (on week days).
81
 
82
- Please submit your support query through our <a href="https://www.livemeshthemes.com/elementor-addons/contact-us/" title="Livemesh Contact form">website contact form</a>. This will create a support ticket in our support portal.
83
 
84
  == Frequently Asked Questions ==
85
 
@@ -106,7 +106,12 @@ Pls install and activate the <a href="https://wordpress.org/plugins/portfolio-po
106
 
107
  == Changelog ==
108
 
 
 
 
 
109
  = 2.6 =
 
110
  * Fixed - Some themes can raise JS error due to jQuery $ being unavailable
111
  * Updated - Flexslider library with RTL support
112
 
1
  === Livemesh Addons for Elementor ===
2
+ Author URI: https://livemeshelementor.com
3
+ Plugin URI: https://livemeshelementor.com
4
  Contributors: livemesh, freemius
5
  Tags: elementor, elementor addons, elementor extensions, elementor modules, page builder, portfolio, carousel, posts grid
6
  Requires at least: 4.5
7
+ Tested up to: 5.2
8
+ Stable Tag: 2.6.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
15
 
16
  Livemesh Addons for Elementor features huge collection of premium, easy to use yet highly functional extensions that can be used in a Elementor page builder. This is really a premium plugin that you can get for free.
17
 
18
+ This plugin comes with widgets for just about everything you need to build a professional website without switching to a premium theme - services, team profiles, counters, bar charts, piecharts, testimonials, clients list, portfolio/posts grid, posts carousels, pricing plan and much more in the <a href="https://livemeshelementor.com" title="Livemesh Addons for Elementor Premium Version">PRO version</a>. All the addons that help turn your free theme into a premium one with just a few clicks. Every premium page builder element you need is available for easy drag and drop into your page by just activating this plugin.
19
 
20
  <a href="https://wordpress.org/plugins/elementor/" rel="nofollow">Elementor</a> plugin must be activated to use this plugin. After you activate the required plugins, the addons should be available for use in Elementor.
21
 
22
  See the all of elements in action here -
23
 
24
+ <a href="https://livemeshelementor.com/addons-demo#demo-section" title="Livemesh Addons for Elementor Demo Site"><strong>LIVE DEMO</strong></a> | <a href="https://livemeshelementor.com/pricing/" title="Livemesh Addons for Elementor Premium Version"><strong>Premium Version</strong></a>.
25
 
26
  The plugin comes with the following Elementor addons or extensions. <strong>Almost all of the elements come with a dark version.</strong> -
27
 
28
  <ul>
29
+ <li><a href="https://livemeshelementor.com/services/" title="Services Extension">Services</a> that capture what you can offer for your clients/customers.</li>
30
+ <li><a href="https://livemeshelementor.com/portfolio-grid/" title="Portfolio Grid Addon">Portfolio Grid addon</a> that displays portfolio/blog entries in a nice responsive grid. Masonry and packed options are supported.</li>
31
+ <li><a href="https://livemeshelementor.com/posts-grid/" title="Posts Grid Extension">Blog Posts Grid</a> that displays portfolio/blog entries in a nice responsive grid. Masonry and packed options are supported.</li>
32
+ <li><a href="https://livemeshelementor.com/team-member-profiles/" title="Team Profiles Addon">Team Profiles</a> extension to display all the team members.</li>
33
+ <li><a href="https://livemeshelementor.com/odometer-counters/" title="Odometer/Counters Extension">Odometers/Counters</a> to show impressive numbers pertaining to your work or company.</li>
34
+ <li><a href="https://livemeshelementor.com/progress-bars/" title="Bar Charts">Bar charts addon</a> to capture skills or any type of percentage stats.</li>
35
+ <li><a href="https://livemeshelementor.com/piecharts/" title="Piecharts Extension">Animated Pie charts</a> for visual depiction of percentage stats.</li>
36
+ <li><a href="https://livemeshelementor.com/testimonials/" title="Testimonials Addon">Testimonials</a> to tell everyone the good things you often hear from your clients/customers.</li>
37
+ <li><a href="https://livemeshelementor.com/testimonial-slider/" title="Testimonial Slider Addon">Testimonials slider</a> is a responsive touch enabled slider that cycles through testimonials.</li>
38
+ <li><a href="https://livemeshelementor.com/posts-carousel/" title="Posts Carousel Extension">Post Carousel extension</a> that displays your posts as a highly responsive carousel.</li>
39
+ <li><a href="https://livemeshelementor.com/generic-carousel/" title="Generic Carousel Addon">Generic Carousel</a> element that displays lets you present a list of HTML content in a carousel.</li>
40
  <li>Heading styles to capture effective headings for your page sections.</li>
41
+ <li><a href="https://livemeshelementor.com/clients-module/" title="Clients List Element">Clients List</a> extension to showcase the clients that you have handled.</li>
42
+ <li><a href="https://livemeshelementor.com/pricing-table/" title="Pricing Table Extension">Pricing Plans</a> to help get more sales.</li></ul>
43
 
44
+ The <strong><a href="https://livemeshelementor.com/" title="Livemesh Addons for Elementor Premium" target="_blank">Premium version</a></strong> of the plugin comes with additional addons and advanced features added to elements above -
45
 
46
  <ul>
47
+ <li><a href="https://livemeshelementor.com/posts-block/" title="Posts Block Addon">Posts Block</a> to help present your blog posts, events, news items or portfolio in a dozen creative ways. Comes with AJAX filtering, pagination and load more features to help visitors navigate your entire collection of blog posts or custom post types and their categories without reloading the page.</li>
48
+ <li><a href="https://livemeshelementor.com/twitter-grid/" title="Twitter Grid Addon">Twitter Grid</a> to help showcase tweets on your site with load more option.</li>
49
+ <li><a href="https://livemeshelementor.com/tabs/" title="Tabs Addon">Responsive Tabs</a> that function seamlessly across all devices and resolutions. The plugin features never before choice of over dozen styles of tabs to choosen from.</li>
50
+ <li><a href="https://livemeshelementor.com/accordion/" title="Accordion Module">Accordion/Toggle</a> that capture collapsible content panels when space is limited.</li>
51
+ <li><a href="https://livemeshelementor.com/sliders/" title="Image Slider Extension">Image Slider</a> to create a responsive slider of images with support for captions, multiple slider types like Nivo, Flex, Slick and lightweight sliders, thumbnail navigation etc.</li>
52
+ <li><a href="https://livemeshelementor.com/image-gallery/" title="Image Gallery Addon">Image Gallery</a> addon that lets you create a grid of images with options for masonry or fit rows, pagination, lazy load, lightbox support etc.</li>
53
+ <li><a href="https://livemeshelementor.com/video-gallery/" title="Video Gallery Addon">Video Gallery</a> to build a beautiful grid of videos to help showcase a collection of YouTube/Vimeo videos on your site.</li>
54
+ <li><a href="https://livemeshelementor.com/gallery-carousel/" title="Image Carousel">Image Carousel</a> for a responsive carousel of images.</li>
55
+ <li><a href="https://livemeshelementor.com/gallery-carousel/" title="Video Carousel">Video Carousel</a> for creation of a responsive carousel of YouTube/Vimeo videos.</li>
56
+ <li><a href="https://livemeshelementor.com/faq-element/" title="FAQ Element">FAQ element</a> to display a set of Frequently Asked Questions in a page.</li>
57
+ <li><a href="https://livemeshelementor.com/features/" title="Features Addon">Features Addon</a> for showcasing product features or services provided by an agency/business.</li>
58
+ <li><a href="https://livemeshelementor.com/buttons/" title="Buttons">Flat style buttons</a> with rich set of customization options.</li>
59
+ <li><a href="https://livemeshelementor.com/icon-lists/" title="Icon List element">Icon list addon</a> that lets you use either images or icon fonts to create custom social icons list, capture payment options etc.</li>
60
+ <li><a href="https://livemeshelementor.com/services-advanced/" title="Advanced Services">Advanced Services</a> with additional styles and animations for services addon.</li>
61
+ <li><a href="https://livemeshelementor.com/portfolio-grid-pro/" title="Posts Grid">Lazy Load</a> - The portfolio/post grid and image gallery addons incorporate option to lazy load posts/images with the click of a Load More button.</li>
62
+ <li><a href="https://livemeshelementor.com/portfolio-grid-pro/" title="Posts Grid">Pagination</a> - Create a grid of posts or custom post types with AJAX based pagination support. </li>
63
  <li>Lightbox Support - The premium version comes with support for Lightbox for grid and carousel addons.</li>
64
  <li>Customizations - Ability to choose custom font size, color or hover color for certain addons. More coming.</li>
65
  <li>Custom Animations - Choose from over <strong>40+ animations</strong> for most addon elements (excludes sliders, carousels and grid). The animations display on user scrolling to the element or when the element becomes visible in the browser window.</li>
79
 
80
  The premium version of the plugin entitles you to quick support with replies posted within 24 hours (on week days).
81
 
82
+ Please submit your support query through our <a href="https://livemeshelementor.com/contact-us/" title="Livemesh Contact form">website contact form</a>. This will create a support ticket in our support portal.
83
 
84
  == Frequently Asked Questions ==
85
 
106
 
107
  == Changelog ==
108
 
109
+ = 2.6.2 =
110
+ * Updated - Readme.txt and documentation
111
+ * Removed - Unused files in plugin folders.
112
+
113
  = 2.6 =
114
+ * Updated - Freemius library with a security fix. Recommended to update immediately.
115
  * Fixed - Some themes can raise JS error due to jQuery $ being unavailable
116
  * Updated - Flexslider library with RTL support
117