modified file `menu-icons`

This commit is contained in:
KawaiiPunk 2024-01-03 21:51:19 +00:00 committed by Gitium
parent 17dad8c76e
commit 6e1c54f7ba
197 changed files with 56047 additions and 2040 deletions

View File

@ -0,0 +1,577 @@
<?php
// Event schedules failed
if ( !wp_next_scheduled ( 'cau_set_schedule_mail' ) ) {
echo '<div id="message" class="error"><p><b>'.__( 'Companion Auto Update was not able to set the event for sending you emails, please re-activate the plugin in order to set the event', 'companion-auto-update' ).'.</b></p></div>';
}
// Database requires an update
if ( cau_incorrectDatabaseVersion() ) {
echo '<div id="message" class="error"><p><b>'.__( 'Companion Auto Update Database Update', 'companion-auto-update' ).' &ndash;</b>
'.__( 'We need you to update to the latest database version', 'companion-auto-update' ).'. <a href="'.cau_url( 'status' ).'&run=db_update" class="button button-alt" style="background: #FFF;">'.__( 'Run updater now', 'companion-auto-update' ).'</a></p></div>';
}
// Update log DB is empty
if ( cau_updateLogDBisEmpty() ) {
echo '<div id="message" class="error"><p><b>'.__( 'Companion Auto Update Database Update', 'companion-auto-update' ).' &ndash;</b>
'.__( 'We need to add some information to your database', 'companion-auto-update' ).'. <a href="'.cau_url( 'status' ).'&run=db_info_update" class="button button-alt" style="background: #FFF;">'.__( 'Run updater now', 'companion-auto-update' ).'</a></p></div>';
}
// Save settings
if( isset( $_POST['submit'] ) ) {
check_admin_referer( 'cau_save_settings' );
global $wpdb;
$table_name = $wpdb->prefix . "auto_updates";
// Auto updater
$plugins = isset( $_POST['plugins'] ) ? sanitize_text_field( $_POST['plugins'] ) : '';
$themes = isset( $_POST['themes'] ) ? sanitize_text_field( $_POST['themes'] ) : '';
$minor = isset( $_POST['minor'] ) ? sanitize_text_field( $_POST['minor'] ) : '';
$major = isset( $_POST['major'] ) ? sanitize_text_field( $_POST['major'] ) : '';
$translations = isset( $_POST['translations'] ) ? sanitize_text_field( $_POST['translations'] ) : '';
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'plugins'", $plugins ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'themes'", $themes ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'minor'", $minor ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'major'", $major ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'translations'", $translations ) );
// Emails
$send = isset( $_POST['cau_send'] ) ? sanitize_text_field( $_POST['cau_send'] ) : '';
$sendupdate = isset( $_POST['cau_send_update'] ) ? sanitize_text_field( $_POST['cau_send_update'] ) : '';
$sendoutdated = isset( $_POST['cau_send_outdated'] ) ? sanitize_text_field( $_POST['cau_send_outdated'] ) : '';
$wpemails = isset( $_POST['wpemails'] ) ? sanitize_text_field( $_POST['wpemails'] ) : '';
$email = isset( $_POST['cau_email'] ) ? sanitize_text_field( $_POST['cau_email'] ) : '';
$html_or_text = isset( $_POST['html_or_text'] ) ? sanitize_text_field( $_POST['html_or_text'] ) : 'html';
$dbupdateemails = isset( $_POST['dbupdateemails'] ) ? sanitize_text_field( $_POST['dbupdateemails'] ) : '';
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'email'", $email ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'send'", $send ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'sendupdate'", $sendupdate ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'sendoutdated'", $sendoutdated ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'wpemails'", $wpemails ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'html_or_text'", $html_or_text ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'dbupdateemails'", $dbupdateemails ) );
// Advanced
$allow_editor = isset( $_POST['allow_editor'] ) ? sanitize_text_field( $_POST['allow_editor'] ) : '';
$allow_author = isset( $_POST['allow_author'] ) ? sanitize_text_field( $_POST['allow_author'] ) : '';
$advanced_info_emails = isset( $_POST['advanced_info_emails'] ) ? sanitize_text_field( $_POST['advanced_info_emails'] ) : '';
$plugin_links_emails = isset( $_POST['plugin_links_emails'] ) ? sanitize_text_field( $_POST['plugin_links_emails'] ) : '';
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'allow_editor'", $allow_editor ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'allow_author'", $allow_author ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'advanced_info_emails'", $advanced_info_emails ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'plugin_links_emails'", $plugin_links_emails ) );
// Delay
$update_delay = isset( $_POST['update_delay'] ) ? sanitize_text_field( $_POST['update_delay'] ) : '';
$update_delay_days = isset( $_POST['update_delay_days'] ) ? sanitize_text_field( $_POST['update_delay_days'] ) : '';
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'update_delay'", $update_delay ) );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'update_delay_days'", $update_delay_days ) );
// Intervals
// Set variables
$plugin_sc = sanitize_text_field( $_POST['plugin_schedule'] );
$theme_sc = sanitize_text_field( $_POST['theme_schedule'] );
$core_sc = sanitize_text_field( $_POST['core_schedule'] );
$schedule_mail = sanitize_text_field( $_POST['update_notifications'] );
$outdated_notifier = sanitize_text_field( $_POST['outdated_notifier'] );
// First clear schedules
wp_clear_scheduled_hook( 'wp_update_plugins' );
wp_clear_scheduled_hook( 'wp_update_themes' );
wp_clear_scheduled_hook( 'wp_version_check' );
wp_clear_scheduled_hook( 'cau_set_schedule_mail' );
wp_clear_scheduled_hook( 'cau_custom_hooks_plugins' );
wp_clear_scheduled_hook( 'cau_custom_hooks_themes' );
wp_clear_scheduled_hook( 'cau_log_updater' );
wp_clear_scheduled_hook( 'cau_outdated_notifier' );
// Then set the new times
// Plugins
if( $plugin_sc == 'daily' ) {
$date = date( 'Y-m-d' );
$hours = sanitize_text_field( $_POST['plugin_schedule-sethour'] );
$minutes = sanitize_text_field( $_POST['plugin_schedule-setminutes'] );
$seconds = date( 's' );
$fullDate = $date.' '.$hours.':'.$minutes.':'.$seconds;
$pluginSetTime = strtotime( $fullDate );
wp_schedule_event( $pluginSetTime, $plugin_sc, 'wp_update_plugins' );
wp_schedule_event( $pluginSetTime, $plugin_sc, 'cau_custom_hooks_plugins' );
wp_schedule_event( ( $pluginSetTime - 1800 ), $plugin_sc, 'cau_log_updater' );
} else {
wp_schedule_event( time(), $plugin_sc, 'wp_update_plugins' );
wp_schedule_event( time(), $plugin_sc, 'cau_custom_hooks_plugins' );
wp_schedule_event( ( time() - 1800 ), $plugin_sc, 'cau_log_updater' );
}
// Themes
if( $theme_sc == 'daily' ) {
$dateT = date( 'Y-m-d' );
$hoursT = sanitize_text_field( $_POST['theme_schedule-sethour'] );
$minutesT = sanitize_text_field( $_POST['theme_schedule-setminutes'] );
$secondsT = date( 's' );
$fullDateT = $dateT.' '.$hoursT.':'.$minutesT.':'.$secondsT;
$themeSetTime = strtotime( $fullDateT );
wp_schedule_event( $themeSetTime, $theme_sc, 'wp_update_themes' );
wp_schedule_event( $themeSetTime, $theme_sc, 'cau_custom_hooks_themes' );
} else {
wp_schedule_event( time(), $theme_sc, 'wp_update_themes' );
wp_schedule_event( time(), $theme_sc, 'cau_custom_hooks_themes' );
}
// Core
if( $core_sc == 'daily' ) {
$dateC = date( 'Y-m-d' );
$hoursC = sanitize_text_field( $_POST['core_schedule-sethour'] );
$minutesC = sanitize_text_field( $_POST['core_schedule-setminutes'] );
$secondsC = date( 's' );
$fullDateC = $dateC.' '.$hoursC.':'.$minutesC.':'.$secondsC;
$coreSetTime = strtotime( $fullDateC );
wp_schedule_event( $coreSetTime, $core_sc, 'wp_version_check' );
} else {
wp_schedule_event( time(), $core_sc, 'wp_version_check' );
}
// Update notifications
if( $schedule_mail == 'daily' ) {
$dateT = date( 'Y-m-d' );
$hoursT = sanitize_text_field( $_POST['update_notifications-sethour'] );
$minutesT = sanitize_text_field( $_POST['update_notifications-setminutes'] );
$secondsT = date( 's' );
$fullDateT = $dateT.' '.$hoursT.':'.$minutesT.':'.$secondsT;
$emailSetTime = strtotime( $fullDateT );
wp_schedule_event( $emailSetTime, $schedule_mail, 'cau_set_schedule_mail' );
} else {
wp_schedule_event( time(), $schedule_mail, 'cau_set_schedule_mail' );
}
// Outdated notifications
if( $outdated_notifier == 'daily' ) {
$dateT = date( 'Y-m-d' );
$hoursT = sanitize_text_field( $_POST['outdated_notifier-sethour'] );
$minutesT = sanitize_text_field( $_POST['outdated_notifier-setminutes'] );
$secondsT = date( 's' );
$fullDateT = $dateT.' '.$hoursT.':'.$minutesT.':'.$secondsT;
$emailSetTime = strtotime( $fullDateT );
wp_schedule_event( $emailSetTime, $outdated_notifier, 'cau_outdated_notifier' );
} else {
wp_schedule_event( time(), $outdated_notifier, 'cau_outdated_notifier' );
}
echo '<div id="message" class="updated"><p><b>'.__( 'Settings saved.' ).'</b></p></div>';
}
// Welcome screen for first time viewers
if( isset( $_GET['welcome'] ) ) {
echo '<div class="welcome-to-cau welcome-bg" style="margin-bottom: 0px;">
<div class="welcome-image">
</div><div class="welcome-content">
<h3>'.__( 'Welcome to Companion Auto Update', 'companion-auto-update' ).'</h3>
<br />
<p><strong>'.__( 'You\'re set and ready to go', 'companion-auto-update' ).'</strong></p>
<p>'.__( 'The plugin is all set and ready to go with the recommended settings, but if you\'d like you can change them below.' ).'</p>
<br />
<p><strong>'.__( 'Get Started' ).': </strong> <a href="'.cau_url( 'pluginlist' ).'">'.__( 'Update filter', 'companion-auto-update' ).'</a> &nbsp; | &nbsp;
<strong>'.__( 'More Actions' ).': </strong> <a href="http://codeermeneer.nl/cau_poll/" target="_blank">'.__('Give feedback', 'companion-auto-update').'</a> - <a href="https://translate.wordpress.org/projects/wp-plugins/companion-auto-update/" target="_blank">'.__( 'Help us translate', 'companion-auto-update' ).'</a></p>
</div>
</div>';
}
$cs_hooks_p = wp_get_schedule( 'cau_custom_hooks_plugins' );
$cs_hooks_t = wp_get_schedule( 'cau_custom_hooks_themes' );
?>
<div class="cau-dashboard cau-column-wide">
<form method="POST">
<div class="welcome-to-cau update-bg cau-dashboard-box">
<h2 class="title"><?php _e('Auto Updater', 'companion-auto-update');?></h2>
<table class="form-table">
<tr>
<td>
<fieldset>
<?php
$plugins_on = ( cau_get_db_value( 'plugins' ) == 'on' ) ? "CHECKED" : "";
$themes_on = ( cau_get_db_value( 'themes' ) == 'on' ) ? "CHECKED" : "";
$minor_on = ( cau_get_db_value( 'minor' ) == 'on' ) ? "CHECKED" : "";
$major_on = ( cau_get_db_value( 'major' ) == 'on' ) ? "CHECKED" : "";
$translations_on = ( cau_get_db_value( 'translations' ) == 'on' ) ? "CHECKED" : "";
echo "<p><input id='plugins' name='plugins' type='checkbox' {$plugins_on}/><label for='plugins'>".__( 'Auto update plugins?', 'companion-auto-update' )."</label></p>";
echo "<p><input id='themes' name='themes' type='checkbox' {$themes_on}/><label for='themes'>".__( 'Auto update themes?', 'companion-auto-update' )."</label></p>";
echo "<p><input id='minor' name='minor' type='checkbox' {$minor_on}/><label for='minor'>".__( 'Auto update minor core updates?', 'companion-auto-update' )." <code class='majorMinorExplain'>6.0.0 > 6.0.1</code></label></p>";
echo "<p><input id='major' name='major' type='checkbox' {$major_on}/><label for='major'>".__( 'Auto update major core updates?', 'companion-auto-update' )." <code class='majorMinorExplain'>6.0.0 > 6.1.0</code></label></p>";
echo "<p><input id='translations' name='translations' type='checkbox' {$translations_on}/><label for='translations'>".__( 'Auto update translation files?', 'companion-auto-update' )."</label></p>";
?>
</fieldset>
</td>
</tr>
</table>
</div>
<div class="welcome-to-cau email-bg cau-dashboard-box">
<h2 class="title"><?php _e( 'Email Notifications', 'companion-auto-update' );?></h2>
<?php
$db_email = cau_get_db_value( 'email' );
$toemail = ( $db_email == '' ) ? get_option( 'admin_email' ) : $db_email;
$hot = cau_get_db_value( 'html_or_text' );
?>
<table class="form-table">
<tr>
<th scope="row"><?php _e( 'Update notifications', 'companion-auto-update' );?></th>
<td>
<p>
<input id="cau_send_update" name="cau_send_update" type="checkbox" <?php if( cau_get_db_value( 'sendupdate' ) == 'on' ) { echo 'checked'; } ?> />
<label for="cau_send_update"><?php _e( 'Send me emails when something has been updated.', 'companion-auto-update' );?></label>
</p>
<p>
<input id="cau_send" name="cau_send" type="checkbox" <?php if( cau_get_db_value( 'send' ) == 'on' ) { echo 'checked'; } ?> />
<label for="cau_send"><?php _e( 'Send me emails when an update is available.', 'companion-auto-update' );?></label>
</p>
</td>
</tr>
<tr>
<th scope="row"><?php _e( 'Check for outdated software', 'companion-auto-update' );?></th>
<td>
<p>
<input id="cau_send_outdated" name="cau_send_outdated" type="checkbox" <?php if( cau_get_db_value( 'sendoutdated' ) == 'on' ) { echo 'checked'; } ?> />
<label for="cau_send_outdated"><?php _e( 'Be notified of plugins that have not been tested with the 3 latest major versions of WordPress.', 'companion-auto-update' );?></label>
</p>
</td>
</tr>
<tr>
<th scope="row"><?php _e( 'Email Address', 'companion-auto-update' );?></th>
<td>
<p>
<label for="cau_email"><?php _e( 'To', 'companion-auto-update' ); ?>:</label>
<input type="text" name="cau_email" id="cau_email" class="regular-text" placeholder="<?php echo get_option( 'admin_email' ); ?>" value="<?php echo esc_html( $toemail ); ?>" />
</p>
<p class="description"><?php _e('Seperate email addresses using commas.', 'companion-auto-update');?></p>
</td>
</tr>
<tr>
<th scope="row"><?php _e( 'Use HTML in emails?', 'companion-auto-update' );?></th>
<td>
<p>
<select id='html_or_text' name='html_or_text'>
<option value='html' <?php if( $hot == 'html' ) { echo "SELECTED"; } ?>><?php _e( 'Use HTML', 'companion-auto-update' ); ?></option>
<option value='text' <?php if( $hot == 'text' ) { echo "SELECTED"; } ?>><?php _e( 'Use plain text', 'companion-auto-update' ); ?></option>
</select>
</p>
</td>
</tr>
<tr>
<th scope="row"><?php _e( 'Show more info in emails', 'companion-auto-update' );?></th>
<td>
<p>
<label for="advanced_info_emails"><input name="advanced_info_emails" type="checkbox" id="advanced_info_emails" <?php if( cau_get_db_value( 'advanced_info_emails' ) == 'on' ) { echo "CHECKED"; } ?>> <?php _e( 'Show the time of the update', 'companion-auto-update' ); ?></label>
</p>
<p>
<label for="plugin_links_emails"><input name="plugin_links_emails" type="checkbox" id="plugin_links_emails" <?php if( cau_get_db_value( 'plugin_links_emails' ) == 'on' ) { echo "CHECKED"; } ?>> <?php _e( 'Show links to WordPress.org pages', 'companion-auto-update' ); ?></label>
</p>
</td>
</tr>
<tr>
<th scope="row">
<?php _e( 'WordPress notifications', 'companion-auto-update' );?>
<span class='cau_tooltip'><span class="dashicons dashicons-editor-help"></span>
<span class='cau_tooltip_text'>
<?php _e( 'Core notifications are handled by WordPress and not by this plugin. You can only disable them, changing your email address in the settings above will not affect these notifications.', 'companion-auto-update' );?>
</span>
</span>
</th>
<td>
<p>
<input id="wpemails" name="wpemails" type="checkbox" <?php if( cau_get_db_value( 'wpemails' ) == 'on' ) { echo 'checked'; } ?> />
<label for="wpemails"><?php _e( 'By default WordPress sends an email when a core update has occurred. Uncheck this box to disable these emails.', 'companion-auto-update' ); ?></label>
</p>
</td>
</tr>
<tr>
<th scope="row"><?php _e( 'Database update required', 'companion-auto-update' );?></th>
<td>
<p>
<input id="dbupdateemails" name="dbupdateemails" type="checkbox" <?php if( cau_get_db_value( 'dbupdateemails' ) == 'on' ) { echo 'checked'; } ?> />
<label for="dbupdateemails"><?php _e( 'Sometimes we\'ll need your help updating our database version to the latest version, check this box to allow us to send you an email about this.', 'companion-auto-update' ); ?></label>
</p>
</td>
</tr>
</table>
</div>
<div class="welcome-to-cau interval-bg cau-dashboard-box" style="overflow: hidden;">
<h2 class="title"><?php _e( 'Intervals', 'companion-auto-update' );?></h2>
<?php
function cau_show_interval_selection( $identiefier, $schedule ) {
// Get the info
$setValue = wp_get_schedule( $schedule );
$setTime = wp_next_scheduled( $schedule );
$setHour = date( 'H' , $setTime );
$setMinutes = date( 'i' , $setTime );
// Show interval selection
echo "<p>";
echo "<select name='$identiefier' id='$identiefier' class='schedule_interval wide interval_scheduler' data-timeblock='$identiefier'>";
foreach ( cau_wp_get_schedules() as $key => $value ) {
echo "<option "; if( $setValue == $key ) { echo "selected "; } echo "value='".$key."'>".$value."</option>";
}
echo "</select>";
echo "</p>";
// Set the time when daily is selected
echo "<div class='timeblock-$identiefier' style='display: none;'>";
echo "<div class='cau_schedule_input'>
<input type='number' min='0' max='23' name='".$identiefier."-sethour' value='$setHour' maxlength='2' >
</div><div class='cau_schedule_input_div'>
:
</div><div class='cau_schedule_input'>
<input type='number' min='0' max='59' name='".$identiefier."-setminutes' value='$setMinutes' maxlength='2' >
</div><div class='cau_shedule_notation'>
<span class='cau_tooltip'><span class='dashicons dashicons-editor-help'></span>
<span class='cau_tooltip_text'>".__( 'At what time should the updater run? Only works when set to <u>daily</u>.', 'companion-auto-update' )." - ".__( 'Time notation: 24H', 'companion-auto-update' )."</span>
</span>
</div>";
echo "</div>";
}
?>
<div class="welcome-column">
<h4><?php _e( 'Plugin update interval', 'companion-auto-update' );?></h4>
<?php cau_show_interval_selection( 'plugin_schedule', 'wp_update_plugins' ); ?>
</div>
<div class="welcome-column">
<h4><?php _e( 'Theme update interval', 'companion-auto-update' );?></h4>
<?php cau_show_interval_selection( 'theme_schedule', 'wp_update_themes' ); ?>
</div>
<div class="welcome-column">
<h4><?php _e( 'Core update interval', 'companion-auto-update' );?></h4>
<?php cau_show_interval_selection( 'core_schedule', 'wp_version_check' ); ?>
</div>
<p></p>
<div class="welcome-column">
<h4><?php _e( 'Update notifications', 'companion-auto-update' );?></h4>
<?php cau_show_interval_selection( 'update_notifications', 'cau_set_schedule_mail' ); ?>
</div>
<div class="welcome-column">
<h4><?php _e( 'Outdated software', 'companion-auto-update' );?></h4>
<?php cau_show_interval_selection( 'outdated_notifier', 'cau_outdated_notifier' ); ?>
</div>
</div>
<div class="welcome-to-cau advanced-bg cau-dashboard-box">
<h2 class="title"><?php _e( 'Advanced settings', 'companion-auto-update' ); ?></h2>
<?php
// Access
$accessallowed = cau_allowed_user_rights_array();
$has_editor = in_array( 'editor', $accessallowed ) ? true : false;
$has_author = in_array( 'author', $accessallowed ) ? true : false;
// Update delays
$has_updatedelay = ( cau_get_db_value( 'update_delay' ) == 'on' ) ? true : false;
?>
<table class="form-table">
<tbody>
<tr>
<th scope="row"><label><?php _e( 'Allow access to:', 'companion-auto-update' ); ?></label></th>
<td>
<p><label for="allow_administrator"><input name="allow_administrator" type="checkbox" id="allow_administrator" disabled="" checked=""><?php _e( 'Administrator', 'companion-auto-update' ); ?></label></p>
<p><label for="allow_editor"><input name="allow_editor" type="checkbox" id="allow_editor" <?php if( $has_editor ) { echo "CHECKED"; } ?>><?php _e( 'Editor', 'companion-auto-update' ); ?></label></p>
<p><label for="allow_author"><input name="allow_author" type="checkbox" id="allow_author" <?php if( $has_author ) { echo "CHECKED"; } ?>><?php _e( 'Author', 'companion-auto-update' ); ?></label></p>
</td>
</tr>
<tr>
<th scope="row"><label><?php _e( 'Delay updates', 'companion-auto-update' ); ?></label></th>
<td>
<p><label for="update_delay"><input name="update_delay" type="checkbox" id="update_delay" <?php echo $has_updatedelay ? "CHECKED" : ""; ?> ><?php _e( 'Delay updates', 'companion-auto-update' ); ?></label></p>
</td>
</tr>
<tr id='update_delay_days_block' <?php echo !$has_updatedelay ? "class='disabled_option'" : ""; ?>>
<th scope="row"><label><?php _e( 'Number of days', 'companion-auto-update' ); ?></label></th>
<td>
<input type="number" min="0" max="31" name="update_delay_days" id="update_delay_days" class="regular-text" value="<?php echo cau_get_db_value( 'update_delay_days' ); ?>" />
<p><?php _e( 'For how many days should updates be put on hold?', 'companion-auto-update' ); ?></p>
<p><small><strong>Please note:</strong> Delaying updates does not work with WordPress updates yet.</small></p>
</td>
</tr>
</tbody>
</table>
</div>
<?php wp_nonce_field( 'cau_save_settings' ); ?>
<div class="cau_save_button">
<?php submit_button(); ?>
</div>
<div class="cau_save_button__space"></div>
<script>jQuery( '.cau-dashboard input, .cau-dashboard select, .cau-dashboard textarea' ).on( 'change', function() { jQuery('.cau_save_button').addClass( 'fixed_button' ); } );</script>
</form>
</div><div class="cau-column-small">
<div class="welcome-to-cau help-bg cau-dashboard-box">
<div class="welcome-column welcome-column.welcome-column-half">
<h3 class="support-sidebar-title"><?php _e( 'Help' ); ?></h3>
<ul class="support-sidebar-list">
<li><a href="https://codeermeneer.nl/stuffs/faq-auto-updater/" target="_blank"><?php _e( 'Frequently Asked Questions', 'companion-auto-update' ); ?></a></li>
<li><a href="https://wordpress.org/support/plugin/companion-auto-update" target="_blank"><?php _e( 'Support Forums' ); ?></a></li>
</ul>
<h3 class="support-sidebar-title"><?php _e( 'Want to contribute?', 'companion-auto-update' ); ?></h3>
<ul class="support-sidebar-list">
<li><a href="http://codeermeneer.nl/cau_poll/" target="_blank"><?php _e( 'Give feedback', 'companion-auto-update' ); ?></a></li>
<li><a href="https://codeermeneer.nl/blog/companion-auto-update-and-its-future/" target="_blank"><?php _e( 'Feature To-Do List', 'companion-auto-update' ); ?></a></li>
<li><a href="https://translate.wordpress.org/projects/wp-plugins/companion-auto-update/" target="_blank"><?php _e( 'Help us translate', 'companion-auto-update' ); ?></a></li>
</ul>
</div>
<div class="welcome-column welcome-column.welcome-column-half">
<h3 class="support-sidebar-title"><?php _e( 'Developer?', 'companion-auto-update' ); ?></h3>
<ul class="support-sidebar-list">
<li><a href="https://codeermeneer.nl/documentation/auto-update/" target="_blank"><?php _e( 'Documentation' ); ?></a></li>
</ul>
</div>
</div>
<div class="welcome-to-cau support-bg cau-dashboard-box">
<div class="welcome-column welcome-column">
<h3><?php _e('Support', 'companion-auto-update');?></h3>
<p><?php _e('Feel free to reach out to us if you have any questions or feedback.', 'companion-auto-update'); ?></p>
<p><a href="https://codeermeneer.nl/contact/" target="_blank" class="button button-primary"><?php _e( 'Contact us', 'companion-auto-update' ); ?></a></p>
<p><a href="https://codeermeneer.nl/plugins/" target="_blank" class="button button-alt"><?php _e('Check out our other plugins', 'companion-auto-update');?></a></p>
</div>
</div>
<div class="welcome-to-cau love-bg cau-show-love cau-dashboard-box">
<h3><?php _e( 'Like our plugin?', 'companion-auto-update' ); ?></h3>
<p><?php _e('Companion Auto Update is free to use. It has required a great deal of time and effort to develop and you can help support this development by making a small donation.<br />You get useful software and we get to carry on making it better.', 'companion-auto-update'); ?></p>
<a href="https://wordpress.org/support/plugin/companion-auto-update/reviews/#new-post" target="_blank" class="button button-alt button-hero">
<?php _e('Rate us (5 stars?)', 'companion-auto-update'); ?>
</a>
<a href="<?php echo cau_donateUrl(); ?>" target="_blank" class="button button-primary button-hero">
<?php _e('Donate to help development', 'companion-auto-update'); ?>
</a>
<p style="font-size: 12px; color: #BDBDBD;"><?php _e( 'Donations via PayPal. Amount can be changed.', 'companion-auto-update'); ?></p>
</div>
<div class="welcome-to-cau cau-dashboard-box">
<h3><span style='background: #EBE3F7; color: #BCADD3; padding: 1px 5px; border-radius: 3px; font-size: .8em'>Plugin Promotion</span></h3>
<h3>Keep your site fast with our Revision Manager</h3>
<p>Post Revisions are great, but will also slow down your site. Take back control over revisions with Companion Revision Manager!</p>
<a href="https://codeermeneer.nl/portfolio/plugin/companion-revision-manager/" target="_blank" class="button button-alt">Read more</a>
</div>
</div>
<style>
.disabled_option {
opacity: .5;
}
</style>
<script type="text/javascript">
jQuery( '#update_delay' ).change( function() {
jQuery( '#update_delay_days_block' ).toggleClass( 'disabled_option' );
});
jQuery( '.interval_scheduler' ).change( function() {
var selected = jQuery(this).val(); // Selected value
var timeblock = jQuery(this).data( 'timeblock' ); // Corresponding time block
if( selected == 'daily' ) {
jQuery( '.timeblock-'+timeblock ).show();
} else {
jQuery( '.timeblock-'+timeblock ).hide();
}
});
jQuery( '.interval_scheduler' ).each( function() {
var selected = jQuery(this).val(); // Selected value
var timeblock = jQuery(this).data( 'timeblock' ); // Corresponding time block
if( selected == 'daily' ) {
jQuery( '.timeblock-'+timeblock ).show();
} else {
jQuery( '.timeblock-'+timeblock ).hide();
}
});
</script>

View File

@ -0,0 +1,19 @@
<?php
if( isset( $_GET['filter'] ) ) {
$filter = $_GET['filter'];
} else {
$filter = 'all';
}
?>
<ul class="subsubsub">
<li><a <?php if( $filter == 'all' ) { echo "class='current'"; } ?> href='<?php echo cau_url( 'log&filter=all' ); ?>'><?php _e( 'View full changelog', 'companion-auto-update' ); ?></a></li> |
<li><a <?php if( $filter == 'plugins' ) { echo "class='current'"; } ?> href='<?php echo cau_url( 'log&filter=plugins' ); ?>'><?php _e( 'Plugins', 'companion-auto-update' ); ?></a></li> |
<li><a <?php if( $filter == 'themes' ) { echo "class='current'"; } ?> href='<?php echo cau_url( 'log&filter=themes' ); ?>'><?php _e( 'Themes', 'companion-auto-update' ); ?></a></li> |
<li><a <?php if( $filter == 'translations' ) { echo "class='current'"; } ?> href='<?php echo cau_url( 'log&filter=translations' ); ?>'><?php _e( 'Translations', 'companion-auto-update' ); ?></a></li>
</ul>
<div class='cau_spacing'></div>
<?php
cau_fetch_log( 'all', 'table' );

View File

@ -0,0 +1,185 @@
<?php
// Get selected filter type
if( isset( $_GET['filter'] ) ) {
$filter = sanitize_key( $_GET['filter'] );
} else {
$filter = 'plugins';
}
// Select correct database row
switch ( $filter ) {
case 'themes':
$db_table = 'notUpdateListTh';
$filter_name = __( 'Themes', 'companion-auto-update' );
$filterFunction = wp_get_themes();
break;
case 'plugins':
$db_table = 'notUpdateList';
$filter_name = __( 'Plugins', 'companion-auto-update' );
$filterFunction = get_plugins();
break;
default:
$db_table = 'notUpdateList';
$filter_name = __( 'Plugins', 'companion-auto-update' );
$filterFunction = get_plugins();
break;
}
?>
<ul class="subsubsub">
<li><a <?php if( $filter == 'plugins' ) { echo "class='current'"; } ?> href='<?php echo cau_url( 'pluginlist&filter=plugins' ); ?>'><?php _e( 'Plugins', 'companion-auto-update' ); ?></a></li> |
<li><a <?php if( $filter == 'themes' ) { echo "class='current'"; } ?> href='<?php echo cau_url( 'pluginlist&filter=themes' ); ?>'><?php _e( 'Themes', 'companion-auto-update' ); ?></a></li>
</ul>
<div style='clear: both;'></div>
<?php if( $filter == 'themes' ) { ?>
<div id="message" class="cau">
We've had to (temporarily) disable the theme filter because it was causing issues on some installations. We'll try to get it working again in a future update.
</div>
<?php } ?>
<p><?php echo sprintf( esc_html__( 'Prevent certain %s from updating automatically. %s that you select here will be skipped by Companion Auto Update and will require manual updating.', 'companion-auto-update' ), strtolower( $filter_name ), $filter_name ); ?></p>
<?php
global $wpdb;
$table_name = $wpdb->prefix."auto_updates";
// Save list
if( isset( $_POST['submit'] ) ) {
check_admin_referer( 'cau_save_pluginlist' );
$noUpdateList = '';
$i = 0;
$noUpdateCount = 0;
if( isset( $_POST['post'] ) ) {
$noUpdateCount = count( $_POST['post'] );
}
if( $noUpdateCount > 0 ) {
foreach ( $_POST['post'] as $key ) {
$noUpdateList .= sanitize_text_field( $key );
$i++;
if( $i != $noUpdateCount ) $noUpdateList .= ', ';
}
}
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = '%s' WHERE name = '%s'", $noUpdateList, $db_table ) );
echo '<div id="message" class="updated"><p><b>'.__( 'Succes', 'companion-auto-update' ).' &ndash;</b> '.sprintf( esc_html__( '%1$s %2$s have been added to the no-update-list', 'companion-auto-update' ), $noUpdateCount, strtolower( $filter_name ) ).'.</p></div>';
}
// Reset list
if( isset( $_POST['reset'] ) ) {
check_admin_referer( 'cau_save_pluginlist' );
$wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = '%s' WHERE name = %s", "", $db_table ) );
echo '<div id="message" class="updated"><p><b>'.__( 'Succes', 'companion-auto-update' ).' &ndash;</b> '.sprintf( esc_html__( 'The no-update-list has been reset, all %s will be auto-updated from now on', 'companion-auto-update' ), strtolower( $filter_name ) ).'.</p></div>';
}
?>
<form method="POST">
<div class='pluginListButtons'>
<?php submit_button(); ?>
<input type='submit' name='reset' id='reset' class='button button-alt' value='<?php _e( "Reset list", "companion-auto-update" ); ?>'>
</div>
<table class="wp-list-table widefat autoupdate striped">
<thead>
<tr>
<td>&nbsp;</td>
<th class="head-plugin"><strong><?php _e( 'Name', 'companion-auto-update' ); ?></strong></th>
<th class="head-status"><strong><?php _e( 'Status', 'companion-auto-update' ); ?></strong></th>
<th class="head-description"><strong><?php _e( 'Description' ); ?></strong></th>
</tr>
</thead>
<tbody id="the-list">
<?php
foreach ( $filterFunction as $key => $value ) {
$slug = $key;
$explosion = explode( '/', $slug );
$actualSlug = array_shift( $explosion );
$slug_hash = md5( $slug[0] );
if( $filter == 'themes' ) {
$theme = wp_get_theme( $actualSlug );
$name = $theme->get( 'Name' );
$description = $theme->get( 'Description' );
} else {
foreach ( $value as $k => $v ) {
if( $k == "Name" ) $name = $v;
if( $k == "Description" ) $description = $v;
}
}
if( in_array( $actualSlug, donotupdatelist( $filter ) ) ) {
$class = 'inactive';
$checked = 'CHECKED';
$statusicon = 'no';
$statusName = 'disabled';
} else {
$class = 'active';
$checked = '';
$statusicon = 'yes';
$statusName = 'enabled';
}
echo '<tr id="post-'.$slug_hash.'" class="'.$class.'">
<th class="check-column">
<label class="screen-reader-text" for="cb-select-'.$slug_hash.'">Select '. $name .'</label>
<input id="cb-select-'.$slug_hash.'" type="checkbox" name="post[]" value="'.$actualSlug.'" '.$checked.' ><label></label>
<div class="locked-indicator"></div>
</th>
<td class="column-name">
<p style="margin-bottom: 0px;"><strong>'. $name .'</strong></p>
<small class="description" style="opacity: 0.5; margin-bottom: 3px;">'.$actualSlug.'</small>
</td>
<td class="cau_hide_on_mobile column-status">
<p><span class="nowrap">'.__( 'Auto Updater', 'companion-auto-update' ).': <span class="cau_'.$statusName.'"><span class="dashicons dashicons-'.$statusicon.'"></span></span></span></p>
</td>
<td class="cau_hide_on_mobile column-description">
<p>'.$description.'</p>
</td>
</tr>';
}
?>
</tbody>
</table>
<?php wp_nonce_field( 'cau_save_pluginlist' ); ?>
<div class='pluginListButtons'>
<?php submit_button(); ?>
<input type='submit' name='reset' id='reset' class='button button-alt' value='<?php _e( "Reset list", "companion-auto-update" ); ?>'>
</div>
</form>

View File

@ -0,0 +1,2 @@
<?php
// Currently working on this

View File

@ -0,0 +1,435 @@
<?php
// Define globals
global $wpdb;
// Define variables
$dateFormat = get_option( 'date_format' );
$dateFormat .= ' '.get_option( 'time_format' );
$table_name = $wpdb->prefix . "auto_updates";
$schedules = wp_get_schedules();
$interval_names = cau_wp_get_schedules();
// Update the database
if( isset( $_GET['run'] ) && $_GET['run'] == 'db_update' ) {
cau_manual_update();
echo '<div id="message" class="updated"><p><b>'.__( 'Database update completed' ).'</b></p></div>';
}
if( isset( $_GET['run'] ) && $_GET['run'] == 'db_info_update' ) {
cau_savePluginInformation();
echo '<div id="message" class="updated"><p><b>'.__( 'Database information update completed' ).'</b></p></div>';
}
if( isset( $_GET['ignore_report'] ) ) {
$report_to_ignore = sanitize_text_field( $_GET['ignore_report'] );
$allowedValues = array( 'seo', 'cron' );
if( !in_array( $report_to_ignore, $allowedValues ) ) {
wp_die( 'Trying to cheat eh?' );
} else {
$table_name = $wpdb->prefix . "auto_updates";
$wpdb->query( $wpdb->prepare( "UPDATE {$table_name} SET onoroff = %s WHERE name = 'ignore_$report_to_ignore'", 'yes' ) );
$__ignored = __( 'This report will now be ignored', 'companion-auto-update' );
echo "<div id='message' class='updated'><p><b>$__ignored</b></p></div>";
}
}
?>
<div class="cau_status_page">
<?php
$events = array(
0 => array(
'name' => __( 'Events', 'companion-auto-update' ),
'fields' => array(
'plugins' => __( 'Plugins', 'companion-auto-update' ),
'themes' => __( 'Themes', 'companion-auto-update' ),
'minor' => __( 'Core (Minor)', 'companion-auto-update' ),
'major' => __( 'Core (Major)', 'companion-auto-update' ),
'send' => __( 'Update available', 'companion-auto-update' ),
'sendupdate' => __( 'Successful update', 'companion-auto-update' ),
'wpemails' => __( 'Core notifications', 'companion-auto-update' ),
'update_delay' => __( 'Log updater', 'companion-auto-update' ),
),
'values' => array(
'plugins' => 'wp_update_plugins',
'themes' => 'wp_update_themes',
'minor' => 'wp_version_check',
'major' => 'wp_version_check',
'send' => 'cau_set_schedule_mail',
'sendupdate' => 'cau_set_schedule_mail',
'wpemails' => 'cau_set_schedule_mail',
'update_delay' => 'cau_log_updater',
),
'explain' => array(
'plugins' => __('Auto update plugins?', 'companion-auto-update'),
'themes' => __('Auto update themes?', 'companion-auto-update'),
'minor' => __('Auto update minor core updates?', 'companion-auto-update'),
'major' => __('Auto update major core updates?', 'companion-auto-update'),
'send' => __( 'Will notify you of available updates.', 'companion-auto-update' ),
'sendupdate' => __( 'Will notify you after successful updates.', 'companion-auto-update' ),
'wpemails' => __( 'The default WordPress notifications.', 'companion-auto-update' ),
'update_delay' => __( 'Will keep track of the update log and make sure updates are delayed when needed.', 'companion-auto-update' ),
)
),
);
$__sta = __( 'Status', 'companion-auto-update' );
$__int = __( 'Interval', 'companion-auto-update' );
$__nxt = __( 'Next', 'companion-auto-update' );
foreach( $events as $event => $info ) {
echo "<table class='cau_status_list widefat striped'>
<thead>
<tr>
<th class='cau_status_name' colspan='2'><strong>{$info['name']}</strong></th>
<th class='cau_status_active_state'><strong>{$__sta}</strong></th>
<th class='cau_status_interval'><strong>{$__int}</strong></th>
<th class='cau_status_next'><strong>{$__nxt}</strong></th>
</tr>
</thead>
<tbody id='the-list'>";
foreach ( $info['fields'] as $key => $value ) {
$is_on = ( cau_get_db_value( $key ) == 'on' && wp_get_schedule( $info['values'][$key] ) ) ? true : false;
$__status = $is_on ? 'enabled' : 'warning';
$__icon = $is_on ? 'yes-alt' : 'marker';
$__text = $is_on ? __( 'Enabled', 'companion-auto-update' ) : __( 'Disabled', 'companion-auto-update' );
$__interval = $is_on ? $interval_names[wp_get_schedule( $info['values'][$key] )] : '&dash;';
$__next = $is_on ? date_i18n( $dateFormat, wp_next_scheduled( $info['values'][$key] ) ) : '&dash;';
$__exp = !empty( $info['explain'][$key] ) ? '<br /><small>'.$info['explain'][$key].'</small>' : '';
$__nxt = __( 'Next', 'companion-auto-update' );
echo "<tr>
<td class='cau_status_icon'><span class='dashicons dashicons-$__icon cau_$__status'></span></td>
<td class='cau_status_name'><strong>$value</strong>$__exp</td>
<td class='cau_status_active_state'><span class='cau_$__status'>$__text</span></td>
<td class='cau_status_interval'>$__interval</td>
<td class='cau_status_next'><span class='cau_mobile_prefix'>$__nxt: </span>$__next</td>
</tr>";
}
echo "</tbody>
</table>";
}
?>
<table class="cau_status_list widefat striped cau_status_warnings">
<thead>
<tr>
<th class="cau_plugin_issue_name" colspan="5"><strong><?php _e( 'Status' ); ?></strong></th>
</tr>
</thead>
<tbody id="the-list">
<!-- checkAutomaticUpdaterDisabled -->
<tr>
<td class='cau_status_icon'><span class="dashicons dashicons-update"></span></td>
<td><?php _e( 'Auto updates', 'companion-auto-update' ); ?></td>
<?php if ( checkAutomaticUpdaterDisabled() ) { ?>
<td class="cau_status_active_state"><span class='cau_disabled'><span class="dashicons dashicons-no"></span> <?php _e( 'All automatic updates are disabled', 'companion-auto-update' ); ?></span></td>
<td>
<form method="POST">
<?php wp_nonce_field( 'cau_fixit' ); ?>
<button type="submit" name="fixit" class="button button-primary"><?php _e( 'Fix it', 'companion-auto-update' ); ?></button>
<a href="https://codeermeneer.nl/documentation/known-issues-fixes/#updates_disabled" target="_blank" class="button"><?php _e( 'How to fix this', 'companion-auto-update' ); ?></a>
</form>
</td>
<?php } else { ?>
<td class="cau_status_active_state"><span class='cau_enabled'><span class="dashicons dashicons-yes-alt"></span> <?php _e( 'No issues detected', 'companion-auto-update' ); ?></span></td>
<td></td>
<?php } ?>
<td></td>
</tr>
<!-- Connection with WP.org -->
<tr>
<td class='cau_status_icon'><span class="dashicons dashicons-wordpress"></span></td>
<td><?php _e( 'Connection with WordPress.org', 'companion-auto-update' ); ?></td>
<?php if( wp_http_supports( array( 'ssl' ) ) == '1' ) {
$__text = __( 'No issues detected', 'companion-auto-update' );
echo "<td colspan='3' class='cau_status_active_state'><span class='cau_enabled'><span class='dashicons dashicons-yes-alt'></span> $__text</span></td>";
} else {
$__text = __( 'Disabled', 'companion-auto-update' );
echo "<td colspan='3' class='cau_status_active_state'><span class='cau_disabled'><span class='dashicons dashicons-no'></span> $__text</span></td>";
}
?>
</tr>
<!-- ignore_seo check -->
<tr <?php if( cau_get_db_value( 'ignore_seo' ) == 'yes' ) { echo "class='report_hidden'"; } ?> >
<td class='cau_status_icon'><span class="dashicons dashicons-search"></span></td>
<td><?php _e( 'Search Engine Visibility', 'companion-auto-update' ); ?></td>
<?php if( get_option( 'blog_public' ) == 0 ) { ?>
<td colspan="2" class="cau_status_active_state">
<span class='cau_warning'><span class="dashicons dashicons-warning"></span></span>
<?php _e( 'Youve chosen to discourage Search Engines from indexing your site. Auto-updating works best on sites with more traffic, consider enabling indexing for your site.', 'companion-auto-update' ); ?>
</td>
<td>
<a href="<?php echo admin_url( 'options-reading.php' ); ?>" class="button"><?php _e( 'Fix it', 'companion-auto-update' ); ?></a>
<a href="<?php echo cau_url( 'status' ); ?>&ignore_report=seo" class="button button-alt"><?php _e( 'Ignore this report', 'companion-auto-update' ); ?></a>
</td>
<?php } else { ?>
<td colspan="3" class="cau_status_active_state"><span class='cau_enabled'><span class="dashicons dashicons-yes-alt"></span> <?php _e( 'No issues detected', 'companion-auto-update' ); ?></span></td>
<?php } ?>
</tr>
<!-- ignore_cron check -->
<tr <?php if( cau_get_db_value( 'ignore_cron' ) == 'yes' ) { echo "class='report_hidden'"; } ?> >
<td class='cau_status_icon'><span class="dashicons dashicons-admin-generic"></span></td>
<td><?php _e( 'Cronjobs', 'companion-auto-update' ); ?></td>
<?php if( checkCronjobsDisabled() ) { ?>
<td class="cau_status_active_state"><span class='cau_warning'><span class="dashicons dashicons-warning"></span> <?php _e( 'Disabled', 'companion-auto-update' ); ?></span></td>
<td><code>DISABLE_WP_CRON true</code></td>
<td>
<a href="https://codeermeneer.nl/contact/" class="button"><?php _e( 'Contact for support', 'companion-auto-update' ); ?></a>
<a href="<?php echo cau_url( 'status' ); ?>&ignore_report=cron" class="button button-alt"><?php _e( 'Ignore this report', 'companion-auto-update' ); ?></a>
</td>
<?php } else { ?>
<td colspan="3" class="cau_status_active_state"><span class='cau_enabled'><span class="dashicons dashicons-yes-alt"></span> <?php _e( 'No issues detected', 'companion-auto-update' ); ?></span></td>
<?php } ?>
</tr>
<!-- wp_version_check -->
<tr>
<td class='cau_status_icon'><span class="dashicons dashicons-wordpress-alt"></span></td>
<td>wp_version_check</td>
<?php if ( !has_filter( 'wp_version_check', 'wp_version_check' ) ) { ?>
<td colspan="2" class="cau_status_active_state"><span class='cau_disabled'><span class="dashicons dashicons-no"></span> <?php _e( 'A plugin has prevented updates by disabling wp_version_check', 'companion-auto-update' ); ?></span></td>
<td><a href="https://codeermeneer.nl/contact/" class="button"><?php _e( 'Contact for support', 'companion-auto-update' ); ?></a></td>
<?php } else { ?>
<td colspan="3" class="cau_status_active_state"><span class='cau_enabled'><span class="dashicons dashicons-yes-alt"></span> <?php _e( 'No issues detected' , 'companion-auto-update' ); ?></span></td>
<?php } ?>
</tr>
<!-- VCD -->
<tr>
<td class='cau_status_icon'><span class="dashicons dashicons-open-folder"></span></td>
<td>VCS</td>
<td colspan="3" class="cau_status_active_state"><span class='cau_<?php echo cau_test_is_vcs_checkout( ABSPATH )['status']; ?>'><span class="dashicons dashicons-<?php echo cau_test_is_vcs_checkout( ABSPATH )['icon']; ?>"></span> <?php echo cau_test_is_vcs_checkout( ABSPATH )['description']; ?></span></td>
</tr>
</tbody>
</table>
<table class="autoupdate cau_status_list widefat striped cau_status_warnings">
<thead>
<tr>
<th colspan="5"><strong><?php _e( 'Systeminfo', 'companion-auto-update' ); ?></strong></th>
</tr>
</thead>
<tbody id="the-list">
<tr>
<td class='cau_status_icon'><span class="dashicons dashicons-wordpress"></span></td>
<td>WordPress</td>
<td><?php echo get_bloginfo( 'version' ); ?></td>
<td></td>
<td></td>
</tr>
<tr <?php if( version_compare( PHP_VERSION, '5.1.0', '<' ) ) { echo "class='inactive'"; } ?>>
<td class='cau_status_icon'><span class="dashicons dashicons-media-code"></span></td>
<td>PHP</td>
<td><?php echo phpversion(); ?> <code>(Required: 5.1.0 or up)</code></td>
<td></td>
<td></td>
</tr>
<tr <?php if( cau_incorrectDatabaseVersion() ) { echo "class='inactive'"; } ?>>
<td class='cau_status_icon'><span class="dashicons dashicons-database"></span></td>
<td>Database</td>
<td><?php echo get_option( "cau_db_version" ); ?> <code>(Latest: <?php echo cau_db_version(); ?>)</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td class='cau_status_icon'><span class="dashicons dashicons-calendar"></span></td>
<td class="cau_status_name"><?php _e( 'Timezone' ); ?></td>
<td class="cau_status_active_state"><?php echo cau_get_proper_timezone(); ?> (GMT <?php echo get_option('gmt_offset'); ?>) - <?php echo date_default_timezone_get(); ?></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<?php
// If has incomptable plugins
if( cau_incompatiblePlugins() ) { ?>
<table class="cau_status_list no_column_width widefat striped cau_status_warnings">
<thead>
<tr>
<th class="cau_plugin_issue_name" colspan="4"><strong><?php _e( 'Possible plugin issues', 'companion-auto-update' ); ?></strong></th>
</tr>
</thead>
<tbody id="the-list">
<?php
foreach ( cau_incompatiblePluginlist() as $key => $value ) {
if( is_plugin_active( $key ) ) {
echo '<tr>
<td class="cau_plugin_issue_name"><strong>'.$key.'</strong></td>
<td colspan="2" class="cau_plugin_issue_explain">'.$value.'</td>
<td class="cau_plugin_issue_fixit"><a href="https://codeermeneer.nl/documentation/known-issues-fixes/#plugins" target="_blank" class="button">'.__( 'How to fix this', 'companion-auto-update' ).'</a></td>
</tr>';
}
}
?>
</tbody>
</table>
<?php } ?>
<!-- Advanced info -->
<table class="autoupdate cau_status_list widefat striped cau_status_warnings">
<thead>
<tr>
<th><strong><?php _e( 'Advanced info', 'companion-auto-update' ); ?></strong> &dash; <?php _e( 'For when you need our help fixing an issue.', 'companion-auto-update' ); ?></th>
</tr>
</thead>
<tbody id="the-list">
<tr>
<td>
<div class='button button-primary toggle_advanced_button'><?php _e( 'Toggle', 'companion-auto-update' ); ?></div>
<div class='toggle_advanced_content' style='display: none;'>
<?php
$cau_configs = $wpdb->get_results( "SELECT * FROM $table_name" );
array_push( $cau_configs, "WordPress: ".get_bloginfo( 'version' ) );
array_push( $cau_configs, "PHP: ".phpversion() );
array_push( $cau_configs, "DB: ".get_option( "cau_db_version" ).' / '.cau_db_version() );
echo "<textarea style='width: 100%; height: 750px;'>";
print_r( $cau_configs );
echo "</textarea>";
?>
</div>
</td>
</tr>
</tbody>
</table>
<script>jQuery( '.toggle_advanced_button' ).click( function() { jQuery( '.toggle_advanced_content' ).toggle(); });</script>
<!-- Delay updates -->
<table class="autoupdate cau_status_list widefat striped cau_status_warnings">
<thead>
<tr>
<th><strong><?php _e( 'Delay updates', 'companion-auto-update' ); ?></strong> &dash; <?php echo ( cau_get_db_value( 'update_delay' ) == 'on' ) ? __( 'Enabled', 'companion-auto-update' ).' ('.sprintf( esc_html__( '%s days', 'companion-auto-update' ).')', cau_get_db_value( 'update_delay_days' ) ) : __( 'Disabled', 'companion-auto-update' ); ?></th>
<th><?php _e( 'Till', 'companion-auto-update' ); ?></th>
</tr>
</thead>
<tbody id="the-list">
<?php
$updateLog = "{$wpdb->prefix}update_log";
$put_on_hold = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$updateLog} WHERE put_on_hold <> '%s'", '0' ) );
foreach ( $put_on_hold as $plugin ) {
$__name = $plugin->slug;
$__poh = $plugin->put_on_hold;
$__udd = ( cau_get_db_value( 'update_delay_days' ) != '' ) ? cau_get_db_value( 'update_delay_days' ) : '2';
$__date = date_i18n( $dateFormat, strtotime( "+".$__udd." days", $__poh ) );
echo "<tr>
<td>{$__name}</td>
<td>{$__date}</td>
</tr>";
}
echo empty( $put_on_hold ) ? "<tr><td>".__( 'No plugins have been put on hold.', 'companion-auto-update' )."</td></tr>" : "";
?>
</tbody>
</table>
</div>
<?php
// Remove the line
if( isset( $_POST['fixit'] ) ) {
check_admin_referer( 'cau_fixit' );
cau_removeErrorLine();
}
// Get wp-config location
function cau_configFile() {
// Config file
if ( file_exists( ABSPATH . 'wp-config.php') ) {
$conFile = ABSPATH . 'wp-config.php';
} else {
$conFile = dirname(ABSPATH) . '/wp-config.php';
}
return $conFile;
}
// Change the AUTOMATIC_UPDATER_DISABLED line
function cau_removeErrorLine() {
// Config file
$conFile = cau_configFile();
// Lines to check and replace
$revLine = "define('AUTOMATIC_UPDATER_DISABLED', false);"; // We could just remove the line, but replacing it will be safer
$posibleLines = array( "define( 'AUTOMATIC_UPDATER_DISABLED', true );", "define( 'AUTOMATIC_UPDATER_DISABLED', minor );" ); // The two base options
foreach ( $posibleLines as $value ) array_push( $posibleLines, strtolower( $value ) ); // Support lowercase variants
foreach ( $posibleLines as $value ) array_push( $posibleLines, str_replace( ' ', '', $value ) ); // For variants without spaces
$melding = __( "We couldn't fix the error for you. Please contact us for further support", 'companion-auto-update' ).'.';
$meldingS = 'error';
// Check for each string if it exists
foreach ( $posibleLines as $key => $string ) {
if( strpos( file_get_contents( $conFile ), $string ) !== false) {
$contents = file_get_contents( $conFile );
$contents = str_replace( $string, $revLine, $contents );
file_put_contents( $conFile, $contents );
$melding = __( "We've fixed the error for you", 'companion-auto-update' ).' :)';
$meldingS = 'updated';
}
}
echo "<div id='message' class='$meldingS'><p><strong>$melding</strong></p></div>";
}

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="417pt"
viewBox="0 -46 417.81333 417"
width="417pt"
version="1.1"
id="svg4"
sodipodi:docname="check.svg"
inkscape:version="0.92.0 r15299">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1017"
id="namedview6"
showgrid="false"
inkscape:zoom="0.42446043"
inkscape:cx="278"
inkscape:cy="278"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg4" />
<path
d="m 185.111,248.00297 c -2.2287,2.2418 -5.26943,3.49257 -8.42804,3.49257 -3.15861,0 -6.19935,-1.25077 -8.42805,-3.49257 l -67.30869,-67.31961 c -6.985172,-6.98517 -6.985172,-18.31207 0,-25.28413 l 8.42805,-8.43023 c 6.98735,-6.98518 18.30114,-6.98518 25.28632,0 l 42.02237,42.02454 113.55053,-113.552722 c 6.98736,-6.985172 18.31207,-6.985172 25.28633,0 l 8.42805,8.43023 c 6.98516,6.985175 6.98516,18.309882 0,25.284142 z m 0,0"
id="path2"
style="fill:#9178b7;fill-opacity:1;stroke-width:0.55881381"
inkscape:connector-curvature="0" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 505 505"
style="enable-background:new 0 0 505 505;"
xml:space="preserve"
sodipodi:docname="email.svg"
inkscape:version="0.92.0 r15299"><metadata
id="metadata43"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs41" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview39"
showgrid="false"
inkscape:zoom="0.6608998"
inkscape:cx="-110.05455"
inkscape:cy="410.34145"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1"
borderlayer="true" /><path
style="fill:#ded1f2;fill-opacity:1;stroke-width:1.194754"
d="m 54.471192,356.14658 c 0,-166.66819 135.007198,-301.675388 301.675388,-301.675388 166.5487,0 301.67538,135.007198 301.67538,301.675388 0,166.66817 -135.12668,301.67538 -301.67538,301.67538 -166.66819,0 -301.675388,-135.00721 -301.675388,-301.67538 z"
id="path2"
inkscape:connector-curvature="0" /><g
id="g8"
transform="scale(1.3026177)" /><g
id="g10"
transform="scale(1.3026177)" /><g
id="g12"
transform="scale(1.3026177)" /><g
id="g14"
transform="scale(1.3026177)" /><g
id="g16"
transform="scale(1.3026177)" /><g
id="g18"
transform="scale(1.3026177)" /><g
id="g20"
transform="scale(1.3026177)" /><g
id="g22"
transform="scale(1.3026177)" /><g
id="g24"
transform="scale(1.3026177)" /><g
id="g26"
transform="scale(1.3026177)" /><g
id="g28"
transform="scale(1.3026177)" /><g
id="g30"
transform="scale(1.3026177)" /><g
id="g32"
transform="scale(1.3026177)" /><g
id="g34"
transform="scale(1.3026177)" /><g
id="g36"
transform="scale(1.3026177)" /><path
inkscape:connector-curvature="0"
d="m 281.76716,529.19554 c 27.99462,9.77382 58.38437,-1.99616 72.99376,-26.55557 L 241.14037,462.9714 c -3.82831,28.32342 12.63218,56.45033 40.62679,66.22414 z m 0,0"
id="path4"
style="fill:#9178b7;fill-opacity:1;stroke-width:1.53536594" /><path
inkscape:connector-curvature="0"
d="m 454.97461,381.50764 c -0.0736,-0.0257 -0.11887,-0.0415 -0.18687,-0.0653 -59.67543,-20.8346 -91.29336,-86.33378 -70.45084,-146.03188 5.72511,-16.39813 14.92428,-30.59236 26.36198,-42.26448 -3.29602,-1.51283 -6.65995,-2.92233 -10.15928,-4.14406 -59.766,-20.86622 -125.15573,10.65649 -146.03184,70.45084 l -15.05215,43.11307 c -10.68122,30.59363 -34.17187,54.79029 -64.63445,66.47768 -10.17733,3.96817 -17.38414,13.4202 -18.20325,24.79116 -0.9164,13.28721 8.329,25.17993 20.89938,29.56865 l 251.64586,87.85762 c 13.1706,4.59829 28.58431,0.40642 35.75467,-11.56127 5.54241,-9.2518 5.48702,-20.48337 0.002,-29.68445 -15.90548,-26.7325 -19.22019,-58.96007 -9.94599,-88.50764 z m 0,0"
id="path6"
style="fill:#9178b7;fill-opacity:1;stroke-width:1.53536594" /><path
inkscape:connector-curvature="0"
d="m 569.88056,300.18973 c -14.90587,42.69409 -61.59697,65.2195 -104.29102,50.31364 -42.69409,-14.90587 -65.21947,-61.59696 -50.3136,-104.29106 14.90586,-42.69403 61.59693,-65.21944 104.29101,-50.31357 42.69406,14.90586 65.21947,61.59694 50.31361,104.29099 z m 0,0"
id="path8"
style="fill:#9178b7;fill-opacity:1;stroke-width:1.53536594" /><rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:5.62767839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="768.56519"
height="678.05548"
x="-61.99469"
y="-11.059112" /></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="512pt"
viewBox="0 0 512 512"
width="512pt"
version="1.1"
id="svg6"
sodipodi:docname="help.svg"
inkscape:version="0.92.0 r15299">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1017"
id="namedview8"
showgrid="false"
inkscape:zoom="0.69140625"
inkscape:cx="132.67442"
inkscape:cy="151.29307"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg6" />
<path
d="m 494.10169,605.28813 h -320 c -53.02344,0 -95.999997,-42.97656 -95.999997,-96 v -320 c 0,-53.02344 42.976557,-95.999997 95.999997,-95.999997 h 320 c 53.02344,0 96,42.976557 96,95.999997 v 320 c 0,53.02344 -42.97656,96 -96,96 z m 0,0"
id="path2"
style="fill:#ded1f2;fill-opacity:1"
inkscape:connector-curvature="0" />
<path
d="m 334.10169,221.28813 c -70.57422,0 -128,57.42578 -128,128 0,70.57422 57.42578,128 128,128 70.57422,0 128,-57.42578 128,-128 0,-70.57422 -57.42578,-128 -128,-128 z m 56,138.67188 h -45.32812 v 45.32812 c 0,5.88672 -4.78516,10.67188 -10.67188,10.67188 -5.88672,0 -10.67187,-4.78516 -10.67187,-10.67188 v -45.32812 h -45.32813 c -5.88672,0 -10.67187,-4.78516 -10.67187,-10.67188 0,-5.88672 4.78515,-10.67187 10.67187,-10.67187 h 45.32813 v -45.32813 c 0,-5.88672 4.78515,-10.67187 10.67187,-10.67187 5.88672,0 10.67188,4.78515 10.67188,10.67187 v 45.32813 h 45.32812 c 5.88672,0 10.67188,4.78515 10.67188,10.67187 0,5.88672 -4.78516,10.67188 -10.67188,10.67188 z m 0,0"
id="path4"
style="fill:#9178b7;fill-opacity:1"
inkscape:connector-curvature="0" />
<rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:4.51278925;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="614.39001"
height="545.42297"
x="38.296513"
y="74.407166" />
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 512 512"
style="enable-background:new 0 0 512 512;"
xml:space="preserve"
width="512"
height="512"
sodipodi:docname="interval.svg"
inkscape:version="0.92.0 r15299"><metadata
id="metadata39"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs37" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1017"
id="namedview35"
showgrid="false"
inkscape:zoom="0.46093749"
inkscape:cx="369.01074"
inkscape:cy="360.3966"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g32" /><g
id="g32"><circle
cx="388.33899"
cy="373.15256"
r="326.50848"
id="circle2"
style="fill:#9178b7;fill-opacity:1;stroke-width:1.27542377" /><path
d="m 388.33899,124.4449 c -137.13356,0 -248.70763,111.57407 -248.70763,248.70763 0,137.13356 111.57407,249.98305 248.70763,249.98305 137.13356,0 248.70763,-112.84949 248.70763,-249.98305 0,-137.13356 -111.57407,-248.70763 -248.70763,-248.70763 z"
id="path6"
inkscape:connector-curvature="0"
style="fill:#eceff1;fill-opacity:1;stroke-width:1.27542377" /><path
d="m 388.33899,200.97033 c -10.57454,0 -19.13136,8.55682 -19.13136,19.13135 v 191.31356 c 0,10.57454 8.55682,19.13136 19.13136,19.13136 10.57454,0 19.13135,-8.55682 19.13135,-19.13136 V 220.10168 c 0,-10.57453 -8.55681,-19.13135 -19.13135,-19.13135 z"
id="path10"
inkscape:connector-curvature="0"
style="fill:#90a4ae;fill-opacity:1;stroke-width:1.27542377" /><path
d="M 503.12712,354.02118 H 388.33899 350.07628 c -10.57454,0 -19.13136,8.55681 -19.13136,19.13135 0,10.57454 8.55682,19.13136 19.13136,19.13136 h 38.26271 114.78813 c 10.57454,0 19.13136,-8.55682 19.13136,-19.13136 0,-10.57454 -8.55682,-19.13135 -19.13136,-19.13135 z"
id="path14"
inkscape:connector-curvature="0"
style="fill:#90a4ae;fill-opacity:1;stroke-width:1.27542377" /><rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:5.62767839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="768.56519"
height="678.05548"
x="-17.638517"
y="36.294277" /></g></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="Capa_1"
enable-background="new 0 0 512 512"
height="512"
viewBox="0 0 512 512"
width="512"
version="1.1"
sodipodi:docname="love.svg"
inkscape:version="0.92.0 r15299">
<metadata
id="metadata97">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs95" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1017"
id="namedview93"
showgrid="false"
inkscape:zoom="0.4609375"
inkscape:cx="-161.41471"
inkscape:cy="87.761635"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g88" />
<g
id="g90">
<g
id="g88"
transform="matrix(1.941682,0,0,1.941682,-258.91443,105.22034)">
<g
id="g52"
style="fill:#eceff1;fill-opacity:1">
<path
d="m 182.795,15.986 v 165.382 c 0,8.829 7.157,15.986 15.986,15.986 h 20.359 c 2.854,0 5.364,1.885 6.16,4.626 l 11.126,38.317 c 1.404,4.836 7.578,6.242 10.938,2.491 l 38.788,-43.3 c 1.217,-1.358 2.954,-2.134 4.778,-2.134 h 192.658 c 8.829,0 15.986,-7.157 15.986,-15.986 V 15.986 C 499.573,7.157 492.416,0 483.587,0 H 198.781 c -8.829,0 -15.986,7.157 -15.986,15.986 z"
id="path50"
inkscape:connector-curvature="0"
style="fill:#eceff1;fill-opacity:1" />
</g>
<g
id="g64"
style="fill:#9178b7;fill-opacity:1">
<path
d="m 256.62,39.06 6.423,13.015 c 0.54,1.095 1.585,1.854 2.794,2.03 l 14.363,2.087 c 3.043,0.442 4.259,4.182 2.056,6.329 l -10.393,10.131 c -0.875,0.852 -1.274,2.081 -1.067,3.284 l 2.453,14.305 c 0.52,3.031 -2.662,5.343 -5.384,3.911 l -12.847,-6.754 c -1.081,-0.568 -2.372,-0.568 -3.453,0 l -12.847,6.754 c -2.722,1.431 -5.904,-0.88 -5.384,-3.911 l 2.453,-14.305 c 0.206,-1.204 -0.193,-2.432 -1.067,-3.284 L 224.327,62.521 c -2.202,-2.147 -0.987,-5.887 2.056,-6.329 l 14.363,-2.087 c 1.209,-0.176 2.253,-0.935 2.794,-2.03 l 6.423,-13.015 c 1.364,-2.758 5.296,-2.758 6.657,0 z"
id="path58"
inkscape:connector-curvature="0"
style="fill:#9178b7;fill-opacity:1" />
<path
d="m 344.511,39.06 6.423,13.015 c 0.54,1.095 1.585,1.854 2.794,2.03 l 14.363,2.087 c 3.043,0.442 4.259,4.182 2.056,6.329 l -10.393,10.131 c -0.875,0.852 -1.274,2.081 -1.067,3.284 l 2.453,14.305 c 0.52,3.031 -2.662,5.343 -5.384,3.911 l -12.847,-6.754 c -1.081,-0.568 -2.372,-0.568 -3.453,0 l -12.847,6.754 c -2.722,1.431 -5.904,-0.88 -5.384,-3.911 l 2.453,-14.305 c 0.206,-1.204 -0.193,-2.432 -1.067,-3.284 L 312.22,62.521 c -2.202,-2.147 -0.987,-5.887 2.056,-6.329 l 14.363,-2.087 c 1.209,-0.176 2.253,-0.935 2.794,-2.03 l 6.423,-13.015 c 1.362,-2.758 5.294,-2.758 6.655,0 z"
id="path60"
inkscape:connector-curvature="0"
style="fill:#9178b7;fill-opacity:1" />
<path
d="m 432.402,39.06 6.423,13.015 c 0.54,1.095 1.585,1.854 2.794,2.03 l 14.363,2.087 c 3.043,0.442 4.259,4.182 2.056,6.329 l -10.393,10.131 c -0.874,0.852 -1.274,2.081 -1.067,3.284 l 2.453,14.305 c 0.52,3.031 -2.662,5.343 -5.384,3.911 L 430.8,87.398 c -1.081,-0.568 -2.372,-0.568 -3.453,0 L 414.5,94.152 c -2.722,1.431 -5.904,-0.88 -5.384,-3.911 l 2.453,-14.305 c 0.206,-1.204 -0.193,-2.432 -1.067,-3.284 L 400.109,62.521 c -2.202,-2.147 -0.987,-5.887 2.056,-6.329 l 14.363,-2.087 c 1.209,-0.176 2.253,-0.935 2.794,-2.03 l 6.423,-13.015 c 1.363,-2.758 5.296,-2.758 6.657,0 z"
id="path62"
inkscape:connector-curvature="0"
style="fill:#9178b7;fill-opacity:1" />
</g>
<g
id="g76" />
<g
id="g86">
<g
id="g80"
style="fill:#90a4ae;fill-opacity:1">
<path
d="M 459.163,137.933 H 220.989 c -4.142,0 -7.5,-3.358 -7.5,-7.5 0,-4.142 3.358,-7.5 7.5,-7.5 h 238.174 c 4.142,0 7.5,3.358 7.5,7.5 0,4.142 -3.358,7.5 -7.5,7.5 z"
id="path78"
inkscape:connector-curvature="0"
style="fill:#90a4ae;fill-opacity:1" />
</g>
<g
id="g84"
style="fill:#90a4ae;fill-opacity:1;stroke:none;stroke-opacity:1">
<path
d="M 340.076,167.863 H 220.989 c -4.142,0 -7.5,-3.358 -7.5,-7.5 0,-4.142 3.358,-7.5 7.5,-7.5 h 119.087 c 4.142,0 7.5,3.358 7.5,7.5 0,4.142 -3.358,7.5 -7.5,7.5 z"
id="path82"
inkscape:connector-curvature="0"
style="fill:#90a4ae;fill-opacity:1;stroke:none;stroke-opacity:1" />
</g>
</g>
<rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:2.89835215;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="395.82443"
height="349.21036"
x="139.90385"
y="-53.375328" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 505 505"
style="enable-background:new 0 0 505 505;"
xml:space="preserve"
sodipodi:docname="settings.svg"
inkscape:version="0.92.0 r15299"><metadata
id="metadata43"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs41" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview39"
showgrid="false"
inkscape:zoom="0.3304499"
inkscape:cx="-433.02666"
inkscape:cy="120.52743"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
style="fill:#ded1f2;fill-opacity:1;stroke-width:1.194754"
d="m 54.471192,356.14658 c 0,-166.66819 135.007198,-301.675388 301.675388,-301.675388 166.5487,0 301.67538,135.007198 301.67538,301.675388 0,166.66817 -135.12668,301.67538 -301.67538,301.67538 -166.66819,0 -301.675388,-135.00721 -301.675388,-301.67538 z"
id="path2"
inkscape:connector-curvature="0" /><g
id="g8"
transform="scale(1.3026177)" /><g
id="g10"
transform="scale(1.3026177)" /><g
id="g12"
transform="scale(1.3026177)" /><g
id="g14"
transform="scale(1.3026177)" /><g
id="g16"
transform="scale(1.3026177)" /><g
id="g18"
transform="scale(1.3026177)" /><g
id="g20"
transform="scale(1.3026177)" /><g
id="g22"
transform="scale(1.3026177)" /><g
id="g24"
transform="scale(1.3026177)" /><g
id="g26"
transform="scale(1.3026177)" /><g
id="g28"
transform="scale(1.3026177)" /><g
id="g30"
transform="scale(1.3026177)" /><g
id="g32"
transform="scale(1.3026177)" /><g
id="g34"
transform="scale(1.3026177)" /><g
id="g36"
transform="scale(1.3026177)" /><g
transform="translate(107.14129,82.560247)"
id="g8-7"
style="fill:#90a4ae;fill-opacity:1" /><g
transform="translate(107.14129,82.560247)"
id="g48" /><g
transform="translate(107.14129,82.560247)"
id="g50" /><g
transform="translate(107.14129,82.560247)"
id="g52" /><g
transform="translate(107.14129,82.560247)"
id="g54" /><g
transform="translate(107.14129,82.560247)"
id="g56" /><g
transform="translate(107.14129,82.560247)"
id="g58" /><g
transform="translate(107.14129,82.560247)"
id="g60" /><g
transform="translate(107.14129,82.560247)"
id="g62" /><g
transform="translate(107.14129,82.560247)"
id="g64" /><g
transform="translate(107.14129,82.560247)"
id="g66" /><g
transform="translate(107.14129,82.560247)"
id="g68" /><g
transform="translate(107.14129,82.560247)"
id="g70" /><g
transform="translate(107.14129,82.560247)"
id="g72" /><g
transform="translate(107.14129,82.560247)"
id="g74" /><g
transform="translate(107.14129,82.560247)"
id="g76" /><path
inkscape:connector-curvature="0"
d="m 407.30702,633.58604 h -30.82827 c -24.93373,0 -45.22015,-20.28545 -45.22015,-45.21919 v -10.42958 c -10.60035,-3.38666 -20.89946,-7.66173 -30.79371,-12.78202 l -7.39118,7.39117 c -17.90135,17.92343 -46.57672,17.39768 -63.95808,-0.007 L 207.3268,550.75171 c -17.41207,-17.39287 -17.91288,-46.05864 0.006,-63.95809 l 7.38543,-7.38542 c -5.12029,-9.89424 -9.3944,-20.19143 -12.78202,-30.79371 h -10.42863 c -24.93276,0 -45.21918,-20.28546 -45.21918,-45.21918 v -30.82908 c 0,-24.93372 20.28642,-45.21919 45.22014,-45.21919 h 10.42862 c 3.38764,-10.60132 7.66174,-20.89946 12.78203,-30.79371 l -7.39118,-7.39022 c -17.90807,-17.88889 -17.41399,-46.55754 0.006,-63.95809 l 21.79075,-21.78979 c 17.42166,-17.44565 46.0903,-17.88122 63.95713,0.006 l 7.38447,7.38446 c 9.89423,-5.11933 20.19335,-9.3944 30.7937,-12.78202 v -10.42863 c 0,-24.93373 20.28546,-45.21918 45.22014,-45.21918 h 30.82827 c 24.93373,0 45.21919,20.28545 45.21919,45.21918 v 10.42958 c 10.60035,3.38667 20.89946,7.66174 30.7937,12.78203 l 7.39119,-7.39118 c 17.90135,-17.92343 46.57672,-17.39768 63.95809,0.007 l 21.78882,21.78787 c 17.41207,17.39289 17.91287,46.05866 -0.009,63.9581 l -7.38543,7.38542 c 5.12029,9.89425 9.3944,20.19143 12.78202,30.79371 h 10.42864 c 24.93372,0 45.22013,20.28546 45.22013,45.21919 v 30.8292 c 0,24.93373 -20.28641,45.21919 -45.22013,45.21919 h -10.42864 c -3.38762,10.60132 -7.66173,20.89946 -12.78202,30.7937 l 7.39119,7.39119 c 17.90806,17.88888 17.41397,46.55754 -0.009,63.95809 l -21.79074,21.78978 c -17.42166,17.44565 -46.09031,17.88122 -63.95713,-0.006 l -7.38447,-7.38447 c -9.89424,5.11933 -20.19335,9.3944 -30.7937,12.78202 v 10.42959 c 0,24.93181 -20.28546,45.21726 -45.22014,45.21726 z M 305.27626,534.93141 c 13.74525,8.12896 28.53914,14.27005 43.97005,18.2525 6.35504,1.63961 10.79512,7.37104 10.79512,13.93426 v 21.24868 c 0,9.06341 7.37486,16.43733 16.43827,16.43733 h 30.82828 c 9.0634,0 16.43827,-7.37392 16.43827,-16.43733 v -21.24868 c 0,-6.56322 4.44008,-12.29465 10.79512,-13.93426 15.43091,-3.98245 30.2248,-10.12354 43.97005,-18.2525 5.65564,-3.34445 12.8559,-2.43494 17.50224,2.21141 l 15.05101,15.05196 c 6.48934,6.49702 16.91029,6.34639 23.24039,0.007 l 21.80417,-21.80321 c 6.31474,-6.30707 6.5258,-16.72994 0.009,-23.24136 L 541.06052,492.0995 c -4.6454,-4.64538 -5.5549,-11.8466 -2.21141,-17.50128 8.12895,-13.7443 14.26908,-28.53818 18.25154,-43.97005 1.64057,-6.35504 7.37199,-10.79416 13.93425,-10.79416 h 21.24774 c 9.06341,0 16.43827,-7.37391 16.43827,-16.43732 v -30.82921 c 0,-9.06341 -7.37486,-16.43731 -16.43827,-16.43731 H 571.0349 c -6.56322,0 -12.29368,-4.44009 -13.93425,-10.79416 -3.98246,-15.43188 -10.12355,-30.22576 -18.25154,-43.97005 -3.34349,-5.65468 -2.43399,-12.8559 2.21141,-17.50129 l 15.05195,-15.05195 c 6.50661,-6.49895 6.3368,-16.91798 0.009,-23.24136 l -21.80131,-21.80239 c -6.31955,-6.32818 -16.74241,-6.51334 -23.24136,-0.006 l -15.05675,15.05771 c -4.64539,4.64634 -11.84853,5.55586 -17.50224,2.21141 -13.74526,-8.12897 -28.53914,-14.27005 -43.97006,-18.25251 -6.35502,-1.6396 -10.79512,-7.37103 -10.79512,-13.93426 v -21.2506 c 0,-9.06341 -7.37486,-16.43733 -16.43827,-16.43733 h -30.82827 c -9.06341,0 -16.43828,7.37392 -16.43828,16.43733 v 21.24868 c 0,6.56323 -4.44008,12.29467 -10.79512,13.93427 -15.43091,3.98245 -30.22479,10.12354 -43.97004,18.2525 -5.6566,3.34348 -12.85686,2.43398 -17.50225,-2.21141 L 272.73141,223.7668 c -6.48936,-6.49702 -16.91126,-6.34639 -23.2404,-0.007 l -21.80418,21.80322 c -6.31473,6.30707 -6.5258,16.72898 -0.006,23.24136 l 15.05771,15.05771 c 4.64538,4.64539 5.55489,11.84661 2.2114,17.50128 -8.12896,13.7443 -14.26909,28.53818 -18.25154,43.97005 -1.64056,6.35503 -7.372,10.79415 -13.93426,10.79415 h -21.24868 c -9.06341,9.7e-4 -16.43829,7.37488 -16.43829,16.43829 v 30.82921 c 0,9.06341 7.37488,16.43731 16.43829,16.43731 h 21.24772 c 6.56322,0 12.2937,4.44008 13.93426,10.79416 3.98245,15.43188 10.12354,30.22576 18.25154,43.97005 3.34349,5.65468 2.43398,12.8559 -2.2114,17.50129 l -15.05196,15.05195 c -6.50662,6.49895 -6.33681,16.91798 -0.006,23.24136 l 21.80225,21.80225 c 6.31954,6.32818 16.74241,6.51335 23.24136,0.006 l 15.05674,-15.05771 c 3.42313,-3.42215 10.54472,-6.32625 17.50321,-2.21044 z"
id="path2-7"
style="fill:#9178b7;fill-opacity:1;stroke-width:0.95939529" /><path
inkscape:connector-curvature="0"
d="m 391.89337,494.85747 c -58.9328,0 -106.87666,-47.94482 -106.87666,-106.87664 0,-58.93182 47.94386,-106.87664 106.87666,-106.87664 58.93278,0 106.87664,47.94482 106.87664,106.87664 0,58.93182 -47.94386,106.87664 -106.87664,106.87664 z m 0,-184.97142 c -43.06248,0 -78.0948,35.03329 -78.0948,78.09478 0,43.0615 35.03328,78.09478 78.0948,78.09478 43.0615,0 78.09478,-35.03328 78.09478,-78.09478 0,-43.06149 -35.03232,-78.09478 -78.09478,-78.09478 z"
id="path4-6"
style="fill:#9178b7;fill-opacity:1;stroke-width:0.95939529" /><rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:5.62767839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="768.56519"
height="678.05548"
x="-25.146145"
y="32.319691" /></svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
viewBox="0 0 512 512"
style="enable-background:new 0 0 512 512;"
xml:space="preserve"
sodipodi:docname="support.svg"
inkscape:version="0.92.0 r15299"><metadata
id="metadata75"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs73" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1017"
id="namedview71"
showgrid="false"
inkscape:zoom="0.92187498"
inkscape:cx="127.5288"
inkscape:cy="162.24021"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g22" /><path
style="fill:#9178b7;fill-opacity:1;stroke:none"
d="m 374.18666,111.86429 c -136.624,0 -247.29601,110.672 -247.29601,247.296 0,136.624 110.67201,247.296 247.29601,247.296 136.624,0 247.296,-110.672 247.296,-247.296 0,-136.624 -110.672,-247.296 -247.296,-247.296 z m 0,368.576 c -66.928,0 -121.12,-54.336 -121.12,-121.264 0,-66.928 54.192,-121.12 121.12,-121.12 66.928,0 121.264,54.192 121.264,121.12 0.016,66.912 -54.336,121.264 -121.264,121.264 z"
id="path10"
inkscape:connector-curvature="0" /><g
id="g22"
transform="translate(81.305295,78.237171)"
style="stroke:none"><path
style="fill:#eceff1;fill-opacity:1;stroke:#eceff1;stroke-opacity:1"
d="m 195.61736,53.531119 53.776,114.448001 c 13.504,-5.2 28.128,-8.16 43.488,-8.16 15.344,0 29.968,2.96 43.488,8.16 l 53.776,-114.448001 c -29.856,-12.784 -62.72,-19.904 -97.264,-19.904 -34.544,0 -67.408,7.12 -97.264,19.904 z"
id="path14"
inkscape:connector-curvature="0" /><path
style="fill:#eceff1;fill-opacity:1;stroke:#eceff1;stroke-opacity:1"
d="m 171.76136,280.92312 c 0,-15.36 2.976,-29.984 8.176,-43.488 l -114.448003,-53.776 c -12.784,29.856 -19.904,62.72 -19.904,97.264 0,34.544 7.12,67.408 19.904,97.264 l 114.432003,-53.776 c -5.184,-13.52 -8.16,-28.144 -8.16,-43.488 z"
id="path16"
inkscape:connector-curvature="0" /><path
style="fill:#eceff1;fill-opacity:1;stroke:#eceff1;stroke-opacity:1"
d="m 390.14536,508.31512 -53.728,-114.32 c -13.536,5.216 -28.176,8.208 -43.536,8.208 -15.376,0 -30.016,-2.992 -43.552,-8.208 l -53.728,114.336 c 29.856,12.784 62.72,19.904 97.264,19.904 34.56,-0.016 67.424,-7.136 97.28,-19.92 z"
id="path18"
inkscape:connector-curvature="0" /><path
style="fill:#eceff1;fill-opacity:1;stroke:#eceff1;stroke-opacity:1"
d="m 414.16136,280.92312 c 0,15.36 -2.976,30 -8.208,43.536 l 114.32,53.728 c 12.784,-29.856 19.904,-62.72 19.904,-97.264 0,-34.544 -7.12,-67.408 -19.904,-97.264 l -114.336,53.728 c 5.232,13.52 8.224,28.176 8.224,43.536 z"
id="path20"
inkscape:connector-curvature="0" /><rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:5.62767839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="768.56519"
height="678.05548"
x="-178.1302"
y="-39.773388" /></g><g
id="g40"
transform="translate(81.305295,78.237171)" /><g
id="g42"
transform="translate(81.305295,78.237171)" /><g
id="g44"
transform="translate(81.305295,78.237171)" /><g
id="g46"
transform="translate(81.305295,78.237171)" /><g
id="g48"
transform="translate(81.305295,78.237171)" /><g
id="g50"
transform="translate(81.305295,78.237171)" /><g
id="g52"
transform="translate(81.305295,78.237171)" /><g
id="g54"
transform="translate(81.305295,78.237171)" /><g
id="g56"
transform="translate(81.305295,78.237171)" /><g
id="g58"
transform="translate(81.305295,78.237171)" /><g
id="g60"
transform="translate(81.305295,78.237171)" /><g
id="g62"
transform="translate(81.305295,78.237171)" /><g
id="g64"
transform="translate(81.305295,78.237171)" /><g
id="g66"
transform="translate(81.305295,78.237171)" /><g
id="g68"
transform="translate(81.305295,78.237171)" /></svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 505 505"
style="enable-background:new 0 0 505 505;"
xml:space="preserve"
sodipodi:docname="update.svg"
inkscape:version="0.92.0 r15299"><metadata
id="metadata43"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs41" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1017"
id="namedview39"
showgrid="false"
inkscape:zoom="0.6608998"
inkscape:cx="-41.965565"
inkscape:cy="289.29436"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
style="fill:#ded1f2;fill-opacity:1;stroke-width:1.194754"
d="m 54.471192,356.14658 c 0,-166.66819 135.007198,-301.675388 301.675388,-301.675388 166.5487,0 301.67538,135.007198 301.67538,301.675388 0,166.66817 -135.12668,301.67538 -301.67538,301.67538 -166.66819,0 -301.675388,-135.00721 -301.675388,-301.67538 z"
id="path2"
inkscape:connector-curvature="0" /><path
style="fill:#9178b7;fill-opacity:1;stroke-width:1.194754"
d="m 287.44822,389.59968 h 18.51868 c 14.33706,0 22.46138,-16.36813 13.85915,-27.83776 l -72.64104,-95.81927 c -6.92957,-9.19961 -20.78872,-9.19961 -27.71829,0 l -72.64105,95.81927 c -8.7217,11.46963 -0.4779,27.83776 13.85915,27.83776 h 16.72655 c 26.04564,120.07278 140.50308,170.25245 226.16694,142.7731 7.52694,-2.3895 6.09324,-13.50072 -1.91161,-14.09809 -78.97324,-5.73482 -122.58176,-74.55265 -114.21848,-128.67501 z"
id="path4"
inkscape:connector-curvature="0" /><path
style="fill:#9178b7;fill-opacity:1;stroke-width:1.194754"
d="m 424.84493,322.69346 h -18.51869 c -14.33705,0 -22.46137,16.36813 -13.85914,27.83777 l 72.64104,95.93875 c 6.92957,9.19961 20.78871,9.19961 27.71829,0 l 72.64104,-95.93875 c 8.7217,-11.46964 0.4779,-27.83777 -13.85914,-27.83777 H 534.88177 C 508.71666,202.62069 394.25922,152.44102 308.59536,179.92036 c -7.52695,2.38951 -6.09324,13.50072 1.91161,14.0981 79.09271,5.73482 122.70123,74.55265 114.33796,128.675 z"
id="path6"
inkscape:connector-curvature="0" /><g
id="g8"
transform="scale(1.3026177)" /><g
id="g10"
transform="scale(1.3026177)" /><g
id="g12"
transform="scale(1.3026177)" /><g
id="g14"
transform="scale(1.3026177)" /><g
id="g16"
transform="scale(1.3026177)" /><g
id="g18"
transform="scale(1.3026177)" /><g
id="g20"
transform="scale(1.3026177)" /><g
id="g22"
transform="scale(1.3026177)" /><g
id="g24"
transform="scale(1.3026177)" /><g
id="g26"
transform="scale(1.3026177)" /><g
id="g28"
transform="scale(1.3026177)" /><g
id="g30"
transform="scale(1.3026177)" /><g
id="g32"
transform="scale(1.3026177)" /><g
id="g34"
transform="scale(1.3026177)" /><g
id="g36"
transform="scale(1.3026177)" /><rect
style="opacity:0.5;fill:#ffffff;fill-opacity:0.78431373;fill-rule:evenodd;stroke:none;stroke-width:5.62767839;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
id="rect4504"
width="768.56519"
height="678.05548"
x="-71.073227"
y="-6.5198488" /></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
viewBox="0 0 512.001 512.001"
style="enable-background:new 0 0 512.001 512.001;"
xml:space="preserve"
sodipodi:docname="welcome.svg"
inkscape:version="0.92.0 r15299"><metadata
id="metadata99"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs97" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview95"
showgrid="false"
inkscape:zoom="1.3037256"
inkscape:cx="154.95189"
inkscape:cy="223.3697"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Capa_1" /><circle
style="fill:#ded1f2;fill-opacity:1;stroke-width:0.8621738"
cx="256.00003"
cy="252.93185"
r="220.71649"
id="circle2" /><g
id="g20"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)"><path
style="fill:#34abe0"
d="m 469.869,206.196 c -3.882,0 -7.029,-3.147 -7.029,-7.029 v -11.259 c 0,-3.882 3.147,-7.029 7.029,-7.029 3.882,0 7.029,3.147 7.029,7.029 v 11.259 c -0.001,3.883 -3.148,7.029 -7.029,7.029 z"
id="path4"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="m 469.869,263.776 c -3.882,0 -7.029,-3.147 -7.029,-7.029 V 245.49 c 0,-3.882 3.147,-7.029 7.029,-7.029 3.882,0 7.029,3.147 7.029,7.029 v 11.258 c -0.001,3.881 -3.148,7.028 -7.029,7.028 z"
id="path6"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="m 504.288,229.358 h -11.259 c -3.882,0 -7.029,-3.147 -7.029,-7.029 0,-3.882 3.147,-7.029 7.029,-7.029 h 11.259 c 3.882,0 7.029,3.147 7.029,7.029 0,3.881 -3.148,7.029 -7.029,7.029 z"
id="path8"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="M 446.707,229.358 H 435.45 c -3.882,0 -7.029,-3.147 -7.029,-7.029 0,-3.882 3.147,-7.029 7.029,-7.029 h 11.258 c 3.882,0 7.029,3.147 7.029,7.029 -0.002,3.881 -3.148,7.029 -7.03,7.029 z"
id="path10"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="m 391.867,22.724 c -3.882,0 -7.029,-3.147 -7.029,-7.029 V 7.029 c 0,-3.882 3.147,-7.029 7.029,-7.029 3.882,0 7.029,3.147 7.029,7.029 v 8.666 c 0,3.883 -3.147,7.029 -7.029,7.029 z"
id="path12"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="m 391.867,67.048 c -3.882,0 -7.029,-3.147 -7.029,-7.029 v -8.666 c 0,-3.882 3.147,-7.029 7.029,-7.029 3.882,0 7.029,3.147 7.029,7.029 v 8.666 c 0,3.882 -3.147,7.029 -7.029,7.029 z"
id="path14"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="m 418.362,40.553 h -8.666 c -3.882,0 -7.029,-3.147 -7.029,-7.029 0,-3.882 3.147,-7.029 7.029,-7.029 h 8.666 c 3.882,0 7.029,3.147 7.029,7.029 0,3.882 -3.147,7.029 -7.029,7.029 z"
id="path16"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0"
d="m 374.038,40.553 h -8.666 c -3.882,0 -7.029,-3.147 -7.029,-7.029 0,-3.882 3.147,-7.029 7.029,-7.029 h 8.666 c 3.882,0 7.029,3.147 7.029,7.029 0,3.882 -3.147,7.029 -7.029,7.029 z"
id="path18"
inkscape:connector-curvature="0" /></g><path
style="fill:#9178b7;fill-opacity:1;stroke-width:0.8621738"
d="m 298.98111,139.77931 c -1.09841,0 -2.21061,-0.29831 -3.21073,-0.92511 -2.83569,-1.77694 -3.69529,-5.51619 -1.9192,-8.35187 8.88986,-14.19398 16.29077,-28.09049 21.99663,-41.303308 1.32689,-3.071925 4.89112,-4.486752 7.96563,-3.160729 3.07192,1.326886 4.48762,4.893699 3.15987,7.965625 -5.94815,13.774092 -13.63787,28.218092 -22.85278,42.931942 -1.14842,1.83643 -3.12107,2.84345 -5.13942,2.84345 z"
id="path22"
inkscape:connector-curvature="0" /><path
style="fill:#34abe0;stroke-width:0.8621738"
d="m 221.49065,234.60809 c -1.61572,0 -3.22798,-0.64233 -4.42037,-1.91403 -2.28993,-2.44081 -2.1675,-6.27489 0.27331,-8.56569 0.27849,-0.26124 28.13963,-26.53427 55.9456,-63.72931 2.00368,-2.6805 5.80157,-3.2297 8.48293,-1.22514 2.68049,2.00368 3.22884,5.80156 1.22514,8.48291 -28.47845,38.09258 -56.19562,64.21816 -57.36214,65.3114 -1.17083,1.09583 -2.65895,1.63986 -4.14447,1.63986 z"
id="path24"
inkscape:connector-curvature="0" /><path
style="fill:#f9f9f9;stroke-width:0.8621738"
d="m 275.09631,243.34881 c -1.64503,0 -3.28488,-0.6656 -4.47986,-1.97782 -2.25372,-2.47358 -2.07784,-6.30594 0.3966,-8.5614 28.21033,-25.71433 84.0654,-71.36126 141.18269,-88.17193 3.20988,-0.94408 6.57925,0.89148 7.52419,4.10223 0.94495,3.21073 -0.89149,6.57924 -4.10222,7.52419 -54.78597,16.12438 -108.99946,60.49098 -136.43987,85.50264 -1.16308,1.05961 -2.62446,1.58209 -4.08153,1.58209 z"
id="path26"
inkscape:connector-curvature="0" /><g
id="g32"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)"><path
style="fill:#9178b7;fill-opacity:1"
d="m 290.023,308.794 c -2.069,0 -4.119,-0.909 -5.507,-2.655 -2.416,-3.039 -1.91,-7.461 1.128,-9.875 2.334,-1.855 58.024,-45.266 133.17,-30.816 3.812,0.732 6.308,4.417 5.575,8.229 -0.732,3.813 -4.415,6.314 -8.229,5.575 -68.879,-13.246 -121.248,27.602 -121.769,28.017 -1.292,1.025 -2.835,1.525 -4.368,1.525 z"
id="path28"
inkscape:connector-curvature="0" /><path
style="fill:#9178b7;fill-opacity:1"
d="m 194.779,177.404 c -1.061,0 -2.137,-0.24 -3.148,-0.749 -3.469,-1.742 -4.869,-5.966 -3.126,-9.435 11.361,-22.624 23.205,-58.429 15.111,-100.516 -0.734,-3.812 1.763,-7.496 5.575,-8.229 3.811,-0.734 7.496,1.763 8.229,5.575 8.84,45.966 -4.013,84.906 -16.353,109.479 -1.234,2.456 -3.713,3.875 -6.288,3.875 z"
id="path30"
inkscape:connector-curvature="0" /></g><path
style="fill:#f9f9f9;stroke-width:0.8621738"
d="m 282.19114,351.70423 -99.61988,49.64742 -57.9993,28.91818 C 95.167528,408.4413 71.374975,379.46881 55.771353,345.91991 l 9.59427,-19.25148 45.683997,-91.6646 18.10738,-36.33287 z"
id="path34"
inkscape:connector-curvature="0" /><g
id="g42"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)"><path
style="fill:#9178b7;fill-opacity:1"
d="M 76.667,438.689 C 54.839,417.258 36.825,391.94 23.764,363.864 v -0.01 l 11.139,-22.329 z"
id="path38"
inkscape:connector-curvature="0" /><polygon
style="fill:#9178b7;fill-opacity:1"
points="170.839,428.138 152.074,384.51 87.885,235.211 108.888,193.068 237.301,321.481 286.379,370.559 "
id="polygon40" /></g><path
style="fill:#f9f9f9;stroke-width:0.8621738"
d="M 268.15494,353.91226 126.94639,212.70371 c -6.84393,-6.84395 -6.84393,-17.93926 0,-24.78319 v 0 c 6.84394,-6.84394 17.93925,-6.84394 24.78318,0 l 141.2077,141.20769 c 6.84394,6.84393 6.84394,17.93925 0,24.78318 v 0 c -6.84308,6.84394 -17.93925,6.84394 -24.78233,8.7e-4 z"
id="path46"
inkscape:connector-curvature="0" /><circle
style="fill:#f9f9f9;stroke-width:0.8621738"
cx="176.15497"
cy="142.5831"
r="6.0602198"
id="circle50" /><circle
style="fill:#9178b7;fill-opacity:1;stroke-width:0.8621738"
cx="257.1355"
cy="119.44839"
r="6.0602198"
id="circle52" /><circle
style="fill:#34abe0;stroke-width:0.8621738"
cx="356.29495"
cy="137.62819"
r="6.0602198"
id="circle54" /><g
id="g60"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)"><circle
style="fill:#f9f9f9"
cx="372.328"
cy="323.53201"
r="7.0289998"
id="circle56" /><path
style="fill:#f9f9f9"
d="m 254.9,10.029 8.735,7.769 c 0.739,0.657 1.753,0.909 2.714,0.673 L 277.7,15.68 c 2.418,-0.595 4.468,1.841 3.469,4.122 l -4.69,10.708 c -0.397,0.906 -0.322,1.949 0.199,2.789 l 6.163,9.934 c 1.312,2.116 -0.371,4.818 -2.848,4.574 L 268.36,46.656 c -0.984,-0.097 -1.953,0.296 -2.59,1.051 l -7.543,8.931 c -1.607,1.902 -4.697,1.136 -5.23,-1.296 l -2.5,-11.42 c -0.211,-0.965 -0.885,-1.766 -1.8,-2.139 l -10.824,-4.415 c -2.305,-0.94 -2.532,-4.116 -0.383,-5.374 l 10.088,-5.907 c 0.854,-0.499 1.406,-1.387 1.479,-2.373 l 0.854,-11.659 c 0.178,-2.483 3.128,-3.681 4.989,-2.026 z"
id="path58"
inkscape:connector-curvature="0" /></g><path
style="fill:#9178b7;fill-opacity:1;stroke-width:0.8621738"
d="m 454.29051,92.257154 5.2722,11.110836 c 0.44574,0.93977 1.32516,1.60019 2.35201,1.76486 l 12.14113,1.95542 c 2.58566,0.41643 3.57199,3.61768 1.66831,5.41703 l -8.93729,8.44672 c -0.75613,0.71474 -1.11134,1.75453 -0.95184,2.7831 l 1.89161,12.15148 c 0.40263,2.58824 -2.3365,4.51434 -4.63592,3.25987 l -10.79527,-5.89036 c -0.91391,-0.49834 -2.01232,-0.51559 -2.94088,-0.0448 l -10.97202,5.55411 c -2.33649,1.18291 -5.01613,-0.82682 -4.53331,-3.40213 l 2.26579,-12.08682 c 0.19226,-1.02253 -0.13278,-2.07352 -0.86562,-2.81069 l -8.67261,-8.71916 c -1.84677,-1.85712 -0.76303,-5.02561 1.83384,-5.36272 l 12.19545,-1.58036 c 1.03117,-0.13364 1.93127,-0.76648 2.40633,-1.69159 l 5.61276,-10.941845 c 1.19323,-2.331318 4.54279,-2.278727 5.66533,0.08708 z"
id="path62"
inkscape:connector-curvature="0" /><g
id="g64"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g66"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g68"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g70"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g72"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g74"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g76"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g78"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g80"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g82"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g84"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g86"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g88"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g90"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /><g
id="g92"
transform="matrix(0.86217384,0,0,0.86217384,35.283516,32.215367)" /></svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,582 @@
/* Default Stylings */
.nowrap {
white-space: nowrap;
}
.cau_spacing {
height: 25px;
}
.cau_support_buttons {
display: inline-block;
}
/* Welcome screen */
.welcome-to-cau {
background: #FFF;
border: 1px solid #CCD0D4;
margin: 25px 0;
padding: 30px;
background-size: 140px;
background-position: left bottom;
background-repeat: no-repeat;
box-shadow: 0 1px 1px rgba(0,0,0,.04);
}
.welcome-to-cau .welcome-image {
display: inline-block;
vertical-align: middle;
width: 100px;
height: 100px;
background-image: url('images/welcome.svg');
background-size: contain;
background-position: center;
box-sizing: border-box;
}
.welcome-to-cau .welcome-content {
display: inline-block;
vertical-align: middle;
width: calc(100% - 100px);
padding-left: 25px;
box-sizing: border-box;
}
.welcome-to-cau .welcome-content strong {
color: #000;
}
.welcome-to-cau .welcome-content p {
margin: 2px 0;
}
.welcome-to-cau.help-bg {
background-image: url('images/help.svg');
}
.welcome-to-cau.support-bg {
background-image: url('images/support.svg');
}
.welcome-to-cau.love-bg {
background-image: url('images/love.svg');
}
.welcome-to-cau.update-bg {
background-image: url('images/update.svg');
}
.welcome-to-cau.email-bg {
background-image: url('images/email.svg');
}
.welcome-to-cau.interval-bg {
background-image: url('images/interval.svg');
}
.welcome-to-cau.advanced-bg {
background-image: url('images/settings.svg');
}
.welcome-to-cau h2 {
margin: 0;
margin-bottom: 25px;
font-size: 21px;
font-weight: 400;
line-height: 1.2;
}
.welcome-to-cau h2.title {
margin-bottom: 10px;
}
.welcome-to-cau h3 {
font-size: 16px;
margin-top: 0;
}
.welcome-to-cau a {
text-decoration: none;
}
.welcome-to-cau .welcome-column {
display: inline-block;
vertical-align: top;
box-sizing: border-box;
}
.welcome-to-cau.cau-show-love .welcome-column {
vertical-align: middle;
}
.welcome-to-cau .welcome-column.welcome-column-first {
display: block;
width: 100%;
}
.first-column {
padding-left: 140px;
}
.welcome-to-cau .welcome-column.welcome-column-half {
width: 50%;
}
.welcome-to-cau .welcome-column.welcome-column-third {
width: 33%;
}
.welcome-to-cau .welcome-column.welcome-column-quarter {
width: 25%;
}
.welcome-to-cau a.minimal-button {
display: inline-block;
padding: 5px;
}
select.schedule_interval {
max-width: 90%;
width: 225px;
}
.cau_save_button.fixed_button {
background: #FFF;
box-sizing: border-box;
position: fixed;
width: 100%;
right: 0;
bottom: 0;
margin-left: -25px;
z-index: 1001;
padding: 5px;
box-shadow: 0 -8px 16px 0 rgb(85 93 102 / 30%);
}
.cau_save_button.fixed_button p.submit {
display: block;
text-align: center;
font-weight: bold;
margin: 0;
padding: 0;
}
.cau_save_button.fixed_button p.submit input {
width: 100%;
max-width: 250px;
height: 100%;
padding: 5px;
}
.cau_save_button__space {
height: 75px;
}
/* Overwrite core UI */
/*.cau_content input[type="checkbox"]:checked::before {
content: "";
background: url( 'images/check.svg' );
background-size: contain;
background-position: center center;
}*/
.cau_content a {
color: #9178B7;
}
.cau_content a.nav-tab {
color: #23282D;
}
.cau_content .button-primary {
background-color: #9178B7!important;
border-color: #9178B7!important;
}
.cau_content .button-alt {
color: #9178B7!important;
border-color: #9178B7!important;
}
.cau_content .button-hero {
font-weight: 500;
padding: 2px 15px!important;
}
#message.cau {
background: #FFF;
border: 1px solid #CCD0D4;
border-left-width: 4px;
border-left-color: #9178B7;
box-shadow: 0 1px 1px rgba(0,0,0,.04);
margin: 25px 0px 5px 0;
padding: 15px;
}
#message.cau a, #message.cau strong {
color: #9178B7;
}
/* Dashboard */
.cau-column-wide {
box-sizing: border-box;
display: inline-block;
vertical-align: top;
width: calc(100% - 450px);
padding-right: 25px;
}
.cau-column-small {
display: inline-block;
vertical-align: top;
width: 450px;
}
.cau-dashboard-box {
background-position: right bottom;
}
.cau-column-wide .cau-dashboard-box {
padding-right: 125px;
}
.cau-dashboard-box a {
margin-left: 0px;
margin-top: 10px;
}
.cau-dashboard-box .welcome-column {
padding-right: 25px;
}
.support-sidebar-list {
margin-bottom: 25px;
}
.cau_content .nav-tab {
position: relative;
}
.cau_content .nav-tab .cau_melding {
display: inline-block;
width: 11px;
height: 11px;
border-radius: 10px;
margin-left: 5px;
position: relative;
bottom: -1px;
}
.cau_content .nav-tab .cau_melding.level-okay {
background: #7AD03A;
}
.cau_content .nav-tab .cau_melding.level-low {
background: #FFBA00;
}
.cau_content .nav-tab .cau_melding.level-high {
background: #FF0000;
}
/* Table Styling */
.cau_content .widefat td {
vertical-align: middle!important;
}
table.autoupdate th.head-plugin {
min-width: 250px;
}
table.autoupdate th.head-status {
min-width: 150px;
}
table.autoupdate th.check-column {
position: relative;
min-width: 55px;
}
table.autoupdate tr.inactive {
background: #FEF7F1;
}
table.autoupdate tr.active .check-column {
border-left: 3px solid transparent;
}
table.autoupdate tr.inactive .check-column {
border-left: 3px solid #D54E21;
}
table.autoupdate tr.inactive td.column-status p {
color: #BF3D3C;
}
table.autoupdate tr.active td.column-status p {
color: #000;
}
table.autoupdate tr td.column-description p {
overflow: hidden;
max-height: 18px;
}
/* Update Log */
table.autoupdatelog {
margin-top: 25px;
}
table.autoupdatelog strong {
color: #000;
}
table.autoupdatelog .dashicons {
color: #00A0D2;
}
/* Status */
table.cau_status_list {
margin-top: 25px;
}
table.cau_status_list:not(.no_column_width) th, table.cau_status_list:not(.no_column_width) td {
width: 25%;
}
.cau_enabled {
color: #7AD03A;
}
.cau_disabled {
color: #FF0000;
}
.cau_warning {
color: #FFBA00;
}
.cau_mobile_prefix {
display: none;
}
table.cau_status_list .cau_status_icon {
width: 50px!important;
}
table.cau_status_list .cau_status_icon .dashicons, table.cau_status_list .cau_status_icon .dashicons-before:before {
height: 25px;
font-size: 2em;
}
/* Rollback list */
table.rollbacklist {
max-width: 650px;
}
table.rollbacklist td {
vertical-align: middle;
}
table.rollbacklist td a.versionselectbutton {
display: inline-block;
width: 100px;
text-align: center;
}
/* Plugin list */
.pluginListButtons {
display: block;
padding: 15px 0;
}
.pluginListButtons p.submit {
display: inline-block;
margin: 0!important;
padding: 0!important;
}
.cau_content #the-list input[type="checkbox"]:not(:checked), .cau_content #the-list input[type="checkbox"]:checked {
width: 45px;
height: 45px;
position: absolute;
top: 0;
bottom: 0;
z-index: 100;
display: block;
opacity: 0;
}
.cau_content #the-list input[type="checkbox"]:not(:checked) + label, .cau_content #the-list input[type="checkbox"]:checked + label {
position: absolute;
top: 15px;
left: 12px;
cursor: pointer;
}
.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before, .cau_content #the-list input[type="checkbox"]:checked + label:before, .cau_content #the-list input[type="checkbox"]:not(:checked) + label:after, .cau_content #the-list input[type="checkbox"]:checked + label:after {
content: '';
position: absolute;
}
.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before, .cau_content #the-list input[type="checkbox"]:checked + label:before {
left: 0;
top: -3px;
width: 30px;
height: 16px;
background: transparent;
border: 2px solid #9178B7;
border-radius: 15px;
transition: background-color .2s;
}
.cau_content #the-list input[type="checkbox"]:not(:checked) + label:after, .cau_content #the-list input[type="checkbox"]:checked + label:after {
width: 8px;
height: 8px;
transition: all .2s;
border-radius: 500px;
background: transparent;
border: 2px solid #9178B7;
top: 1px;
left: 5px;
}
.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before {
background: #9178B7;
border: 2px solid #9178B7;
}
.cau_content #the-list input[type="checkbox"]:not(:checked) + label:after {
background: #9178B7;
border-color: #FFF;
left: 18px;
}
/* Scheduling */
.cau_schedule_input {
display: inline-block;
vertical-align: middle;
width: 50px;
padding-top: 5px;
}
.cau_schedule_input input {
max-width: 100%;
text-align: center;
}
.cau_schedule_input_div {
display: inline-block;
vertical-align: middle;
padding: 0 6px;
font-weight: bold;
}
.cau_shedule_notation {
display: inline-block;
vertical-align: middle;
width: 125px;
padding-left: 5px;
}
.cau_shedule_notation .dashicons {
position: relative;
bottom: -5px;
}
/* Tooltip */
.cau_tooltip {
position: relative;
}
.cau_tooltip .cau_tooltip_text {
visibility: hidden;
background-color: rgba(0,0,0,0.7);
color: #FFF;
text-align: left;
font-size: 14px;
padding: 15px;
border-radius: 6px;
position: absolute;
z-index: 1;
width: 240px;
bottom: 100%;
left: 50%;
margin-left: -60px;
margin-bottom: 10px;
opacity: 0;
transition: .3s;
font-weight: normal;
}
.cau_tooltip:hover .cau_tooltip_text {
visibility: visible;
opacity: 1;
}
.cau_tooltip .cau_tooltip_text::after {
content: " ";
position: absolute;
top: 100%;
left: 50%;
margin-left: -75px;
border-width: 5px;
border-style: solid;
border-color: rgba(0,0,0,0.7) transparent transparent transparent;
}
/* Responsive */
@media screen and (max-width: 1400px) {
.cau-column-wide {
width: calc(100% - 350px);
}
.cau-column-small {
width: 350px;
}
.welcome-to-cau .welcome-column.welcome-column-quarter {
width: 50%;
padding-bottom: 35px;
}
.cau-column-small .welcome-to-cau {
background-image: none;
}
}
@media screen and (max-width: 1150px) {
.cau-column-wide, .cau-column-small {
width: 100%;
padding: 0;
}
}
@media screen and (max-width: 1000px) {
/* Basics */
.cau_hide_on_mobile, table.autoupdate thead {
display: none!important;
}
.form-table td fieldset p {
display: block;
padding: 5px 0;
}
.form-table td fieldset input[type="checkbox"] {
display: inline-block;
vertical-align: middle;
width: 25px;
}
.form-table td fieldset label {
display: inline-block;
vertical-align: middle;
width: calc(100% - 40px);
box-sizing: border-box;
padding-left: 5px;
}
.cau_content .nav-tab-wrapper {
position: relative;
top: -20px;
border-bottom: 1px solid #CCC!important;
padding-bottom: 15px!important;
margin-bottom: 0px!important;
}
.cau_content .nav-tab {
font-size: 12px;
margin: 5px 5px 0 0!important;
box-sizing: border-box;
text-align: center;
}
/* Scheduling */
.cau_schedule_input {
width: 75px;
}
/* Custom buttons */
.cau-button {
display: block;
text-align: center;
margin: 5px 0;
}
.cau-button .dashicons {
float: left;
}
/* Dashboard */
.welcome-to-cau {
background-position: right bottom;
}
.welcome-to-cau.love-bg {
background-image: none;
}
.welcome-to-cau .welcome-column {
min-width: 100%;
}
.welcome-to-cau .welcome-column.welcome-column-first {
padding-left: 0px;
}
.cau-column-wide .cau-dashboard-box {
padding-right: 30px;
padding-bottom: 125px
}
.majorMinorExplain {
display: none;
}
/* Status */
table.cau_status_list .cau_status_name {
display: inline-block;
width: 50%;
box-sizing: border-box;
font-weight: 500;
}
table.cau_status_list .cau_status_interval {
display: none;
}
table.cau_status_list th.cau_status_next {
display: none;
}
table.cau_status_list td.cau_status_next {
display: block;
width: 100%;
}
table.cau_status_list .cau_status_active_state {
display: inline-block;
width: 50%;
box-sizing: border-box;
text-align: right;
}
.cau_mobile_prefix {
display: inline-block;
padding-right: 5px;
}
table.cau_status_list.cau_status_warnings td {
display: block;
width: 100%;
box-sizing: border-box;
}
table.cau_status_list.cau_status_warnings th.cau_plugin_issue_explain, table.cau_status_list.cau_status_warnings th.cau_plugin_issue_fixit {
display: none;
}
table.cau_status_list.cau_status_warnings td.cau_plugin_issue_name {
font-weight: 500;
}
}

View File

@ -0,0 +1,11 @@
#wpadminbar #wp-admin-bar-cau-has-issues .ab-icon:before {
/*content: "\f463";*/
content: "\f332";
top: 3px;
}
#wpadminbar #wp-admin-bar-cau-has-issues .cau-level-low {
/*color: #FFBA00;*/
}
#wpadminbar #wp-admin-bar-cau-has-issues .cau-level-high {
color: #FF0000;
}

View File

@ -0,0 +1,535 @@
<?php
// Check if emails should be send or not
function cau_check_updates_mail() {
// Notify of pending updates
if( cau_get_db_value( 'send' ) == 'on' ) {
cau_list_theme_updates(); // Check for theme updates
cau_list_plugin_updates(); // Check for plugin updates
}
// Notify of completed updates
if( cau_get_db_value( 'sendupdate' ) == 'on' && cau_get_db_value( 'plugins' ) == 'on' ) {
cau_plugin_updated(); // Check for updated plugins
}
// Notify of required db update
if( cau_get_db_value( 'dbupdateemails' ) == 'on' ) {
cau_notify_outofdate_db();
}
}
// Notify of out of date software
function cau_outdated_notifier_mail() {
if( cau_get_db_value( 'sendoutdated' ) == 'on' ) {
cau_list_outdated_software(); // Check for oudated plugins
}
}
// Ge the emailadresses it should be send to
function cau_set_email() {
$emailArray = array();
if( cau_get_db_value( 'email' ) == '' ) {
array_push( $emailArray, get_option('admin_email') );
} else {
$emailAdresses = cau_get_db_value( 'email' );
$list = explode( ", ", $emailAdresses );
foreach ( $list as $key ) {
array_push( $emailArray, $list );
}
}
return $emailArray;
}
// Mail format
function cau_is_html() {
// Check if cau_get_db_value() function exists.
if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' );
// Check if html
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
$html = true;
} else {
$html = false;
}
}
// Set the content for the emails about pending updates
function cau_outdated_message( $single, $plural, $list ) {
// WP version
$wpversion = get_bloginfo( 'version' );
// Base text
$text = sprintf( esc_html__( "You have %s on your WordPress site at %s that have not been tested with the latest 3 major releases of WordPress.", "companion-auto-update" ), $plural, get_site_url() );
$text .= "\n";
$text .= "\n";
// The list
if( !empty( $list ) ) {
$text .= sprintf( esc_html__( "The following %s have not been tested with WordPress %s:", "companion-auto-update" ), $plural, $wpversion );
$text .= "\n";
$text .= "\n";
foreach ( $list as $plugin => $version ) {
if( $version == '' ) $version = __( "Unknown", "companion-auto-update" );
$text .= "- ".sprintf( esc_html__( "%s tested up to: %s", "companion-auto-update" ), $plugin, $version )."\n";
}
}
return $text;
}
// Set the content for the emails about pending updates
function cau_pending_message( $single, $plural, $list ) {
// What markup to use
if( cau_is_html() ) $break = '<br />';
else $break = "\n";
// Base text
$text = sprintf( esc_html__( 'You have pending %1$s updates on your WordPress site at %2$s.', 'companion-auto-update' ), $single, get_site_url() );
$text .= $break;
if( !empty( $list ) ) {
$text .= $break;
$text .= sprintf( esc_html__( 'The following %1$s have new versions available.', 'companion-auto-update' ), $plural );
$text .= $break;
if( cau_is_html() ) $text .= "<ol>";
foreach ( $list as $key => $value ) {
if( cau_is_html() ) {
$text .= "<li>$value</li>";
} else {
$text .= "-$value\n";
}
}
if( cau_is_html() ) $text .= "</ol>";
$text .= $break;
}
$text .= __( 'Leaving your site outdated is a security risk so please consider manually updating them.', 'companion-auto-update' );
$text .= $break;
// End
$text .= sprintf( esc_html__( 'Head over to %1$s and check the ones you want to update.', 'companion-auto-update' ), get_admin_url().'update-core.php' );
return $text;
}
// Set the content for the emails about recent updates
function cau_updated_message( $type, $updatedList ) {
// What markup to use
if( cau_is_html() ) $break = '<br />';
else $break = "\n";
// The message
$text = sprintf( esc_html__(
'One or more %1$s on your WordPress site at %2$s have been updated by Companion Auto Update. No further action is needed on your part.
For more info on what is new visit your dashboard and check the changelog.', 'companion-auto-update'
), $type, get_site_url() );
$text .= $break;
$text .= $break;
$text .= sprintf( esc_html__(
'The following %1$s have been updated:', 'companion-auto-update'
), $type );
$text .= $break;
$text .= $updatedList;
$text .= $break;
$text .= __( "(You'll also receive this email if you manually updated a plugin or theme)", "companion-auto-update" );
return $text;
}
// Checks if plugins are out of date
function cau_list_outdated_software() {
// Check if cau_get_db_value() function exists.
if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' );
// Set up mail
$subject = '['.get_bloginfo( 'name' ).'] ' . __( 'You have outdated plugins on your site.', 'companion-auto-update' );
$type = __( 'plugin', 'companion-auto-update' );
$type_plural = __( 'plugins', 'companion-auto-update' );
$message = cau_outdated_message( $type, $type_plural, cau_list_outdated() );
// Send to all addresses
foreach ( cau_set_email() as $key => $value ) {
foreach ( $value as $k => $v ) {
wp_mail( $v, $subject, $message );
}
break;
}
}
// Checks if theme updates are available
function cau_list_theme_updates() {
global $wpdb;
$table_name = $wpdb->prefix . "auto_updates";
$configs = $wpdb->get_results( "SELECT * FROM $table_name WHERE name = 'themes'");
foreach ( $configs as $config ) {
if( $config->onoroff != 'on' ) {
// Check for required files
if ( !function_exists( 'get_theme_updates' ) ) {
require_once ABSPATH . 'wp-admin/includes/update.php';
}
// Begin
$themes = get_theme_updates();
$list = array();
if ( !empty( $themes ) ) {
foreach ( $themes as $stylesheet => $theme ) {
array_push( $list, $theme->get( 'Name' ) );
}
$subject = '[' . get_bloginfo( 'name' ) . '] ' . __( 'Theme update available.', 'companion-auto-update' );
$type = __('theme', 'companion-auto-update');
$type_plural = __('themes', 'companion-auto-update');
$message = cau_pending_message( $type, $type_plural, $list );
foreach ( cau_set_email() as $key => $value) {
foreach ($value as $k => $v) {
wp_mail( $v, $subject, $message );
}
break;
}
}
}
}
}
// Checks if plugin updates are available
function cau_list_plugin_updates() {
global $wpdb;
$table_name = $wpdb->prefix . "auto_updates";
$configs = $wpdb->get_results( "SELECT * FROM $table_name WHERE name = 'plugins'");
foreach ( $configs as $config ) {
if( $config->onoroff != 'on' ) {
require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
// Make sure get_plugin_updates() and get_plugins() are defined
if ( !function_exists( 'get_plugin_updates' ) OR !function_exists( 'get_plugins' ) ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
require_once ABSPATH . 'wp-admin/includes/update.php';
}
// Begin
$plugins = get_plugin_updates();
if ( !empty( $plugins ) ) {
$list = array();
foreach ( (array) $plugins as $plugin_file => $plugin_data ) {
$plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true );
$name = $plugin_data->Name;
array_push( $list, $name );
}
$subject = '[' . get_bloginfo( 'name' ) . '] ' . __( 'Plugin update available.', 'companion-auto-update' );
$type = __( 'plugin', 'companion-auto-update' );
$type_plural = __( 'plugins', 'companion-auto-update' );
$message = cau_pending_message( $type, $type_plural, $list );
foreach ( cau_set_email() as $key => $value) {
foreach ($value as $k => $v) {
wp_mail( $v, $subject, $message );
}
break;
}
}
}
}
}
// Alerts when plugin has been updated
function cau_plugin_updated() {
// Check if cau_get_db_value() function exists.
if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' );
// Set the correct timezone for emails
date_default_timezone_set( cau_get_proper_timezone() );
// Create arrays
$pluginNames = array();
$pluginDates = array();
$pluginVersion = array();
$pluginSlug = array();
$pluginTimes = array();
$themeNames = array();
$themeDates = array();
$themeTimes = array();
// Where to look for plugins
$plugdir = plugin_dir_path( __DIR__ );
if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); // Check if get_plugins() function exists.
$allPlugins = get_plugins();
// Where to look for themes
$themedir = get_theme_root();
$allThemes = wp_get_themes();
// Mail schedule
$schedule_mail = wp_get_schedule( 'cau_set_schedule_mail' );
// Loop trough all plugins
foreach ( $allPlugins as $key => $value ) {
// Get plugin data
$fullPath = $plugdir.'/'.$key;
$getFile = $path_parts = pathinfo( $fullPath );
$pluginData = get_plugin_data( $fullPath );
// Get the slug
$explosion = explode( '/', $key );
$actualSlug = array_shift( $explosion );
// Get last update date
$fileDate = date ( 'YmdHi', filemtime( $fullPath ) );
switch ( $schedule_mail ) {
case 'hourly':
$lastday = date( 'YmdHi', strtotime( '-1 hour', time() ) );
break;
case 'twicedaily':
$lastday = date( 'YmdHi', strtotime( '-12 hours', time() ) );
break;
default:
$lastday = date( 'YmdHi', strtotime( '-1 day', time() ) );
break;
}
$dateFormat = get_option( 'date_format' );
$timestamp = date_i18n( $dateFormat, filemtime( $fullPath ) );
$timestamp .= ' - '.date( 'H:i', filemtime( $fullPath ) );
if( $fileDate >= $lastday ) {
// Get plugin name
foreach ( $pluginData as $dataKey => $dataValue ) {
if( $dataKey == 'Name') {
array_push( $pluginNames , $dataValue );
}
if( $dataKey == 'Version') {
array_push( $pluginVersion , $dataValue );
}
}
array_push( $pluginDates, $fileDate );
array_push( $pluginSlug, $actualSlug );
array_push( $pluginTimes, $timestamp );
}
}
// Loop trough all themes
foreach ( $allThemes as $key => $value ) {
// Get theme data
$fullPath = $themedir.'/'.$key;
$getFile = $path_parts = pathinfo( $fullPath );
// Get last update date
$dateFormat = get_option( 'date_format' );
$fileDate = date ( 'YmdHi', filemtime( $fullPath ) );
if( $schedule_mail == 'hourly' ) {
$lastday = date( 'YmdHi', strtotime( '-1 hour', time() ) );
} elseif( $schedule_mail == 'twicedaily' ) {
$lastday = date( 'YmdHi', strtotime( '-12 hours', time() ) );
} elseif( $schedule_mail == 'daily' ) {
$lastday = date( 'YmdHi', strtotime( '-1 day', time() ) );
}
$dateFormat = get_option( 'date_format' );
$timestamp = date_i18n( $dateFormat, filemtime( $fullPath ) );
$timestamp .= ' - '.date( 'H:i', filemtime( $fullPath ) );
if( $fileDate >= $lastday ) {
array_push( $themeNames, $path_parts['filename'] );
array_push( $themeDates, $fileDate );
array_push( $themeTimes, $timestamp );
}
}
$totalNumP = 0;
$totalNumT = 0;
$updatedListP = '';
$updatedListT = '';
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
$updatedListP .= '<ol>';
$updatedListT .= '<ol>';
}
foreach ( $pluginDates as $key => $value ) {
// Set up some var
$plugin_name = $pluginNames[$key];
$plugin_slug = $pluginSlug[$key];
$to_version = __( "to version", "companion-auto-update" ).' '.$pluginVersion[$key];
$more_info_arr = array( __( "Time of update", "companion-auto-update" ) => $pluginTimes[$key] );
// Plugin links
if( cau_get_db_value( 'plugin_links_emails' ) == 'on' ) {
$more_info_arr[__( "Plugin details", "companion-auto-update" )] = "<a href='https://wordpress.org/plugins/{$plugin_slug}/'>".__( "Visit", "companion-auto-update" )."</a>";
$more_info_arr[__( "Release notes", "companion-auto-update" )] = "<a href='https://wordpress.org/plugins/{$plugin_slug}/#developers'>".__( "Visit", "companion-auto-update" )."</a>";
$more_info_arr[__( "Support", "companion-auto-update" )] = "<a href='https://wordpress.org/support/plugin/{$plugin_slug}/'>".__( "Visit", "companion-auto-update" )."</a>";
}
// Email format
$use_html = ( cau_get_db_value( 'html_or_text' ) == 'html' ) ? true : false;
// Email content
$updatedListP .= $use_html ? "<li>" : "-"; // Start row
$updatedListP .= $use_html ? "<strong>{$plugin_name}</strong> " : "{$plugin_name} "; // Show plugin name
$updatedListP .= $to_version; // To version
// Get advanced info
if( cau_get_db_value( 'advanced_info_emails' ) == 'on' ) {
foreach( $more_info_arr as $label => $value ) {
$updatedListP .= $use_html ? "<br />{$label}: {$value}" : "\n{$label}: {$value}";
}
}
$updatedListP .= $use_html ? "</li>" : "\n"; // End row
$totalNumP++;
}
foreach ( $themeNames as $key => $value ) {
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
$more_info = '';
if( cau_get_db_value( 'advanced_info_emails' ) == 'on' ) $more_info = "<br /><span style='opacity: 0.5;'>".__( "Time of update", "companion-auto-update" ).": ".$themeTimes[$key]."</span>";
$updatedListT .= "<li><strong>".$themeNames[$key]."</strong>".$more_info."</li>";
} else {
$updatedListT .= "- ".$themeNames[$key]."\n";
}
$totalNumT++;
}
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
$updatedListP .= '</ol>';
$updatedListT .= '</ol>';
}
// Set the email content type
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
function cau_mail_content_type() {
return 'text/html';
}
add_filter( 'wp_mail_content_type', 'cau_mail_content_type' );
}
// If plugins have been updated, send email
if( $totalNumP > 0 ) {
// E-mail content
$subject = '[' . get_bloginfo( 'name' ) . '] ' . __('One or more plugins have been updated.', 'companion-auto-update');
$type = __('plugins', 'companion-auto-update');
$message = cau_updated_message( $type, $updatedListP );
// Send to all addresses
foreach ( cau_set_email() as $key => $value) {
foreach ($value as $k => $v) {
wp_mail( $v, $subject, $message );
}
break;
}
}
// If themes have been updated, send email
if( $totalNumT > 0 ) {
// E-mail content
$subject = '[' . get_bloginfo( 'name' ) . '] ' . __('One or more themes have been updated.', 'companion-auto-update');
$type = __('themes', 'companion-auto-update');
$message = cau_updated_message( $type, $updatedListT );
// Send to all addresses
foreach ( cau_set_email() as $key => $value) {
foreach ($value as $k => $v) {
wp_mail( $v, $subject, $message );
}
break;
}
}
if( cau_get_db_value( 'html_or_text' ) == 'html' ) remove_filter( 'wp_mail_content_type', 'cau_mail_content_type' );
// Prevent duplicate emails by setting the event again
if( $totalNumT > 0 OR $totalNumP > 0 ) {
if( $schedule_mail == 'hourly' ) {
wp_clear_scheduled_hook('cau_set_schedule_mail');
wp_schedule_event( strtotime( '+1 hour', time() ) , 'hourly', 'cau_set_schedule_mail' );
}
}
}
function cau_notify_outofdate_db() {
// Check if cau_get_db_value() function exists.
if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' );
// Database requires an update
if ( cau_incorrectDatabaseVersion() ) {
// Set up mail
$subject = '[' . get_bloginfo( 'name' ) . '] ' . __( 'We need your help with something', 'companion-auto-update' );
$message = __( 'Hi there! We need your help updating the database of Companion Auto Update to the latest version. No rush, old features will continue to work but some new features might not work until you update the database.', 'companion-auto-update' );
// Send to all addresses
foreach ( cau_set_email() as $key => $value ) {
foreach ( $value as $k => $v ) {
wp_mail( $v, $subject, $message );
}
break;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,420 @@
<?php
/*
* Plugin Name: Companion Auto Update
* Plugin URI: http://codeermeneer.nl/portfolio/companion-auto-update/
* Description: This plugin auto updates all plugins, all themes and the wordpress core.
* Version: 3.8.7.1
* Author: Papin Schipper
* Author URI: http://codeermeneer.nl/
* Contributors: papin
* License: GPLv2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: companion-auto-update
* Domain Path: /languages/
*/
// Disable direct access
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
// Load translations
function cau_init() {
load_plugin_textdomain( 'companion-auto-update', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); // Load language files (for backwards compat mostly)
add_filter( 'plugins_auto_update_enabled', '__return_false' ); // Turn off default WP5.5 plugin update features to avoid confusion
add_filter( 'themes_auto_update_enabled', '__return_false' ); // Turn off default WP5.5 theme update features to avoid confusion
}
add_action( 'init', 'cau_init' );
// Set up the database and required schedules
function cau_install( $network_wide ) {
if ( is_multisite() && $network_wide ) {
global $wpdb;
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
foreach ( $blog_ids as $blog_id ) {
switch_to_blog( $blog_id );
cau_database_creation();
restore_current_blog();
}
} else {
cau_database_creation();
}
if (! wp_next_scheduled ( 'cau_set_schedule_mail' )) wp_schedule_event( time(), 'daily', 'cau_set_schedule_mail'); // Set schedule for basic notifcations
if (! wp_next_scheduled ( 'cau_custom_hooks_plugins' )) wp_schedule_event( time(), 'daily', 'cau_custom_hooks_plugins'); // Run custom hooks on plugin updates
if (! wp_next_scheduled ( 'cau_custom_hooks_themes' )) wp_schedule_event( time(), 'daily', 'cau_custom_hooks_themes'); // Run custom hooks on theme updates
if (! wp_next_scheduled ( 'cau_log_updater' )) wp_schedule_event( ( time() - 1800 ), 'daily', 'cau_log_updater'); // Keep the log up to date
if (! wp_next_scheduled ( 'cau_outdated_notifier' )) wp_schedule_event( time(), 'daily', 'cau_outdated_notifier'); // Set schedule for basic notifcations
}
add_action( 'cau_set_schedule_mail', 'cau_check_updates_mail' );
add_action( 'cau_outdated_notifier', 'cau_outdated_notifier_mail' );
add_action( 'wp_update_plugins', 'cau_run_custom_hooks_p' );
add_action( 'wp_update_themes', 'cau_run_custom_hooks_t' );
add_action( 'wp_version_check', 'cau_run_custom_hooks_c' );
// Hourly event to keep the log up to date
function cau_keep_log_uptodate() {
cau_savePluginInformation(); // Check for new plugins and themes
cau_check_delayed(); // Check for plugin delays
}
add_action( 'cau_log_updater', 'cau_keep_log_uptodate' );
// Redirect to welcome screen on activation of plugin
function cau_pluginActivateWelcome() {
add_option( 'cau_redirectToWelcomeScreen', true );
}
register_activation_hook(__FILE__, 'cau_pluginActivateWelcome');
// Redirect to welcome screen on activation of plugin
function cau_pluginRedirectWelcomeScreen() {
if ( get_option( 'cau_redirectToWelcomeScreen', false ) ) {
delete_option( 'cau_redirectToWelcomeScreen' );
if( !isset( $_GET['activate-multi'] ) ) {
wp_redirect( admin_url( cau_menloc().'?page=cau-settings&welcome=1' ) );
}
}
}
add_action( 'admin_init', 'cau_pluginRedirectWelcomeScreen' );
// Donate url
function cau_donateUrl() {
return 'https://www.paypal.me/dakel/10/';
}
// Database version
function cau_db_version() {
return '3.8.3';
}
function cau_database_creation() {
global $wpdb;
// Plugin db info
$cau_db_version = cau_db_version();
$autoupdates = $wpdb->prefix."auto_updates";
$updateLog = $wpdb->prefix."update_log";
// WordPress db info
$charset_collate = $wpdb->get_charset_collate();
// DB table creation queries
$sql = "CREATE TABLE $autoupdates ( id INT(9) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, onoroff TEXT NOT NULL, UNIQUE KEY id (id) ) $charset_collate;";
$sql2 = "CREATE TABLE $updateLog ( id INT(9) NOT NULL AUTO_INCREMENT, slug VARCHAR(255) NOT NULL, oldVersion VARCHAR(10) NOT NULL, newVersion VARCHAR(10) NOT NULL, method VARCHAR(10) NOT NULL, put_on_hold VARCHAR(100) DEFAULT '0', UNIQUE KEY id (id) ) $charset_collate;";
// Create DB tables
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
dbDelta( $sql2 );
// Database version
add_option( "cau_db_version", "$cau_db_version" );
// Insert data
cau_install_data();
}
// Check if database table exists before creating
function cau_check_if_exists( $whattocheck, $id = 'name', $db_table = 'auto_updates' ) {
global $wpdb;
$table_name = $wpdb->prefix.$db_table;
$rows = $wpdb->get_col( "SELECT COUNT(*) as num_rows FROM {$table_name} WHERE {$id} = '{$whattocheck}'" );
$check = $rows[0];
return ( $check > 0 ) ? true : false;
}
// Insert date into database
function cau_install_data() {
global $wpdb;
$table_name = $wpdb->prefix . "auto_updates";
$toemail = get_option('admin_email');
// Update configs
if( !cau_check_if_exists( 'plugins' ) ) $wpdb->insert( $table_name, array( 'name' => 'plugins', 'onoroff' => 'on' ) );
if( !cau_check_if_exists( 'themes' ) ) $wpdb->insert( $table_name, array( 'name' => 'themes', 'onoroff' => 'on' ) );
if( !cau_check_if_exists( 'minor' ) ) $wpdb->insert( $table_name, array( 'name' => 'minor', 'onoroff' => 'on' ) );
if( !cau_check_if_exists( 'major' ) ) $wpdb->insert( $table_name, array( 'name' => 'major', 'onoroff' => '' ) );
// Email configs
if( !cau_check_if_exists( 'email' ) ) $wpdb->insert( $table_name, array( 'name' => 'email', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'send' ) ) $wpdb->insert( $table_name, array( 'name' => 'send', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'sendupdate' ) ) $wpdb->insert( $table_name, array( 'name' => 'sendupdate', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'sendoutdated' ) ) $wpdb->insert( $table_name, array( 'name' => 'sendoutdated', 'onoroff' => '' ) );
// Advanced
if( !cau_check_if_exists( 'notUpdateList' ) ) $wpdb->insert( $table_name, array( 'name' => 'notUpdateList', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'translations' ) ) $wpdb->insert( $table_name, array( 'name' => 'translations', 'onoroff' => 'on' ) );
if( !cau_check_if_exists( 'wpemails' ) ) $wpdb->insert( $table_name, array( 'name' => 'wpemails', 'onoroff' => 'on' ) );
if( !cau_check_if_exists( 'notUpdateListTh' ) ) $wpdb->insert( $table_name, array( 'name' => 'notUpdateListTh', 'onoroff' => '' ) );
// Stuff
if( !cau_check_if_exists( 'html_or_text' ) ) $wpdb->insert( $table_name, array( 'name' => 'html_or_text', 'onoroff' => 'html' ) );
if( !cau_check_if_exists( 'dbupdateemails' ) ) $wpdb->insert( $table_name, array( 'name' => 'dbupdateemails', 'onoroff' => '' ) );
// Advanced
if( !cau_check_if_exists( 'allow_administrator' ) ) $wpdb->insert( $table_name, array( 'name' => 'allow_administrator', 'onoroff' => 'on' ) );
if( !cau_check_if_exists( 'allow_editor' ) ) $wpdb->insert( $table_name, array( 'name' => 'allow_editor', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'allow_author' ) ) $wpdb->insert( $table_name, array( 'name' => 'allow_author', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'ignore_seo' ) ) $wpdb->insert( $table_name, array( 'name' => 'ignore_seo', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'ignore_cron' ) ) $wpdb->insert( $table_name, array( 'name' => 'ignore_cron', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'advanced_info_emails' ) ) $wpdb->insert( $table_name, array( 'name' => 'advanced_info_emails', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'update_delay' ) ) $wpdb->insert( $table_name, array( 'name' => 'update_delay', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'update_delay_days' ) ) $wpdb->insert( $table_name, array( 'name' => 'update_delay_days', 'onoroff' => '' ) );
if( !cau_check_if_exists( 'plugin_links_emails' ) ) $wpdb->insert( $table_name, array( 'name' => 'plugin_links_emails', 'onoroff' => '' ) );
}
register_activation_hook( __FILE__, 'cau_install' );
// Clear everything on deactivation
function cau_remove() {
// Delete tables
global $wpdb;
$autoupdates = $wpdb->prefix."auto_updates";
$updateLog = $wpdb->prefix."update_log";
$wpdb->query( "DROP TABLE IF EXISTS $autoupdates" );
$wpdb->query( "DROP TABLE IF EXISTS $updateLog" );
// Clear schedules
wp_clear_scheduled_hook( 'cau_set_schedule_mail' );
wp_clear_scheduled_hook( 'cau_custom_hooks_plugins' );
wp_clear_scheduled_hook( 'cau_custom_hooks_themes' );
wp_clear_scheduled_hook( 'cau_log_updater' );
// Restore WordPress 5.5 default update functionality
add_filter( 'plugins_auto_update_enabled', '__return_true' );
add_filter( 'themes_auto_update_enabled', '__return_true' );
add_filter( 'auto_plugin_update_send_email', '__return_true' );
add_filter( 'auto_theme_update_send_email', '__return_true' );
}
register_deactivation_hook( __FILE__, 'cau_remove' );
// Update
function cau_update_db_check() {
$cau_db_version = cau_db_version();
if ( get_site_option( 'cau_db_version' ) != $cau_db_version ) {
cau_database_creation();
// In 3.7.2 we've added $wpdb->get_charset_collate
if( get_site_option( 'cau_db_version' ) < '3.7.2' ) {
global $wpdb;
$autoupdates = $wpdb->prefix."auto_updates";
$updateLog = $wpdb->prefix."update_log";
$db_charset = constant( 'DB_CHARSET' );
$wpdb->query( "ALTER TABLE $autoupdates CONVERT TO CHARACTER SET $db_charset" );
$wpdb->query( "ALTER TABLE $updateLog CONVERT TO CHARACTER SET $db_charset" );
}
update_option( "cau_db_version", $cau_db_version );
}
}
add_action( 'upgrader_process_complete', 'cau_update_db_check' );
// Manual update
function cau_manual_update() {
cau_update_db_check();
}
// Load custom functions
require_once( plugin_dir_path( __FILE__ ) . 'cau_functions.php' );
// Add plugin to menu
function register_cau_menu_page() {
if( cau_allowed_user_rights() ) add_submenu_page( cau_menloc() , __( 'Auto Updater', 'companion-auto-update' ), __( 'Auto Updater', 'companion-auto-update' ), 'manage_options', 'cau-settings', 'cau_frontend' );
}
add_action( 'admin_menu', 'register_cau_menu_page' );
// Settings page
function cau_frontend() {
echo "<div class='wrap cau_content_wrap cau_content'>
<h1 class='wp-heading-inline'>".__( 'Companion Auto Update', 'companion-auto-update' )."</h1>
<hr class='wp-header-end'>";
// Make sure the correct timezone is used
date_default_timezone_set( cau_get_proper_timezone() );
// Allow only access to these pages
$allowedPages = array(
'dashboard' => __( 'Dashboard' ),
'pluginlist' => __( 'Update filter', 'companion-auto-update' ),
'log' => __( 'Update log', 'companion-auto-update' ),
'status' => __( 'Status', 'companion-auto-update' ),
);
// Show subtabs
echo "<h2 class='nav-tab-wrapper wp-clearfix'>";
foreach ( $allowedPages as $page => $title ) {
echo "<a href='".cau_url( $page )."' id='tab-".$page."' class='nav-tab "._active_tab( $page )."'>".$title;
if( $page == 'status' ) echo cau_pluginHasIssues() ? "<span class='cau_melding level-".cau_pluginIssueLevels()."'></span>" : "<span class='cau_melding level-okay'></span>"; // Show status icon
echo "</a>";
}
echo "</h2>";
// Show page content
if( !isset( $_GET['tab'] ) ) {
$requestedPage = 'dashboard';
echo "<script>jQuery('#tab-dashboard').addClass('nav-tab-active');</script>"; // Set active tab class
} else {
$requestedPage = sanitize_key( $_GET['tab'] );
}
if( array_key_exists( $requestedPage, $allowedPages ) ) {
require_once( plugin_dir_path( __FILE__ ) . 'admin/'.$requestedPage.'.php' );
} else {
wp_die( 'You\'re not allowed to view <strong>'.$requestedPage.'</strong>.' );
}
echo '</div>';
}
// Add a widget to the dashboard.
function cau_add_widget() {
if ( cau_allowed_user_rights() ) wp_add_dashboard_widget( 'cau-update-log', __('Update log', 'companion-auto-update'), 'cau_widget' );
}
add_action( 'wp_dashboard_setup', 'cau_add_widget' );
// Widget content
function cau_widget() {
echo '<style>table.autoupdatewidget { border: 0px solid transparent; border-bottom: 1px solid #EEEEEE; margin: 0 -12px; width: calc(100% + 24px); } table.autoupdatewidget tr td { border-top: 1px solid #EEEEEE; padding: 9px 12px 5px 12px; background: #FAFAFA; } .cau_divide { display: inline-block; color: #E7E0DF; padding: 0 2px; } </style>';
echo '<p>'.__('Below are the last 7 updates ran on this site. Includes plugins and themes, both automatically updated and manually updated.', 'companion-auto-update').'</p>';
cau_fetch_log( '7' );
echo '<p><a href="'.cau_url( 'log' ).'">'.__( 'View full changelog', 'companion-auto-update' ).'</a> <span class="cau_divide">|</span> <a href="'.cau_url( 'dashboard' ).'">'.__( 'Settings' ).'</a></p>';
}
// Load admin styles
function load_cau_global_styles( $hook ) {
wp_enqueue_style( 'cau_admin_styles', plugins_url( 'backend/style.css' , __FILE__ ) ); // Plugin scripts
wp_enqueue_style( 'cau_warning_styles', plugins_url( 'backend/warningbar.css' , __FILE__ ) ); // Check for issues
}
add_action( 'admin_enqueue_scripts', 'load_cau_global_styles', 99 );
// Load admin styles
function load_cau_page_styles( $hook ) {
// Only load on plugins' pages
if( $hook != 'tools_page_cau-settings' && $hook != 'index_page_cau-settings' ) return;
// WordPress scripts we need
wp_enqueue_style( 'thickbox' );
wp_enqueue_script( 'thickbox' );
wp_enqueue_script( 'plugin-install' );
}
add_action( 'admin_enqueue_scripts', 'load_cau_page_styles', 100 );
// Send e-mails
require_once( plugin_dir_path( __FILE__ ) . 'cau_emails.php' );
// Add settings link on plugin page
function cau_settings_link( $links ) {
$settings_link = '<a href="'.cau_url( 'dashboard' ).'">'.__( 'Settings' ).'</a>';
$settings_link2 = '<a href="https://translate.wordpress.org/projects/wp-plugins/companion-auto-update">'.__( 'Help us translate', 'companion-auto-update' ).'</a>';
$settings_link3 = '<a href="'.cau_donateUrl().'">'.__( 'Donate to help development', 'companion-auto-update' ).'</a>';
array_unshift( $links, $settings_link2 );
array_unshift( $links, $settings_link3 );
if( cau_allowed_user_rights() ) array_unshift( $links, $settings_link );
return $links;
}
$plugin = plugin_basename(__FILE__);
add_filter( "plugin_action_links_$plugin", "cau_settings_link" );
// Auto Update Class
class CAU_auto_update {
// Enable Update filters
public function __construct() {
add_action( 'plugins_loaded', array( &$this, 'CAU_auto_update_filters' ), 1 );
}
public function CAU_auto_update_filters() {
global $wpdb;
$table_name = $wpdb->prefix . "auto_updates";
// Disable WP emails
add_filter( 'auto_plugin_update_send_email', '__return_false' ); // Plugin updates
add_filter( 'auto_theme_update_send_email', '__return_false' ); // Theme updates
// Enable for major updates
$configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'major'");
foreach ( $configs as $config ) {
if( $config->onoroff == 'on' ) add_filter( 'allow_major_auto_core_updates', '__return_true', 1 ); // Turn on
else add_filter( 'allow_major_auto_core_updates', '__return_false', 1 ); // Turn off
}
// Enable for minor updates
$configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'minor'");
foreach ( $configs as $config ) {
if( $config->onoroff == 'on' ) add_filter( 'allow_minor_auto_core_updates', '__return_true', 1 ); // Turn on
else add_filter( 'allow_minor_auto_core_updates', '__return_false', 1 ); // Turn off
}
// Enable for plugins
$configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'plugins'");
foreach ( $configs as $config ) {
if( $config->onoroff == 'on' ) add_filter( 'auto_update_plugin', 'cau_dontUpdatePlugins', 10, 2 ); // Turn on
else add_filter( 'auto_update_plugin', '__return_false', 1 ); // Turn off
}
// Enable for themes
$configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'themes'");
foreach ( $configs as $config ) {
if( $config->onoroff == 'on' ) add_filter( 'auto_update_theme', '__return_true' ); // Turn on
else add_filter( 'auto_update_theme', '__return_false', 1 ); // Turn off
}
// Enable for translation files
$configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'translations'");
foreach ( $configs as $config ) {
if( $config->onoroff == 'on' ) add_filter( 'auto_update_translation', '__return_true', 1 ); // Turn on
else add_filter( 'auto_update_translation', '__return_false', 1 ); // Turn off
}
// WP Email Config
$configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'wpemails'");
foreach ( $configs as $config ) {
if( $config->onoroff == 'on' ) add_filter( 'auto_core_update_send_email', '__return_true', 1 ); // Turn on
else add_filter( 'auto_core_update_send_email', '__return_false', 1 ); // Turn off
}
}
}
new CAU_auto_update();
// Check for issues
function cau_checkForIssues( $admin_bar ) {
if( cau_pluginHasIssues() && is_admin() && cau_pluginIssueLevels() == 'high' ) {
$admin_bar->add_menu( array(
'id' => 'cau-has-issues',
'title' => '<span class="ab-icon"></span><span class="cau-level-'.cau_pluginIssueLevels().'">'.cau_pluginIssueCount().'</span>',
'href' => cau_url( 'status' ),
'meta' => array(
'target' => '_self',
'title' => __( 'Companion Auto Update ran into a critical error. View the status log for more info.', 'companion-auto-update' ),
),
));
}
}
add_action( 'admin_bar_menu', 'cau_checkForIssues', 150 );

View File

@ -0,0 +1,2 @@
<?php
# Silence is golden.

View File

@ -0,0 +1,62 @@
# Copyright (C) 2016 Companion Auto Update
# This file is distributed under the same license as the Companion Auto Update package.
msgid ""
msgstr ""
"Project-Id-Version: Companion Auto Update 1.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/companion-auto-"
"update\n"
"POT-Creation-Date: 2016-05-24 08:16:37+00:00\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2016-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
#: companion_portfolio.php:96
msgid "Auto Updater"
msgstr ""
#: companion_portfolio.php:122
msgid "Auto update plugins?"
msgstr ""
#: companion_portfolio.php:122
msgid "Auto update themes?"
msgstr ""
#: companion_portfolio.php:122
msgid "Auto update minor core updates?"
msgstr ""
#: companion_portfolio.php:122
msgid "Auto update major core updates?"
msgstr ""
#: companion_portfolio.php:125
msgid "Settings saved"
msgstr ""
#: companion_portfolio.php:125
msgid "Settings"
msgstr ""
#. Plugin Name of the plugin/theme
msgid "Companion Auto Update"
msgstr ""
#. #-#-#-#-# plugin.pot (Companion Auto Update 1.0) #-#-#-#-#
#. Plugin URI of the plugin/theme
#. #-#-#-#-# plugin.pot (Companion Auto Update 1.0) #-#-#-#-#
#. Author URI of the plugin/theme
msgid "https://qreative-web.com"
msgstr ""
#. Description of the plugin/theme
msgid ""
"This plugin auto updates all plugins, all themes and the wordpress core."
msgstr ""
#. Author of the plugin/theme
msgid "Qreative-Web"
msgstr ""

View File

@ -0,0 +1,4 @@
<?php
/**
* Nothing to see here
*/

View File

@ -0,0 +1,187 @@
=== Companion Auto Update ===
Contributors: Papin, qweb
Donate link: https://www.paypal.me/dakel/10/
Tags: auto, automatic, background, update, updates, updating, automatic updates, automatic background updates, easy update, wordpress update, theme update, plugin update, up-to-date, security, update latest version, update core, update wp, update wp core, major updates, minor updates, update to new version, update core, update plugin, update plugins, update plugins automatically, update theme, plugin, theme, advance, control, mail, notifations, enable
Requires at least: 3.6.0
Tested up to: 6.0
Requires PHP: 5.1
Stable tag: 3.8.7.1
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Manage all updates on your WordPress site. Stay in the know with several optional e-mail notifications and logs. For free.
== Description ==
Companion Auto Update is a powerful and completely free plugin that allows you to manage all the updates on your WordPress site. Our aim is to give you the best control over these updates and stay in the know at all times.
We understand that you might not always be able to check if your WordPress site has any updates that need to be installed. Especially when you maintain multiple websites keeping them up-to-date can be a lot of work. This plugin can help you with that. We'll keep your site up-to-date and keep you posted about what's happening and notify you when we need your help with something.
If you have a feature suggestion or idea youd like to see in the plugin, wed love to hear about it! [Suggest a Feature](https://codeermeneer.nl/contact/)
= Main features =
1. Auto-updating for plugins, themes, core and translation files
1. Set at what time you wish to update
1. Filter plugins and themes to not be updated
1. E-mail notifications about old software, pending updates and completed updates
1. An update log with all updates
1. Option to delay automatic updates with an x number of days
= Full control over everything =
Full control, that's what this plugin is all about. With this plugin you can enable (or disable) automatic updating for plugins, themes, WordPress core updates (both minor and major can be changed separately) and for translation files. Don't want to run the updater for all plugins? Don't worry, just disable auto updating for the plugins you'd like to skip and we can even notify you when there's an update for these plugins so you can go and update them yourself.
= Scheduling =
By default we'll check for updates twice a day but you can change this to several different options if you'd like. When choosing to update on a daily basis you can even select at what time you'd like it to run. Besides the updaters you can also schedule te notifications, want to update every hour but only recieve notifications once a day? No problem!
Sometimes developers will push an update that will cause errors on your site, they'll often fix it within a day but if the updater has run in the mean time it can cause all kinds of issues. Now you can choose to delay updates with an x number of days to prevent this from happening.
= Know what's happening =
We want you to know what's happening on your website. This plugin offers settings for various email notifications. We can send you an email when an update is available, when a plugin has been updated or when wordpress has been updated.
But if you don't want to recieve emails about this you can still log in and view the changelog to see what happened.
== Installation ==
How to install Companion Auto Update
= Manual install =
1. Download Companion Auto Update.
1. Upload the 'Companion Auto Update' directory to your '/wp-content/plugins/' directory.
1. Activate Companion Auto Update from your Plugins page.
= Via WordPress =
1. Search for 'Companion Auto Update'.
1. Click install.
1. Activate.
= Settings =
Settings can be found trough Tools > Auto Updater
== Frequently Asked Questions ==
= Check our website for the FAQ =
[https://codeermeneer.nl/documentation/auto-update/faq-auto-updater/](https://codeermeneer.nl/documentation/auto-update/faq-auto-updater/)
= What features can I expect to see in the future? =
Your feedback is what made this plugin what is and what itll become so keep the feedback coming! To see what features you've suggested and what we're working on [read our blogpost here](https://codeermeneer.nl/blog/companion-auto-update-and-its-future/)
= What's the difference between WordPress 5.5 and this plugin? =
WordPress 5.5 was released recently and it packs tons of new features. One of those features is auto-updates for plugins and themes. Something Companion Auto Update does too.
So obviously, some of you wondered what the difference would be between the default WordPress method and the one offered by Companion Auto Update and I figured Id quickly write a blog about it, explaining the differences.
[You can read this blogpost here](https://codeermeneer.nl/blog/wordpress-5-5-versus-companion-auto-update/)
== Screenshots ==
1. Full control over what to update and when to recieve notifications
2. Disable auto-updating for certain plugins and/or themes
3. Advanced scheduling options for updating and notifcations
4. Keep track of updates with the update log
== Changelog ==
= 3.8.7.1 (September 28, 2022) =
* Tweak: Extended function_exists check with get_plugins() for the fatal error when trying to send update emails
= 3.8.7 (September 12, 2022) =
* Fix: Fatal error when trying to send update emails
= 3.8.6 (August 11, 2022) =
* Tweak: Code optimization for better performance
= 3.8.5 (March 17, 2022) =
* New: Added more checks on the status page and added an explanation to some of them.
* New: Added an list of delayed updates on the status page to help with troubleshooting.
* Tweak: Made some improvements to the update delay feature.
* Tweak: Added a notice to explain that update delay does not work with WordPress update currently.
* Tweak: Improved code on the status page to be more reliable.
= 3.8.4 (February 2, 2022) =
* Tweak: Fixed a few styling errors with WP5.9
= 3.8.3 (December 9, 2021) =
* New: Plugin update e-mails now have an option to link to a few important pages
* Fix: Error: Undefined index: dbupdateemails
* Fix: Error: A non-numeric value encountered
= 3.8.2 (July 1, 2021) =
* Fix: Error: Call to undefined function get_plugin_updates()
= 3.8.1 (June 4, 2021) =
* New: Be notified when we need your help updating to a new database version [Feature Request](https://wordpress.org/support/topic/feature-request-839/)
* Tweak: Made some under the hood performance improvements
= 3.8.0 (January 14, 2021) =
* New: Better handling of plugins with an unknown WP version
* New: More intervals for notifications
* Fix: Call to undefined function errors
= 3.7.1.1 (November 2, 2020) =
* Fix: Type in wp_next_scheduled
= 3.7.1 (October 30, 2020) =
* Fix: PHP Warning: strtotime() expects parameter 2 to be integer, string given
= 3.7 (September 8, 2020) =
* New: Delay updates with an x number of days
* New: Be notified of plugins that have not been tested with the latest 3 major releases of WordPress.
* New: Choose to see more info in the emails (like the time at which the update happened)
* Fix: "Contact for support" button will work again
* Fix: Fixed a few PHP errors
* Tweak: Made improvements to the "Fix it" button for the "All automatic updates are disabled" error.
* Tweak: You can now choose to ignore the "Search Engine Visibility" and "Cronjobs" warnings
* Tweak: Reports on the Site Health page will only show a summary and point to the status page for more information and possible fixes
* Tweak: Removed cronjob check and Search Engine Visibility check from site health
* Tweak: E-mails are now fully translatable
* Tweak: Renamed Core notifications to WordPress notifications
* Tweak: WordPress plugin and theme update notifications are now disabled
Also: Check out what features we're working on at [our blogpost](https://codeermeneer.nl/blog/companion-auto-update-and-its-future/)
= 3.6 (August 12, 2020) =
* New: Added an "after core update" hook [More info](https://codeermeneer.nl/documentation/codex-auto-updater/)
* New: Select which userroles can access settings. (Defaults to only administrators)
* Tweak: Added Theme and Core update method the log
* Tweak: Few WordPress 5.5 improvements
= 3.5.5 (August 5, 2020) =
* Fix: Added better multisite support
* Tweak: We've added a bunch more checks to the status page and you can now see more passed checks.
* Support for WordPress 5.5
= 3.5.4.1 (June 20, 2020) =
* Fix: Sometimes the hour settings for intervals wouldn't show up
= 3.5.4 (June 19, 2020) =
* New: See translations in the update log
* New: We've added a few checks to WordPress' Site Health page
* Fix: Error with Companion Auto Update Database Update
* Fix: Schedule interval duplicates
= 3.5.3 (June 5, 2020) =
* New: We're working on a better update log. You should see the Update method (Manual/Automatic) in the log now. (Only works for Plugins right now)
Please report any issues with this feature over at our sticky post: [Problems with the Update method in the new update log?](https://wordpress.org/support/topic/problems-with-the-update-method-in-the-new-update-log/)
* Fix: Not able to see checks in boxes (reverted back to before it all went wrong)
* Fix: Error date_default_timezone_set(): Timezone ID +00:00 is invalid
* Tweak: The status tab will no longer show turned-off settings as an error
* Tweak: Made some improvements to the "Update pending" emails, you can now see a list of all pending updates and go directly to the update page.
= 3.5.2 (April 1, 2020) =
* Fix: Not able to see checks in boxes
= 3.5.1 (March 25, 2020) =
* Tweak: You seem to like the new dashboard, we've fixed a few issues regarding the responsiveness of the design. We've also tweaked the icons to be a bit more transparant.
* Tweak: We've added the release notes link to Plain text emails
* Tweak: Fixed a few typos
* Tweak: Various minor security improvements
= 3.5.0 (March 5, 2020) =
* New: In version 3.4.6 we've changed to HTML emails rather than plain text, in this version you can opt to change it back to plain text emails
* Fix: We've 'fixed an issue where on occasion nothing would update
* Tweak: Made some improvements to the "Fix it" button for the AUTOMATIC_UPDATER_DISABLED error
* Tweak: We've changed the dashboard, moved both the settings page and de support page to the dashboard. Please let us know if you like this change or not.
* Bug: We've had to (temporarily) disable the theme filter because it was causing issues on some installations. We'll try to get it working again in a future update.
[View full changelog](https://codeermeneer.nl/stuffs/auto-updater-changelog/)

View File

@ -0,0 +1,116 @@
##### [Version 0.13.7](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.6...v0.13.7) (2023-08-17)
- Updated dependencies
- Fixed broken button layout issues in other languages
##### [Version 0.13.6](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.5...v0.13.6) (2023-07-07)
- Updated composer dependencies to address warning in the widgets section
##### [Version 0.13.5](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.4...v0.13.5) (2023-03-30)
- Updated Dependencies and WordPress core tested up to version 6.2
##### [Version 0.13.4](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.3...v0.13.4) (2023-03-01)
Update dependencies
##### [Version 0.13.3](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.2...v0.13.3) (2023-02-25)
- Fix img width/height value, props @Htbaa
- Update dependencies
##### [Version 0.13.2](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.1...v0.13.2) (2022-11-24)
* Fix - update dependencies
##### [Version 0.13.1](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.0...v0.13.1) (2022-11-04)
Tested with the WordPress 6.1 version
#### [Version 0.13.0](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.12...v0.13.0) (2022-08-23)
* Fix Neve upsells showing up inconsistently on edge cases
* Fix inconsistency with Font Awesome 5 and adds compatibility with 6th version
* Fix compatibility with JupiterX
* Update dependencies
##### [Version 0.12.12](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.11...v0.12.12) (2022-05-27)
- Fix the style handler conflict issue which breaks the arrow icon of the submenus on some themes
- Fix dismiss dashboard notice issue on some edge cases
- Fix compatibility with the Max Mega Menu plugin
##### [Version 0.12.11](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.10...v0.12.11) (2022-03-16)
Add font awesome 5 support
Enhance compatibility with Otter/Neve
##### [Version 0.12.10](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.9...v0.12.10) (2022-02-07)
- [Fix] Add support for alt attribute for SVG icons
- Tested up with WordPress 5.9
##### [Version 0.12.9](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.8...v0.12.9) (2021-08-04)
* Tested compatibility with WordPress 5.8
##### [Version 0.12.8](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.7...v0.12.8) (2021-05-12)
* Fix issue when the image is not accessible to fetch the width/height metadata.
##### [Version 0.12.7](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.6...v0.12.7) (2021-05-07)
Fix PHP fatal error when uploading SVG with the image uploader
##### [Version 0.12.6](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.5...v0.12.6) (2021-05-05)
* Adds explicit width/height to icons to prevent layout shifts issues
### v0.12.5 - 2020-08-18
**Changes:**
### v0.12.4 - 2020-07-13
**Changes:**
* Fix Font Awesome not loading
### v0.12.3 - 2020-07-13
**Changes:**
* Fixed Menu Icons in Block Editor not working
* Fixed CWP links.
### v0.12.2 - 2019-11-15
**Changes:**
### v0.12.1 - 2019-11-15
**Changes:**
* Improve legacy compatibility
### v0.12.0 - 2019-11-15
**Changes:**
* Fix issues with WordPress 5.3.
### v0.11.5 - 2019-05-23
**Changes:**
* Sync composer dependencies with the latest version
### v0.11.4 - 2018-12-10
**Changes:**
* fix issue with composer libraries.
### v0.11.3 - 2018-12-10
**Changes:**
* Tested with WP 5.0
### v0.11.2 - 2018-03-05
**Changes:**
* Improve popup sidebar layout.
### v0.11.1 - 2018-02-24
**Changes:**
* Add recommendation boxes in the menu icon popup.
### v0.11.0 - 2018-01-05
**Changes:**
* Change ownership to ThemeIsle.
* Improves compatibility with various ThemeIsle products.

View File

@ -0,0 +1,13 @@
## Releasing
This repository uses conventional [changelog commit](https://github.com/Codeinwp/conventional-changelog-simple-preset) messages to trigger release
How to release a new version:
- Clone the master branch
- Do your changes
- Send a PR to master and merge it using the following subject message
- `release: <release short description>` - for patch release
- `release(minor): <release short description>` - for minor release
- `release(major): <release short description>` - for major release
The release notes will inherit the body of the commit message which triggered the release. For more details check the [simple-preset](https://github.com/Codeinwp/conventional-changelog-simple-preset) that we use.

View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{description}
Copyright (C) {year} {fullname}
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -0,0 +1,246 @@
.menu-icons-wrap {
margin-top: 5px;
margin-bottom: 5px;
}
.menu-icons-wrap p {
min-height: 2.2em;
margin-bottom: 0;
}
.menu-icons-wrap p a,
.menu-icons-wrap p label {
display: inline-block;
height: 100%;
line-height: 2.2em;
vertical-align: middle;
}
.menu-icons-wrap a {
text-decoration: none;
cursor: pointer;
}
.menu-icons-wrap .submitdelete {
display: inline-block;
float: none;
height: 100%;
margin: 0;
padding: 0;
line-height: 2.2em;
}
.menu-icons-wrap .hidden {
display: none;
}
.menu-icons-wrap ._icon {
width: auto;
height: auto;
margin: -0.1em 0.2em 0 0.2em;
color: #666;
font-size: 1.9em;
vertical-align: middle;
}
.menu-icons-wrap img._icon {
max-width: 24px;
}
.menu-icons-wrap a._select:focus ._icon,
.menu-icons-wrap a._select:hover ._icon {
color: #101010;
}
.mi-preview.menu-item {
min-height: 0;
font-size: 1.2em;
}
.mi-preview.menu-item a {
text-decoration: none;
}
.mi-preview.menu-item a > * {
display: inline-block;
height: 100%;
line-height: 100%;
vertical-align: middle;
}
.mi-preview.menu-item ._icon {
margin-right: 0.25em;
}
.rtl .mi-preview.menu-item ._icon {
margin-right: 0;
}
.media-sidebar .mi-settings .setting input[type="number"],
.menu-icons-settings input[type="number"] {
float: none;
width: auto;
max-width: 5em;
}
.media-sidebar .mi-settings .setting input,
.media-sidebar .mi-settings span.description {
float: none;
}
/** Settings Meta Box **/
.menu-icons-settings ._field {
padding: 0.5em 0;
}
.menu-icons-settings ._field ._main {
display: block;
margin-bottom: 0.25em;
font-weight: bold;
}
#menu-settings-column .menu-icons-settings .inside {
margin-top: 0;
}
.menu-icons-settings .taxonomydiv .tabs-panel {
max-height: none;
margin-bottom: 0.75em;
padding-top: 0.3em;
padding-bottom: 0.4em;
}
.js .menu-icons-settings .taxonomydiv .tabs-panel {
margin-bottom: 0;
}
.menu-icons-settings h4 {
margin: 0;
}
.menu-icons-settings ._menu span.description {
margin-left: 0.5em;
}
.menu-icons-settings ._extensions ul {
margin-top: 0.75em;
padding-left: 1.5em;
list-style: disc;
}
.menu-icons-settings ._extensions ul a {
text-decoration: none;
}
.menu-icons-settings .spinner {
float: none;
margin: 0 5px 0 0;
vertical-align: middle;
}
.attachment .svg-icon img {
max-width: 100%;
}
.nv-upgrade-notice {
width: 90%;
margin-top: 0;
padding: 15px;
}
#menu-icons-sidebar div.new-card {
width: auto;
min-width: initial;
max-width: initial;
margin: 10px auto;
}
.menu-icons-subscribe {
padding: 15px;
}
.menu-icons-submit-mail {
width: auto;
}
#success {
display: none;
}
#failure {
display: none;
}
.attachments-browser.iconpicker-fonts-browser .media-toolbar {
width: 62%;
}
.attachments-browser.iconpicker-fonts-browser .attachments.iconpicker-items {
width: 64%;
}
.attachments-browser.iconpicker-fonts-browser .media-sidebar {
width: 32%;
}
.nv-upgrade-notice {
background: #FFFFFF;
border: 1px solid #E1E1E1;
box-sizing: border-box;
padding: 20px;
display: flex;
flex-wrap: wrap;
}
.nv-upgrade-notice .menu-icon-notice-popup-img {
width: 115px;
height: 100px;
background-color: #f1f1f1;
margin-right: 20px;
margin-bottom: 20px;
}
.nv-upgrade-notice .menu-icon-notice-popup-img img{
width: 100%;
height: 100%;
object-fit: cover;
}
.nv-upgrade-notice .menu-icon-notice-popup {
flex: 1;
}
.nv-upgrade-notice .menu-icon-notice-popup h4{
padding: 0;
margin: 0 0 8px;
font-weight: 590;
font-size: 14px;
line-height: 1.2;
color: #000000;
display: block;
width: 100%;
}
.nv-upgrade-notice .menu-icon-notice-popup p {
font-size: 13px;
line-height: 1.2;
color: #000000;
margin: 0 0 16px;
display: block;
padding: 0;
}
.nv-upgrade-notice .menu-icon-notice-popup .button {
width: auto;
height: 30px;
background: #0071AE;
border-radius: 4px;
padding: 5px 12px;
font-size: 13px;
line-height: 1.5;
color: #fff;
}
.nv-upgrade-notice .menu-icon-notice-popup .button:hover {
color: #fff;
}

View File

@ -0,0 +1 @@
.menu-icons-wrap{margin-top:5px;margin-bottom:5px}.menu-icons-wrap p{min-height:2.2em;margin-bottom:0}.menu-icons-wrap p a,.menu-icons-wrap p label{display:inline-block;height:100%;line-height:2.2em;vertical-align:middle}.menu-icons-wrap a{text-decoration:none;cursor:pointer}.menu-icons-wrap .submitdelete{display:inline-block;float:none;height:100%;margin:0;padding:0;line-height:2.2em}.menu-icons-wrap .hidden{display:none}.menu-icons-wrap ._icon{width:auto;height:auto;margin:-.1em .2em 0 .2em;color:#666;font-size:1.9em;vertical-align:middle}.menu-icons-wrap img._icon{max-width:24px}.menu-icons-wrap a._select:focus ._icon,.menu-icons-wrap a._select:hover ._icon{color:#101010}.mi-preview.menu-item{min-height:0;font-size:1.2em}.mi-preview.menu-item a{text-decoration:none}.mi-preview.menu-item a>*{display:inline-block;height:100%;line-height:100%;vertical-align:middle}.mi-preview.menu-item ._icon{margin-right:.25em}.rtl .mi-preview.menu-item ._icon{margin-right:0}.media-sidebar .mi-settings .setting input[type=number],.menu-icons-settings input[type=number]{float:none;width:auto;max-width:5em}.media-sidebar .mi-settings .setting input,.media-sidebar .mi-settings span.description{float:none}.menu-icons-settings ._field{padding:.5em 0}.menu-icons-settings ._field ._main{display:block;margin-bottom:.25em;font-weight:700}#menu-settings-column .menu-icons-settings .inside{margin-top:0}.menu-icons-settings .taxonomydiv .tabs-panel{max-height:none;margin-bottom:.75em;padding-top:.3em;padding-bottom:.4em}.js .menu-icons-settings .taxonomydiv .tabs-panel{margin-bottom:0}.menu-icons-settings h4{margin:0}.menu-icons-settings ._menu span.description{margin-left:.5em}.menu-icons-settings ._extensions ul{margin-top:.75em;padding-left:1.5em;list-style:disc}.menu-icons-settings ._extensions ul a{text-decoration:none}.menu-icons-settings .spinner{float:none;margin:0 5px 0 0;vertical-align:middle}.attachment .svg-icon img{max-width:100%}.nv-upgrade-notice{width:90%;margin-top:0;padding:15px}#menu-icons-sidebar div.new-card{width:auto;min-width:initial;max-width:initial;margin:10px auto}.menu-icons-subscribe{padding:15px}.menu-icons-submit-mail{width:auto}#success{display:none}#failure{display:none}.attachments-browser.iconpicker-fonts-browser .media-toolbar{width:62%}.attachments-browser.iconpicker-fonts-browser .attachments.iconpicker-items{width:64%}.attachments-browser.iconpicker-fonts-browser .media-sidebar{width:32%}.nv-upgrade-notice{background:#fff;border:1px solid #e1e1e1;box-sizing:border-box;padding:20px;display:flex;flex-wrap:wrap}.nv-upgrade-notice .menu-icon-notice-popup-img{width:115px;height:100px;background-color:#f1f1f1;margin-right:20px;margin-bottom:20px}.nv-upgrade-notice .menu-icon-notice-popup-img img{width:100%;height:100%;object-fit:cover}.nv-upgrade-notice .menu-icon-notice-popup{flex:1}.nv-upgrade-notice .menu-icon-notice-popup h4{padding:0;margin:0 0 8px;font-weight:590;font-size:14px;line-height:1.2;color:#000;display:block;width:100%}.nv-upgrade-notice .menu-icon-notice-popup p{font-size:13px;line-height:1.2;color:#000;margin:0 0 16px;display:block;padding:0}.nv-upgrade-notice .menu-icon-notice-popup .button{width:auto;height:30px;background:#0071ae;border-radius:4px;padding:5px 12px;font-size:13px;line-height:1.5;color:#fff}.nv-upgrade-notice .menu-icon-notice-popup .button:hover{color:#fff}

View File

@ -0,0 +1,45 @@
.menu-icon-dashboard-notice {
position: relative;
background: #FFFFFF;
border: 1px solid #E1E1E1;
box-sizing: border-box;
padding: 24px;
border-left: 4px solid #72AEE6;
margin: 0 0 30px;
}
.menu-icon-dashboard-notice h2 {
padding: 0;
margin: 0 0 8px;
font-weight: bold;
font-size: 18px;
line-height: 1.2;
color: #000000;
}
.menu-icon-dashboard-notice p {
font-size: 12px;
line-height: 1.2;
color: #000000;
display: block;
margin-bottom: 16px;
}
.menu-icon-dashboard-notice .button {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 5px 12px;
background: #0071AE;
border-radius: 4px;
display: inline-block;
width: auto;
height: 30px;
color: #FFFFFF;
font-size: 13px;
line-height: 1.5;
}
.menu-icon-dashboard-notice .notice-dismiss {
text-decoration: none;
}

View File

@ -0,0 +1 @@
.menu-icon-dashboard-notice{position:relative;background:#fff;border:1px solid #e1e1e1;box-sizing:border-box;padding:24px;border-left:4px solid #72aee6;margin:0 0 30px}.menu-icon-dashboard-notice h2{padding:0;margin:0 0 8px;font-weight:700;font-size:18px;line-height:1.2;color:#000}.menu-icon-dashboard-notice p{font-size:12px;line-height:1.2;color:#000;display:block;margin-bottom:16px}.menu-icon-dashboard-notice .button{display:flex;flex-direction:row;justify-content:center;align-items:center;padding:5px 12px;background:#0071ae;border-radius:4px;display:inline-block;width:auto;height:30px;color:#fff;font-size:13px;line-height:1.5}.menu-icon-dashboard-notice .notice-dismiss{text-decoration:none}

View File

@ -0,0 +1,74 @@
.menu-item i._mi,
.menu-item img._mi {
display: inline-block;
vertical-align: middle;
}
.menu-item i._mi {
width: auto;
height: auto;
margin-top: -0.265em;
font-size: 1.2em;
line-height: 1;
}
.menu-item i._before,
.rtl .menu-item i._after {
margin-right: 0.25em;
}
.menu-item i._after,
.rtl .menu-item i._before {
margin-left: 0.25em;
}
.menu-item img._before,
.rtl .menu-item img._after {
margin-right: 0.5em;
}
.menu-item img._after,
.rtl .menu-item img._before {
margin-left: 0.5em;
}
.menu-item ._svg {
width: 1em;
}
.rtl .menu-item i._before {
margin-right: 0;
}
.rtl .menu-item i._after {
margin-left: 0;
}
.visuallyhidden {
overflow: hidden;
clip: rect(0 0 0 0);
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
border: 0;
}
.menu-item i.elusive {
margin-top: -0.3em;
}
/**
* Force the icons' styles
*
* Some themes -- notably 2014 -- has nasty rules that
* could override the icons' styles so we need to force them here.
*/
.dashicons-admin-site:before {
content: "\f319" !important;
}
.dashicons-welcome-view-site:before {
content: "\f115" !important;
}

View File

@ -0,0 +1 @@
.menu-item i._mi,.menu-item img._mi{display:inline-block;vertical-align:middle}.menu-item i._mi{width:auto;height:auto;margin-top:-.265em;font-size:1.2em;line-height:1}.menu-item i._before,.rtl .menu-item i._after{margin-right:.25em}.menu-item i._after,.rtl .menu-item i._before{margin-left:.25em}.menu-item img._before,.rtl .menu-item img._after{margin-right:.5em}.menu-item img._after,.rtl .menu-item img._before{margin-left:.5em}.menu-item ._svg{width:1em}.rtl .menu-item i._before{margin-right:0}.rtl .menu-item i._after{margin-left:0}.visuallyhidden{overflow:hidden;clip:rect(0 0 0 0);position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0}.menu-item i.elusive{margin-top:-.3em}.dashicons-admin-site:before{content:"\f319"!important}.dashicons-welcome-view-site:before{content:"\f115"!important}

View File

@ -0,0 +1,34 @@
Font Awesome Free License
-------------------------
Font Awesome Free is free, open source, and GPL friendly. You can use it for
commercial projects, open source projects, or really almost whatever you want.
Full Font Awesome Free license: https://fontawesome.com/license/free.
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
packaged as SVG and JS file types.
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
In the Font Awesome Free download, the SIL OFL license applies to all icons
packaged as web and desktop font files.
# Code: MIT License (https://opensource.org/licenses/MIT)
In the Font Awesome Free download, the MIT license applies to all non-font and
non-icon files.
# Attribution
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
Awesome Free files already contain embedded comments with sufficient
attribution, so you shouldn't need to do anything additional when using these
files normally.
We've kept attribution comments terse, so we ask that you do not actively work
to remove them from files, especially code. They're a great way for folks to
learn about Font Awesome.
# Brand Icons
All brand icons are trademarks of their respective owners. The use of these
trademarks does not indicate endorsement of the trademark holder by Font
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
to represent the company, product, or service to which they refer.**

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,514 @@
<?php
/**
* Front end functionalities
*
* @package Menu_Icons
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
final class Menu_Icons_Front_End {
/**
* Icon types
*
* @since 0.9.0
* @access protected
* @var array
*/
protected static $icon_types = array();
/**
* Default icon style
*
* @since 0.9.0
* @access protected
* @var array
*/
protected static $default_style = array(
'font_size' => array(
'property' => 'font-size',
'value' => '1.2',
'unit' => 'em',
),
'vertical_align' => array(
'property' => 'vertical-align',
'value' => 'middle',
'unit' => null,
),
'svg_width' => array(
'property' => 'width',
'value' => '1',
'unit' => 'em',
),
);
/**
* Hidden label class
*
* @since 0.9.0
* @access protected
* @var string
*/
protected static $hidden_label_class = 'visuallyhidden';
/**
* Add hooks for front-end functionalities
*
* @since 0.9.0
*/
public static function init() {
$active_types = Menu_Icons_Settings::get( 'global', 'icon_types' );
if ( empty( $active_types ) ) {
return;
}
foreach ( Menu_Icons::get( 'types' ) as $type ) {
if ( in_array( $type->id, $active_types, true ) ) {
self::$icon_types[ $type->id ] = $type;
}
}
/**
* Allow themes/plugins to override the hidden label class
*
* @since 0.8.0
* @param string $hidden_label_class Hidden label class.
* @return string
*/
self::$hidden_label_class = apply_filters( 'menu_icons_hidden_label_class', self::$hidden_label_class );
/**
* Allow themes/plugins to override default inline style
*
* @since 0.9.0
* @param array $default_style Default inline style.
* @return array
*/
self::$default_style = apply_filters( 'menu_icons_default_style', self::$default_style );
add_action( 'wp_enqueue_scripts', array( __CLASS__, '_enqueue_styles' ), 4 );
add_filter( 'wp_nav_menu_args', array( __CLASS__, '_add_menu_item_title_filter' ) );
add_filter( 'wp_nav_menu', array( __CLASS__, '_remove_menu_item_title_filter' ) );
}
/**
* Get nav menu ID based on arguments passed to wp_nav_menu()
*
* @since 0.3.0
* @param array $args wp_nav_menu() Arguments
* @return mixed Nav menu ID or FALSE on failure
*/
public static function get_nav_menu_id( $args ) {
$args = (object) $args;
$menu = wp_get_nav_menu_object( $args->menu );
// Get the nav menu based on the theme_location
if ( ! $menu
&& $args->theme_location
&& ( $locations = get_nav_menu_locations() )
&& isset( $locations[ $args->theme_location ] )
) {
$menu = wp_get_nav_menu_object( $locations[ $args->theme_location ] );
}
// get the first menu that has items if we still can't find a menu
if ( ! $menu && ! $args->theme_location ) {
$menus = wp_get_nav_menus();
foreach ( $menus as $menu_maybe ) {
if ( $menu_items = wp_get_nav_menu_items( $menu_maybe->term_id, array( 'update_post_term_cache' => false ) ) ) {
$menu = $menu_maybe;
break;
}
}
}
if ( is_object( $menu ) && ! is_wp_error( $menu ) ) {
return $menu->term_id;
} else {
return false;
}
}
/**
* Enqueue stylesheets
*
* @since 0.1.0
* @wp_hook action wp_enqueue_scripts
* @link http://codex.wordpress.org/Plugin_API/Action_Reference/wp_enqueue_scripts
*/
public static function _enqueue_styles() {
// Deregister icon picker plugin font-awesome style and re-register with the new handler to avoid other plugin/theme style handler conflict.
$wp_styles = wp_styles();
if ( $wp_styles && isset( $wp_styles->registered['font-awesome'] ) ) {
$registered = $wp_styles->registered['font-awesome'];
if ( strpos( $registered->src, Menu_Icons::get( 'url' ) ) !== false ) {
$wp_styles->remove( 'font-awesome' );
$registered->ver = Menu_Icons_Font_Awesome::$version;
$wp_styles->add( 'menu-icon-' . $registered->handle, $registered->src, $registered->deps, $registered->ver, $registered->args );
}
}
foreach ( self::$icon_types as $type ) {
$stylesheet_id = $type->stylesheet_id;
if ( 'font-awesome' === $stylesheet_id ) {
$stylesheet_id = 'menu-icon-' . $stylesheet_id;
}
if ( wp_style_is( $stylesheet_id, 'registered' ) ) {
wp_enqueue_style( $stylesheet_id );
}
}
/**
* Allow plugins/themes to override the extra stylesheet location
*
* @since 0.9.0
* @param string $extra_stylesheet_uri Extra stylesheet URI.
*/
$extra_stylesheet_uri = apply_filters(
'menu_icons_extra_stylesheet_uri',
sprintf( '%scss/extra%s.css', Menu_Icons::get( 'url' ), kucrut_get_script_suffix() )
);
wp_enqueue_style(
'menu-icons-extra',
$extra_stylesheet_uri,
false,
Menu_Icons::VERSION
);
}
/**
* Add filter to 'the_title' hook
*
* We need to filter the menu item title but **not** regular post titles.
* Thus, we're adding the filter when `wp_nav_menu()` is called.
*
* @since 0.1.0
* @wp_hook filter wp_nav_menu_args
* @param array $args Not used.
*
* @return array
*/
public static function _add_menu_item_title_filter( $args ) {
add_filter( 'the_title', array( __CLASS__, '_add_icon' ), 999, 2 );
add_filter( 'megamenu_the_title', array( __CLASS__, '_add_icon' ), 999, 2 );
add_filter( 'megamenu_nav_menu_css_class', array( __CLASS__, '_add_menu_item_class' ), 10, 3 );
return $args;
}
/**
* Remove filter from 'the_title' hook
*
* Because we don't want to filter post titles, we need to remove our
* filter when `wp_nav_menu()` exits.
*
* @since 0.1.0
* @wp_hook filter wp_nav_menu
* @param array $nav_menu Not used.
* @return array
*/
public static function _remove_menu_item_title_filter( $nav_menu ) {
remove_filter( 'the_title', array( __CLASS__, '_add_icon' ), 999, 2 );
remove_filter( 'megamenu_the_title', array( __CLASS__, '_add_icon' ), 999, 2 );
remove_filter( 'megamenu_nav_menu_css_class', array( __CLASS__, '_add_menu_item_class' ), 10, 3 );
return $nav_menu;
}
/**
* Add icon to menu item title
*
* @since 0.1.0
* @since 0.9.0 Renamed the method to `add_icon()`.
* @wp_hook filter the_title
* @param string $title Menu item title.
* @param int $id Menu item ID.
*
* @return string
*/
public static function _add_icon( $title, $id ) {
$meta = Menu_Icons_Meta::get( $id );
$icon = self::get_icon( $meta );
if ( empty( $icon ) ) {
return $title;
}
$title_class = ! empty( $meta['hide_label'] ) ? self::$hidden_label_class : '';
$title_wrapped = sprintf(
'<span%s>%s</span>',
( ! empty( $title_class ) ) ? sprintf( ' class="%s"', esc_attr( $title_class ) ) : '',
$title
);
if ( 'after' === $meta['position'] ) {
$title_with_icon = "{$title_wrapped}{$icon}";
} else {
$title_with_icon = "{$icon}{$title_wrapped}";
}
/**
* Allow plugins/themes to override menu item markup
*
* @since 0.8.0
*
* @param string $title_with_icon Menu item markup after the icon is added.
* @param integer $id Menu item ID.
* @param array $meta Menu item metadata values.
* @param string $title Original menu item title.
*
* @return string
*/
$title_with_icon = apply_filters( 'menu_icons_item_title', $title_with_icon, $id, $meta, $title );
return $title_with_icon;
}
/**
* Get icon
*
* @since 0.9.0
* @param array $meta Menu item meta value.
* @return string
*/
public static function get_icon( $meta ) {
$icon = '';
// Icon type is not set.
if ( empty( $meta['type'] ) ) {
return $icon;
}
// Icon is not set.
if ( empty( $meta['icon'] ) ) {
return $icon;
}
// Icon type is not registered/enabled.
if ( ! isset( self::$icon_types[ $meta['type'] ] ) ) {
return $icon;
}
$type = self::$icon_types[ $meta['type'] ];
$callbacks = array(
array( $type, 'get_icon' ),
array( __CLASS__, "get_{$type->id}_icon" ),
array( __CLASS__, "get_{$type->template_id}_icon" ),
);
foreach ( $callbacks as $callback ) {
if ( is_callable( $callback ) ) {
$icon = call_user_func( $callback, $meta );
break;
}
}
return $icon;
}
/**
* Get icon style
*
* @since 0.9.0
* @param array $meta Menu item meta value.
* @param array $keys Style properties.
* @param bool $as_attribute Optional. Whether to output the style as HTML attribute or value only.
* Defaults to TRUE.
* @return string
*/
public static function get_icon_style( $meta, $keys, $as_attribute = true ) {
$style_a = array();
$style_s = '';
foreach ( $keys as $key ) {
if ( ! isset( self::$default_style[ $key ] ) ) {
continue;
}
$rule = self::$default_style[ $key ];
if ( ! isset( $meta[ $key ] ) || $meta[ $key ] === $rule['value'] ) {
continue;
}
$value = $meta[ $key ];
if ( ! empty( $rule['unit'] ) ) {
$value .= $rule['unit'];
}
$style_a[ $rule['property'] ] = $value;
}
if ( empty( $style_a ) ) {
return $style_s;
}
foreach ( $style_a as $key => $value ) {
$style_s .= "{$key}:{$value};";
}
$style_s = esc_attr( $style_s );
if ( $as_attribute ) {
$style_s = sprintf( ' style="%s"', $style_s );
}
return $style_s;
}
/**
* Get icon classes
*
* @since 0.9.0
* @param array $meta Menu item meta value.
* @param string $output Whether to output the classes as string or array. Defaults to string.
* @return string|array
*/
public static function get_icon_classes( $meta, $output = 'string' ) {
$classes = array( '_mi' );
if ( empty( $meta['hide_label'] ) ) {
$classes[] = "_{$meta['position']}";
}
if ( 'string' === $output ) {
$classes = implode( ' ', $classes );
}
return $classes;
}
/**
* Get font icon
*
* @since 0.9.0
* @param array $meta Menu item meta value.
* @return string
*/
public static function get_font_icon( $meta ) {
$type = $meta['type'];
$icon = $meta['icon'];
$font_awesome5 = font_awesome_backward_compatible();
if ( ! empty( $type ) && 'fa' === $type ) {
$icon = explode( ' ', $icon );
$type = reset( $icon );
$icon = end( $icon );
$fa_icon = sprintf( '%s-%s', $type, $icon );
if ( array_key_exists( $fa_icon, $font_awesome5 ) ) {
$fa5_icon = $font_awesome5[ $fa_icon ];
$fa5_class = explode( ' ', $fa5_icon );
$type = reset( $fa5_class );
$icon = end( $fa5_class );
}
}
$classes = sprintf( '%s %s %s', self::get_icon_classes( $meta ), $type, $icon );
$style = self::get_icon_style( $meta, array( 'font_size', 'vertical_align' ) );
return sprintf( '<i class="%s" aria-hidden="true"%s></i>', esc_attr( $classes ), $style );
}
/**
* Get image icon
*
* @since 0.9.0
* @param array $meta Menu item meta value.
* @return string
*/
public static function get_image_icon( $meta ) {
$args = array(
'class' => sprintf( '%s _image', self::get_icon_classes( $meta ) ),
'aria-hidden' => 'true',
);
$style = self::get_icon_style( $meta, array( 'vertical_align' ), false );
if ( ! empty( $style ) ) {
$args['style'] = $style;
}
return wp_get_attachment_image( $meta['icon'], $meta['image_size'], false, $args );
}
/**
* Get SVG icon
*
* @since 0.9.0
* @param array $meta Menu item meta value.
* @return string
*/
public static function get_svg_icon( $meta ) {
$classes = sprintf( '%s _svg', self::get_icon_classes( $meta ) );
$style = self::get_icon_style( $meta, array( 'svg_width', 'vertical_align' ) );
$svg_icon = esc_url( wp_get_attachment_url( $meta['icon'] ) );
$width = '';
$height = '';
if ( 'image/svg+xml' === get_post_mime_type( $meta['icon'] ) ) {
// Check `WP_Filesystem` function exists OR not.
require_once ABSPATH . '/wp-admin/includes/file.php';
\WP_Filesystem();
global $wp_filesystem;
$svg_icon = get_attached_file( $meta['icon'] );
$svg_icon_content = $wp_filesystem->get_contents( $svg_icon );
if ( $svg_icon_content ) {
$xmlget = simplexml_load_string( $svg_icon_content );
$xmlattributes = $xmlget->attributes();
$width = (string) $xmlattributes->width;
$width = (int) filter_var( $xmlattributes->width, FILTER_SANITIZE_NUMBER_INT );
$height = (string) $xmlattributes->height;
$height = (int) filter_var( $xmlattributes->height, FILTER_SANITIZE_NUMBER_INT );
}
} else {
$attachment_meta = wp_get_attachment_metadata( $meta['icon'] );
if ( $attachment_meta ) {
$width = isset( $attachment_meta['width'] ) ? $attachment_meta['width'] : $width;
$height = isset( $attachment_meta['height'] ) ? $attachment_meta['height'] : $height;
}
}
if ( ! empty( $width ) ) {
$width = sprintf( ' width="%d"', $width );
}
if ( ! empty( $height ) ) {
$height = sprintf( ' height="%d"', $height );
}
$image_alt = get_post_meta( $meta['icon'], '_wp_attachment_image_alt', true );
$image_alt = $image_alt ? wp_strip_all_tags( $image_alt ) : '';
return sprintf(
'<img src="%s" class="%s" aria-hidden="true" alt="%s"%s%s%s/>',
esc_url( wp_get_attachment_url( $meta['icon'] ) ),
esc_attr( $classes ),
$image_alt,
$width,
$height,
$style
);
}
/**
* Add menu item class in `Max Mega Menu` item.
*
* @param array $classes Item classes.
* @param array $item WP menu item.
* @param object $args Menu object.
* @return array
*/
public static function _add_menu_item_class( $classes, $item, $args ) { // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
$classes[] = 'menu-item';
return $classes;
}
}

View File

@ -0,0 +1,23 @@
<?php
/**
* Misc. functions for backward-compatibility.
*/
if ( ! function_exists( 'wp_get_attachment_image_url' ) ) {
/**
* Get the URL of an image attachment.
*
* @since 4.4.0
*
* @param int $attachment_id Image attachment ID.
* @param string|array $size Optional. Image size to retrieve. Accepts any valid image size, or an array
* of width and height values in pixels (in that order). Default 'thumbnail'.
* @param bool $icon Optional. Whether the image should be treated as an icon. Default false.
* @return string|false Attachment URL or false if no image is available.
*/
function wp_get_attachment_image_url( $attachment_id, $size = 'thumbnail', $icon = false ) {
$image = wp_get_attachment_image_src( $attachment_id, $size, $icon );
return isset( $image['0'] ) ? $image['0'] : false;
}
}

View File

@ -0,0 +1,484 @@
<?php
/**
* Font awesome 5 helper functions
*
* @package Menu_Icons
*/
// phpcs:disable WordPress.Arrays.MultipleStatementAlignment.DoubleArrowNotAligned
if ( ! function_exists( 'font_awesome_backward_compatible' ) ) {
/**
* Font awesome 5 backward compatible.
*
* @return array
*/
function font_awesome_backward_compatible() {
$font_awesome_icon = array(
'fa-fa-500px' => 'fab fa-500px',
'fa-fa-address-book-o' => 'far fa-address-book',
'fa-fa-address-card-o' => 'far fa-address-card',
'fa-fa-adn' => 'fab fa-adn',
'fa-fa-amazon' => 'fab fa-amazon',
'fa-fa-android' => 'fab fa-android',
'fa-fa-angellist' => 'fab fa-angellist',
'fa-fa-apple' => 'fab fa-apple',
'fa-fa-area-chart' => 'fas fa-chart-area',
'fa-fa-arrow-circle-o-down' => 'far fa-arrow-alt-circle-down',
'fa-fa-arrow-circle-o-left' => 'far fa-arrow-alt-circle-left',
'fa-fa-arrow-circle-o-right' => 'far fa-arrow-alt-circle-right',
'fa-fa-arrow-circle-o-up' => 'far fa-arrow-alt-circle-up',
'fa-fa-arrows-alt' => 'fas fa-expand-arrows-alt',
'fa-fa-arrows-h' => 'fas fa-arrows-alt-h',
'fa-fa-arrows-v' => 'fas fa-arrows-alt-v',
'fa-fa-arrows' => 'fas fa-arrows-alt',
'fa-fa-asl-interpreting' => 'fas fa-american-sign-language-interpreting',
'fa-fa-automobile' => 'fas fa-car',
'fa-fa-bandcamp' => 'fab fa-bandcamp',
'fa-fa-bank' => 'fas fa-university',
'fa-fa-bar-chart-o' => 'far fa-chart-bar',
'fa-fa-bar-chart' => 'far fa-chart-bar',
'fa-fa-bathtub' => 'fas fa-bath',
'fa-fa-battery-0' => 'fas fa-battery-empty',
'fa-fa-battery-1' => 'fas fa-battery-quarter',
'fa-fa-battery-2' => 'fas fa-battery-half',
'fa-fa-battery-3' => 'fas fa-battery-three-quarters',
'fa-fa-battery-4' => 'fas fa-battery-full',
'fa-fa-battery' => 'fas fa-battery-full',
'fa-fa-behance' => 'fab fa-behance',
'fa-fa-behance-square' => 'fab fa-behance-square',
'fa-fa-bell-o' => 'far fa-bell',
'fa-fa-bell-slash-o' => 'far fa-bell-slash',
'fa-fa-bitbucket-square' => 'fab fa-bitbucket',
'fa-fa-bitbucket' => 'fab fa-bitbucket',
'fa-fa-bitcoin' => 'fab fa-btc',
'fa-fa-black-tie' => 'fab fa-black-tie',
'fa-fa-bluetooth-b' => 'fab fa-bluetooth-b',
'fa-fa-bluetooth' => 'fab fa-bluetooth',
'fa-fa-bookmark-o' => 'far fa-bookmark',
'fa-fa-btc' => 'fab fa-btc',
'fa-fa-building-o' => 'far fa-building',
'fa-fa-buysellads' => 'fab fa-buysellads',
'fa-fa-cab' => 'fas fa-taxi',
'fa-fa-calendar-check-o' => 'far fa-calendar-check',
'fa-fa-calendar-minus-o' => 'far fa-calendar-minus',
'fa-fa-calendar-o' => 'far fa-calendar',
'fa-fa-calendar-plus-o' => 'far fa-calendar-plus',
'fa-fa-calendar-times-o' => 'far fa-calendar-times',
'fa-fa-calendar' => 'fas fa-calendar-alt',
'fa-fa-caret-square-o-down' => 'far fa-caret-square-down',
'fa-fa-caret-square-o-left' => 'far fa-caret-square-left',
'fa-fa-caret-square-o-right' => 'far fa-caret-square-right',
'fa-fa-caret-square-o-up' => 'far fa-caret-square-up',
'fa-fa-cc-amex' => 'fab fa-cc-amex',
'fa-fa-cc-diners-club' => 'fab fa-cc-diners-club',
'fa-fa-cc-discover' => 'fab fa-cc-discover',
'fa-fa-cc-jcb' => 'fab fa-cc-jcb',
'fa-fa-cc-mastercard' => 'fab fa-cc-mastercard',
'fa-fa-cc-paypal' => 'fab fa-cc-paypal',
'fa-fa-cc-stripe' => 'fab fa-cc-stripe',
'fa-fa-cc-visa' => 'fab fa-cc-visa',
'fa-fa-cc' => 'far fa-closed-captioning',
'fa-fa-chain-broken' => 'fas fa-unlink',
'fa-fa-chain' => 'fas fa-link',
'fa-fa-check-circle-o' => 'far fa-check-circle',
'fa-fa-check-square-o' => 'far fa-check-square',
'fa-fa-chrome' => 'fab fa-chrome',
'fa-fa-circle-o-notch' => 'fas fa-circle-notch',
'fa-fa-circle-o' => 'far fa-circle',
'fa-fa-circle-thin' => 'far fa-circle',
'fa-fa-clipboard' => 'far fa-clipboard',
'fa-fa-clock-o' => 'far fa-clock',
'fa-fa-clone' => 'far fa-clone',
'fa-fa-close' => 'fas fa-times',
'fa-fa-cloud-download' => 'fas fa-cloud-download-alt',
'fa-fa-cloud-upload' => 'fas fa-cloud-upload-alt',
'fa-fa-cny' => 'fas fa-yen-sign',
'fa-fa-code-fork' => 'fas fa-code-branch',
'fa-fa-codepen' => 'fab fa-codepen',
'fa-fa-codiepie' => 'fab fa-codiepie',
'fa-fa-comment-o' => 'far fa-comment',
'fa-fa-commenting-o' => 'far fa-comment-dots',
'fa-fa-commenting' => 'fas fa-comment-dots',
'fa-fa-comments-o' => 'far fa-comments',
'fa-fa-compass' => 'far fa-compass',
'fa-fa-connectdevelop' => 'fab fa-connectdevelop',
'fa-fa-contao' => 'fab fa-contao',
'fa-fa-copyright' => 'far fa-copyright',
'fa-fa-creative-commons' => 'fab fa-creative-commons',
'fa-fa-credit-card-alt' => 'fas fa-credit-card',
'fa-fa-credit-card' => 'far fa-credit-card',
'fa-fa-css3' => 'fab fa-css3',
'fa-fa-cutlery' => 'fas fa-utensils',
'fa-fa-dashboard' => 'fas fa-tachometer-alt',
'fa-fa-dashcube' => 'fab fa-dashcube',
'fa-fa-deafness' => 'fas fa-deaf',
'fa-fa-dedent' => 'fas fa-outdent',
'fa-fa-delicious' => 'fab fa-delicious',
'fa-fa-deviantart' => 'fab fa-deviantart',
'fa-fa-diamond' => 'far fa-gem',
'fa-fa-digg' => 'fab fa-digg',
'fa-fa-dollar' => 'fas fa-dollar-sign',
'fa-fa-dot-circle-o' => 'far fa-dot-circle',
'fa-fa-dribbble' => 'fab fa-dribbble',
'fa-fa-drivers-license-o' => 'far fa-id-card',
'fa-fa-drivers-license' => 'fas fa-id-card',
'fa-fa-dropbox' => 'fab fa-dropbox',
'fa-fa-drupal' => 'fab fa-drupal',
'fa-fa-edge' => 'fab fa-edge',
'fa-fa-eercast' => 'fab fa-sellcast',
'fa-fa-empire' => 'fab fa-empire',
'fa-fa-envelope-open-o' => 'far fa-envelope-open',
'fa-fa-envelope-o' => 'far fa-envelope',
'fa-fa-envira' => 'fab fa-envira',
'fa-fa-etsy' => 'fab fa-etsy',
'fa-fa-euro' => 'fas fa-euro-sign',
'fa-fa-eur' => 'fas fa-euro-sign',
'fa-fa-exchange' => 'fas fa-exchange-alt',
'fa-fa-expeditedssl' => 'fab fa-expeditedssl',
'fa-fa-external-link-square' => 'fas fa-external-link-square-alt',
'fa-fa-external-link' => 'fas fa-external-link-alt',
'fa-fa-eye-slash' => 'far fa-eye-slash',
'fa-fa-eyedropper' => 'fas fa-eye-dropper',
'fa-fa-eye' => 'far fa-eye',
'fa-fa-facebook-f' => 'fab fa-facebook-f',
'fa-fa-facebook-official' => 'fab fa-facebook',
'fa-fa-facebook-square' => 'fab fa-facebook-square',
'fa-fa-facebook' => 'fab fa-facebook-f',
'fa-fa-feed' => 'fas fa-rss',
'fa-fa-file-archive-o' => 'far fa-file-archive',
'fa-fa-file-audio-o' => 'far fa-file-audio',
'fa-fa-file-code-o' => 'far fa-file-code',
'fa-fa-file-excel-o' => 'far fa-file-excel',
'fa-fa-file-image-o' => 'far fa-file-image',
'fa-fa-file-movie-o' => 'far fa-file-video',
'fa-fa-file-o' => 'far fa-file',
'fa-fa-file-pdf-o' => 'far fa-file-pdf',
'fa-fa-file-photo-o' => 'far fa-file-image',
'fa-fa-file-picture-o' => 'far fa-file-image',
'fa-fa-file-powerpoint-o' => 'far fa-file-powerpoint',
'fa-fa-file-sound-o' => 'far fa-file-audio',
'fa-fa-file-text-o' => 'far fa-file-alt',
'fa-fa-file-text' => 'fas fa-file-alt',
'fa-fa-file-video-o' => 'far fa-file-video',
'fa-fa-file-word-o' => 'far fa-file-word',
'fa-fa-file-zip-o' => 'far fa-file-archive',
'fa-fa-files-o' => 'far fa-copy',
'fa-fa-firefox' => 'fab fa-firefox',
'fa-fa-first-order' => 'fab fa-first-order',
'fa-fa-flag-o' => 'far fa-flag',
'fa-fa-flash' => 'fas fa-bolt',
'fa-fa-flickr' => 'fab fa-flickr',
'fa-fa-floppy-o' => 'far fa-save',
'fa-fa-folder-o' => 'far fa-folder',
'fa-fa-folder-open-o' => 'far fa-folder-open',
'fa-fa-font-awesome' => 'fab fa-font-awesome',
'fa-fa-fonticons' => 'fab fa-fonticons',
'fa-fa-fort-awesome' => 'fab fa-fort-awesome',
'fa-fa-forumbee' => 'fab fa-forumbee',
'fa-fa-foursquare' => 'fab fa-foursquare',
'fa-fa-free-code-camp' => 'fab fa-free-code-camp',
'fa-fa-frown-o' => 'far fa-frown',
'fa-fa-futbol-o' => 'far fa-futbol',
'fa-fa-gbp' => 'fas fa-pound-sign',
'fa-fa-gears' => 'fas fa-cogs',
'fa-fa-gear' => 'fas fa-cog',
'fa-fa-get-pocket' => 'fab fa-get-pocket',
'fa-fa-ge' => 'fab fa-empire',
'fa-fa-gg-circle' => 'fab fa-gg-circle',
'fa-fa-gg' => 'fab fa-gg',
'fa-fa-git-square' => 'fab fa-git-square',
'fa-fa-github-alt' => 'fab fa-github-alt',
'fa-fa-github-square' => 'fab fa-github-square',
'fa-fa-github' => 'fab fa-github',
'fa-fa-gitlab' => 'fab fa-gitlab',
'fa-fa-gittip' => 'fab fa-gratipay',
'fa-fa-git' => 'fab fa-git',
'fa-fa-glass' => 'fas fa-glass-martini',
'fa-fa-glide-g' => 'fab fa-glide-g',
'fa-fa-glide' => 'fab fa-glide',
'fa-fa-google-plus-circle' => 'fab fa-google-plus',
'fa-fa-google-plus-official' => 'fab fa-google-plus',
'fa-fa-google-plus-square' => 'fab fa-google-plus-square',
'fa-fa-google-plus' => 'fab fa-google-plus-g',
'fa-fa-google-wallet' => 'fab fa-google-wallet',
'fa-fa-google' => 'fab fa-google',
'fa-fa-gratipay' => 'fab fa-gratipay',
'fa-fa-grav' => 'fab fa-grav',
'fa-fa-group' => 'fas fa-users',
'fa-fa-hacker-news' => 'fab fa-hacker-news',
'fa-fa-hand-grab-o' => 'far fa-hand-rock',
'fa-fa-hand-lizard-o' => 'far fa-hand-lizard',
'fa-fa-hand-o-down' => 'far fa-hand-point-down',
'fa-fa-hand-o-left' => 'far fa-hand-point-left',
'fa-fa-hand-o-right' => 'far fa-hand-point-right',
'fa-fa-hand-o-up' => 'far fa-hand-point-up',
'fa-fa-hand-paper-o' => 'far fa-hand-paper',
'fa-fa-hand-peace-o' => 'far fa-hand-peace',
'fa-fa-hand-pointer-o' => 'far fa-hand-pointer',
'fa-fa-hand-rock-o' => 'far fa-hand-rock',
'fa-fa-hand-scissors-o' => 'far fa-hand-scissors',
'fa-fa-hand-spock-o' => 'far fa-hand-spock',
'fa-fa-hand-stop-o' => 'far fa-hand-paper',
'fa-fa-handshake-o' => 'far fa-handshake',
'fa-fa-hard-of-hearing' => 'fas fa-deaf',
'fa-fa-hdd-o' => 'far fa-hdd',
'fa-fa-header' => 'fas fa-heading',
'fa-fa-heart-o' => 'far fa-heart',
'fa-fa-hospital-o' => 'far fa-hospital',
'fa-fa-hotel' => 'fas fa-bed',
'fa-fa-hourglass-1' => 'fas fa-hourglass-start',
'fa-fa-hourglass-2' => 'fas fa-hourglass-half',
'fa-fa-hourglass-3' => 'fas fa-hourglass-end',
'fa-fa-hourglass-o' => 'far fa-hourglass',
'fa-fa-houzz' => 'fab fa-houzz',
'fa-fa-html5' => 'fab fa-html5',
'fa-fa-id-badge' => 'far fa-id-badge',
'fa-fa-id-card-o' => 'far fa-id-card',
'fa-fa-ils' => 'fas fa-shekel-sign',
'fa-fa-image' => 'far fa-image',
'fa-fa-imdb' => 'fab fa-imdb',
'fa-fa-inr' => 'fas fa-rupee-sign',
'fa-fa-instagram' => 'fab fa-instagram',
'fa-fa-institution' => 'fas fa-university',
'fa-fa-internet-explorer' => 'fab fa-internet-explorer',
'fa-fa-intersex' => 'fas fa-transgender',
'fa-fa-ioxhost' => 'fab fa-ioxhost',
'fa-fa-joomla' => 'fab fa-joomla',
'fa-fa-jpy' => 'fas fa-yen-sign',
'fa-fa-jsfiddle' => 'fab fa-jsfiddle',
'fa-fa-keyboard-o' => 'far fa-keyboard',
'fa-fa-krw' => 'fas fa-won-sign',
'fa-fa-lastfm-square' => 'fab fa-lastfm-square',
'fa-fa-lastfm' => 'fab fa-lastfm',
'fa-fa-leanpub' => 'fab fa-leanpub',
'fa-fa-legal' => 'fas fa-gavel',
'fa-fa-lemon-o' => 'far fa-lemon',
'fa-fa-level-down' => 'fas fa-level-down-alt',
'fa-fa-level-up' => 'fas fa-level-up-alt',
'fa-fa-life-bouy' => 'far fa-life-ring',
'fa-fa-life-buoy' => 'far fa-life-ring',
'fa-fa-life-ring' => 'far fa-life-ring',
'fa-fa-life-saver' => 'far fa-life-ring',
'fa-fa-lightbulb-o' => 'far fa-lightbulb',
'fa-fa-line-chart' => 'fas fa-chart-line',
'fa-fa-linkedin-square' => 'fab fa-linkedin',
'fa-fa-linkedin' => 'fab fa-linkedin-in',
'fa-fa-linode' => 'fab fa-linode',
'fa-fa-linux' => 'fab fa-linux',
'fa-fa-list-alt' => 'far fa-list-alt',
'fa-fa-long-arrow-down' => 'fas fa-long-arrow-alt-down',
'fa-fa-long-arrow-left' => 'fas fa-long-arrow-alt-left',
'fa-fa-long-arrow-right' => 'fas fa-long-arrow-alt-right',
'fa-fa-long-arrow-up' => 'fas fa-long-arrow-alt-up',
'fa-fa-mail-forward' => 'fas fa-share',
'fa-fa-mail-reply-all' => 'fas fa-reply-all',
'fa-fa-mail-reply' => 'fas fa-reply',
'fa-fa-map-marker' => 'fas fa-map-marker-alt',
'fa-fa-map-o' => 'far fa-map',
'fa-fa-maxcdn' => 'fab fa-maxcdn',
'fa-fa-meanpath' => 'fab fa-font-awesome',
'fa-fa-medium' => 'fab fa-medium',
'fa-fa-meetup' => 'fab fa-meetup',
'fa-fa-meh-o' => 'far fa-meh',
'fa-fa-minus-square-o' => 'far fa-minus-square',
'fa-fa-mixcloud' => 'fab fa-mixcloud',
'fa-fa-mobile-phone' => 'fas fa-mobile-alt',
'fa-fa-mobile' => 'fas fa-mobile-alt',
'fa-fa-modx' => 'fab fa-modx',
'fa-fa-moon-o' => 'far fa-moon',
'fa-fa-money' => 'far fa-money-bill-alt',
'fa-fa-mortar-board' => 'fas fa-graduation-cap',
'fa-fa-navicon' => 'fas fa-bars',
'fa-fa-newspaper-o' => 'far fa-newspaper',
'fa-fa-object-group' => 'far fa-object-group',
'fa-fa-object-ungroup' => 'far fa-object-ungroup',
'fa-fa-odnoklassniki-square' => 'fab fa-odnoklassniki-square',
'fa-fa-odnoklassniki' => 'fab fa-odnoklassniki',
'fa-fa-opencart' => 'fab fa-opencart',
'fa-fa-openid' => 'fab fa-openid',
'fa-fa-opera' => 'fab fa-opera',
'fa-fa-optin-monster' => 'fab fa-optin-monster',
'fa-fa-pagelines' => 'fab fa-pagelines',
'fa-fa-paper-plane-o' => 'far fa-paper-plane',
'fa-fa-paste' => 'far fa-clipboard',
'fa-fa-pause-circle-o' => 'far fa-pause-circle',
'fa-fa-paypal' => 'fab fa-paypal',
'fa-fa-pencil-square' => 'fas fa-pen-square',
'fa-fa-pencil-square-o' => 'far fa-edit',
'fa-fa-pencil' => 'fas fa-pencil-alt',
'fa-fa-photo' => 'far fa-image',
'fa-fa-picture-o' => 'far fa-image',
'fa-fa-pie-chart' => 'fas fa-chart-pie',
'fa-fa-pied-piper-alt' => 'fab fa-pied-piper-alt',
'fa-fa-pied-piper-pp' => 'fab fa-pied-piper-pp',
'fa-fa-pied-piper' => 'fab fa-pied-piper',
'fa-fa-pinterest-p' => 'fab fa-pinterest-p',
'fa-fa-pinterest-square' => 'fab fa-pinterest-square',
'fa-fa-pinterest' => 'fab fa-pinterest',
'fa-fa-play-circle-o' => 'far fa-play-circle',
'fa-fa-plus-square-o' => 'far fa-plus-square',
'fa-fa-product-hunt' => 'fab fa-product-hunt',
'fa-fa-qq' => 'fab fa-qq',
'fa-fa-question-circle-o' => 'far fa-question-circle',
'fa-fa-quora' => 'fab fa-quora',
'fa-fa-ravelry' => 'fab fa-ravelry',
'fa-fa-ra' => 'fab fa-rebel',
'fa-fa-rebel' => 'fab fa-rebel',
'fa-fa-reddit-alien' => 'fab fa-reddit-alien',
'fa-fa-reddit-square' => 'fab fa-reddit-square',
'fa-fa-reddit' => 'fab fa-reddit',
'fa-fa-refresh' => 'fas fa-sync',
'fa-fa-registered' => 'far fa-registered',
'fa-fa-remove' => 'fas fa-times',
'fa-fa-renren' => 'fab fa-renren',
'fa-fa-reorder' => 'fas fa-bars',
'fa-fa-repeat' => 'fas fa-redo',
'fa-fa-resistance' => 'fab fa-rebel',
'fa-fa-rmb' => 'fas fa-yen-sign',
'fa-fa-rotate-left' => 'fas fa-undo',
'fa-fa-rotate-right' => 'fas fa-redo',
'fa-fa-rouble' => 'fas fa-ruble-sign',
'fa-fa-ruble' => 'fas fa-ruble-sign',
'fa-fa-rub' => 'fas fa-ruble-sign',
'fa-fa-rupee' => 'fas fa-rupee-sign',
'fa-fa-s15' => 'fas fa-bath',
'fa-fa-safari' => 'fab fa-safari',
'fa-fa-scissors' => 'fas fa-cut',
'fa-fa-scribd' => 'fab fa-scribd',
'fa-fa-sellsy' => 'fab fa-sellsy',
'fa-fa-send-o' => 'far fa-paper-plane',
'fa-fa-send' => 'fas fa-paper-plane',
'fa-fa-share-square-o' => 'far fa-share-square',
'fa-fa-shekel' => 'fas fa-shekel-sign',
'fa-fa-sheqel' => 'fas fa-shekel-sign',
'fa-fa-shield' => 'fas fa-shield-alt',
'fa-fa-shirtsinbulk' => 'fab fa-shirtsinbulk',
'fa-fa-sign-in' => 'fas fa-sign-in-alt',
'fa-fa-sign-out' => 'fas fa-sign-out-alt',
'fa-fa-signing' => 'fas fa-sign-language',
'fa-fa-simplybuilt' => 'fab fa-simplybuilt',
'fa-fa-skyatlas' => 'fab fa-skyatlas',
'fa-fa-skype' => 'fab fa-skype',
'fa-fa-slack' => 'fab fa-slack',
'fa-fa-sliders' => 'fas fa-sliders-h',
'fa-fa-slideshare' => 'fab fa-slideshare',
'fa-fa-smile-o' => 'far fa-smile',
'fa-fa-snapchat-ghost' => 'fab fa-snapchat-ghost',
'fa-fa-snapchat-square' => 'fab fa-snapchat-square',
'fa-fa-snapchat' => 'fab fa-snapchat',
'fa-fa-snowflake-o' => 'far fa-snowflake',
'fa-fa-soccer-ball-o' => 'far fa-futbol',
'fa-fa-sort-alpha-asc' => 'fas fa-sort-alpha-down',
'fa-fa-sort-alpha-desc' => 'fas fa-sort-alpha-up',
'fa-fa-sort-amount-asc' => 'fas fa-sort-amount-down',
'fa-fa-sort-amount-desc' => 'fas fa-sort-amount-up',
'fa-fa-sort-asc' => 'fas fa-sort-up',
'fa-fa-sort-desc' => 'fas fa-sort-down',
'fa-fa-sort-numeric-asc' => 'fas fa-sort-numeric-down',
'fa-fa-sort-numeric-desc' => 'fas fa-sort-numeric-up',
'fa-fa-soundcloud' => 'fab fa-soundcloud',
'fa-fa-spoon' => 'fas fa-utensil-spoon',
'fa-fa-spotify' => 'fab fa-spotify',
'fa-fa-square-o' => 'far fa-square',
'fa-fa-stack-exchange' => 'fab fa-stack-exchange',
'fa-fa-stack-overflow' => 'fab fa-stack-overflow',
'fa-fa-star-half-empty' => 'far fa-star-half',
'fa-fa-star-half-full' => 'far fa-star-half',
'fa-fa-star-half-o' => 'far fa-star-half',
'fa-fa-star-o' => 'far fa-star',
'fa-fa-steam-square' => 'fab fa-steam-square',
'fa-fa-steam' => 'fab fa-steam',
'fa-fa-sticky-note-o' => 'far fa-sticky-note',
'fa-fa-stop-circle-o' => 'far fa-stop-circle',
'fa-fa-stumbleupon-circle' => 'fab fa-stumbleupon-circle',
'fa-fa-stumbleupon' => 'fab fa-stumbleupon',
'fa-fa-sun-o' => 'far fa-sun',
'fa-fa-superpowers' => 'fab fa-superpowers',
'fa-fa-support' => 'far fa-life-ring',
'fa-fa-tablet' => 'fas fa-tablet-alt',
'fa-fa-tachometer' => 'fas fa-tachometer-alt',
'fa-fa-telegram' => 'fab fa-telegram',
'fa-fa-television' => 'fas fa-tv',
'fa-fa-tencent-weibo' => 'fab fa-tencent-weibo',
'fa-fa-themeisle' => 'fab fa-themeisle',
'fa-fa-thermometer-0' => 'fas fa-thermometer-empty',
'fa-fa-thermometer-1' => 'fas fa-thermometer-quarter',
'fa-fa-thermometer-2' => 'fas fa-thermometer-half',
'fa-fa-thermometer-3' => 'fas fa-thermometer-three-quarters',
'fa-fa-thermometer-4' => 'fas fa-thermometer-full',
'fa-fa-thermometer' => 'fas fa-thermometer-full',
'fa-fa-thumb-tack' => 'fas fa-thumbtack',
'fa-fa-thumbs-o-down' => 'far fa-thumbs-down',
'fa-fa-thumbs-o-up' => 'far fa-thumbs-up',
'fa-fa-ticket' => 'fas fa-ticket-alt',
'fa-fa-times-circle-o' => 'far fa-times-circle',
'fa-fa-times-rectangle-o' => 'far fa-window-close',
'fa-fa-times-rectangle' => 'fas fa-window-close',
'fa-fa-toggle-down' => 'far fa-caret-square-down',
'fa-fa-toggle-left' => 'far fa-caret-square-left',
'fa-fa-toggle-right' => 'far fa-caret-square-right',
'fa-fa-toggle-up' => 'far fa-caret-square-up',
'fa-fa-trash-o' => 'far fa-trash-alt',
'fa-fa-trash' => 'fas fa-trash-alt',
'fa-fa-trello' => 'fab fa-trello',
'fa-fa-tripadvisor' => 'fab fa-tripadvisor',
'fa-fa-try' => 'fas fa-lira-sign',
'fa-fa-tumblr-square' => 'fab fa-tumblr-square',
'fa-fa-tumblr' => 'fab fa-tumblr',
'fa-fa-turkish-lira' => 'fas fa-lira-sign',
'fa-fa-twitch' => 'fab fa-twitch',
'fa-fa-twitter-square' => 'fab fa-twitter-square',
'fa-fa-twitter' => 'fab fa-twitter',
'fa-fa-unsorted' => 'fas fa-sort',
'fa-fa-usb' => 'fab fa-usb',
'fa-fa-usd' => 'fas fa-dollar-sign',
'fa-fa-user-circle-o' => 'far fa-user-circle',
'fa-fa-user-o' => 'far fa-user',
'fa-fa-vcard-o' => 'far fa-address-card',
'fa-fa-vcard' => 'fas fa-address-card',
'fa-fa-viacoin' => 'fab fa-viacoin',
'fa-fa-viadeo-square' => 'fab fa-viadeo-square',
'fa-fa-viadeo' => 'fab fa-viadeo',
'fa-fa-video-camera' => 'fas fa-video',
'fa-fa-vimeo-square' => 'fab fa-vimeo-square',
'fa-fa-vimeo' => 'fab fa-vimeo-v',
'fa-fa-vine' => 'fab fa-vine',
'fa-fa-vk' => 'fab fa-vk',
'fa-fa-volume-control-phone' => 'fas fa-phone-volume',
'fa-fa-warning' => 'fas fa-exclamation-triangle',
'fa-fa-wechat' => 'fab fa-weixin',
'fa-fa-weibo' => 'fab fa-weibo',
'fa-fa-weixin' => 'fab fa-weixin',
'fa-fa-whatsapp' => 'fab fa-whatsapp',
'fa-fa-wheelchair-alt' => 'fab fa-accessible-icon',
'fa-fa-wikipedia-w' => 'fab fa-wikipedia-w',
'fa-fa-window-close-o' => 'far fa-window-close',
'fa-fa-window-maximize' => 'far fa-window-maximize',
'fa-fa-window-restore' => 'far fa-window-restore',
'fa-fa-windows' => 'fab fa-windows',
'fa-fa-won' => 'fas fa-won-sign',
'fa-fa-wordpress' => 'fab fa-wordpress',
'fa-fa-wpbeginner' => 'fab fa-wpbeginner',
'fa-fa-wpexplorer' => 'fab fa-wpexplorer',
'fa-fa-wpforms' => 'fab fa-wpforms',
'fa-fa-xing-square' => 'fab fa-xing-square',
'fa-fa-xing' => 'fab fa-xing',
'fa-fa-y-combinator-square' => 'fab fa-hacker-news',
'fa-fa-y-combinator' => 'fab fa-y-combinator',
'fa-fa-yahoo' => 'fab fa-yahoo',
'fa-fa-yc' => 'fab fa-y-combinator',
'fa-fa-yc-square' => 'fab fa-hacker-news',
'fa-fa-yelp' => 'fab fa-yelp',
'fa-fa-yen' => 'fas fa-yen-sign',
'fa-fa-yoast' => 'fab fa-yoast',
'fa-fa-youtube-play' => 'fab fa-youtube',
'fa-fa-youtube-square' => 'fab fa-youtube-square',
'fa-fa-youtube' => 'fab fa-youtube',
'fa-fa-fa' => 'fab fa-font-awesome',
);
$font_awesome_icon = apply_filters( 'menu_icons_backward_compatibility_icons', $font_awesome_icon );
return $font_awesome_icon;
}
}

View File

@ -0,0 +1,122 @@
<?php
/**
* Font awesome 5 icons support.
*
* @package Menu_Icons
*/
final class Menu_Icons_Font_Awesome {
/**
* Font Awesome version
*
* @access static
* @var string
*/
public static $version = '5.15.4';
/**
* Init hooks.
*/
public static function init() {
add_filter( 'icon_picker_icon_type_stylesheet_uri', array( __CLASS__, '_icon_type_stylesheet_uri' ), 10, 3 );
add_filter( 'icon_picker_fa_items', array( __CLASS__, '_icon_picker_fa_items' ) );
add_filter( 'icon_picker_font_media_templates', array( __CLASS__, '_icon_picker_font_media_templates' ) );
}
/**
* Font Awesome's stylesheet.
*
* @param string $stylesheet_uri Icon type's stylesheet URI.
* @param string $icon_type_id Icon type's ID.
* @param Icon_Picker_Type_Font $icon_type Icon type's instance.
*
* @return string
*/
public static function _icon_type_stylesheet_uri( $stylesheet_uri, $icon_type_id, $icon_type ) {
if ( 'fa' === $icon_type_id ) {
$url = Menu_Icons::get( 'url' );
$stylesheet_uri = sprintf(
"{$url}css/fontawesome/css/all.min.css",
$icon_type->version
);
}
return $stylesheet_uri;
}
/**
* Icon picker fontawesome items.
*
* @param array $icons Icons.
* @return array Icons.
*/
public static function _icon_picker_fa_items( $icons ) {
if ( empty( $icons ) ) {
return $icons;
}
$deprecated_icons = array_search( 'fa-tripadvisor', array_column( $icons, 'id' ), true );
if ( false !== $deprecated_icons ) {
unset( $icons[ $deprecated_icons ] );
$icons = array_values( $icons );
}
$font_awesome = font_awesome_backward_compatible();
foreach ( $icons as $key => $icon ) {
$old_fa_icon = sprintf( 'fa-%s', $icons[ $key ]['id'] );
if ( array_key_exists( $old_fa_icon, $font_awesome ) ) {
$icons[ $key ]['id'] = trim( $font_awesome[ $old_fa_icon ] );
} else {
$icons[ $key ]['id'] = sprintf( 'fa %s', trim( $icons[ $key ]['id'] ) );
}
}
// Fa5 extra icons support.
$global_settins = get_option( 'menu-icons', false );
if ( ! empty( $global_settins['global']['fa5_extra_icons'] ) ) {
$fa5_extra_icons = $global_settins['global']['fa5_extra_icons'];
$fa5_extra_icons = explode( ',', $fa5_extra_icons );
$fa5_extra_icons = array_map( 'trim', $fa5_extra_icons );
if ( ! empty( $fa5_extra_icons ) ) {
foreach ( $fa5_extra_icons as $fa5_icon ) {
$icon_name = explode( '-', $fa5_icon );
$icon_name = end( $icon_name );
$icons[] = array(
'group' => 'all',
'id' => $fa5_icon,
'name' => $icon_name,
);
}
}
}
return $icons;
}
/**
* Icon picker font media template.
*
* @param string $template Media template.
* @return string Media template.
*/
public static function _icon_picker_font_media_templates( $template ) {
$templates = array(
'icon' => '<i class="_icon {{data.type}} {{ data.icon }}"></i>',
'item' => sprintf(
'<div class="attachment-preview js--select-attachment">
<div class="thumbnail">
<span class="_icon"><i class="{{"fa" == data.type ? "" : data.type}} {{ data.id }}"></i></span>
<div class="filename"><div>{{ data.name }}</div></div>
</div>
</div>
<a class="check" href="#" title="%s"><div class="media-modal-icon"></div></a>',
esc_attr__( 'Deselect', 'icon-picker' )
),
);
return $templates;
}
}

View File

@ -0,0 +1,575 @@
<?php
/**
* Form Fields
*
* A prototype for the new "Form Fields" plugin, a standalone plugin and
* extension for the upcoming "Settings" plugin, a rewrite of KC Settings.
*
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
/**
* Form Fields
*/
abstract class Kucrut_Form_Field {
/**
* Holds field & argument defaults
*
* @since 0.1.0
* @var array
* @access protected
*/
protected static $defaults = array(
'field' => array(
'id' => '',
'type' => 'text',
'value' => null,
'default' => null,
'attributes' => array(),
'description' => '',
'choices' => array(),
),
'args' => array(
'keys' => array(),
'inline_description' => false,
),
);
/**
* Holds field attributes
*
* @since 0.1.0
* @var array
* @access protected
*/
protected static $types = array(
'text' => 'Kucrut_Form_Field_Text',
'number' => 'Kucrut_Form_Field_Text',
'url' => 'Kucrut_Form_Field_Text',
'color' => 'Kucrut_Form_Field_Text',
'date' => 'Kucrut_Form_Field_Text',
'hidden' => 'Kucrut_Form_Field_Text',
'checkbox' => 'Kucrut_Form_Field_Checkbox',
'radio' => 'Kucrut_Form_Field_Radio',
'textarea' => 'Kucrut_Form_Field_Textarea',
'select' => 'Kucrut_Form_Field_Select',
'select_multiple' => 'Kucrut_Form_Field_Select_Multiple',
'select_pages' => 'Kucrut_Form_Field_Select_Pages',
'special' => 'Kucrut_Form_Field_Special',
);
/**
* Holds forbidden attributes
*
* @since 0.1.0
* @var array
* @access protected
*/
protected static $forbidden_attributes = array(
'id',
'name',
'value',
'checked',
'multiple',
);
/**
* Holds allowed html tags
*
* @since 0.1.0
* @var array
* @access protected
*/
protected $allowed_html = array(
'a' => array(
'href' => true,
'target' => true,
'title' => true,
),
'code' => true,
'em' => true,
'p' => array( 'class' => true ),
'span' => array( 'class' => true ),
'strong' => true,
);
/**
* Holds constructed field
*
* @since 0.1.0
* @var array
* @access protected
*/
protected $field;
/**
* Holds field attributes
*
* @since 0.1.0
* @var array
* @access protected
*/
protected $attributes = array();
/**
* Loader
*
* @param string URL path to this directory
*/
final public static function load( $url_path = null ) {
// Set URL path for assets
if ( ! is_null( $url_path ) ) {
self::$url_path = $url_path;
} else {
self::$url_path = plugin_dir_url( __FILE__ );
}
// Supported field types
self::$types = apply_filters(
'form_field_types',
self::$types
);
}
/**
* Create field
*
* @param array $field Field array
* @param array $args Extra field arguments
*/
final public static function create( array $field, $args = array() ) {
$field = wp_parse_args( $field, self::$defaults['field'] );
if ( ! isset( self::$types[ $field['type'] ] )
|| ! is_subclass_of( self::$types[ $field['type'] ], __CLASS__ )
) {
trigger_error(
sprintf(
esc_html__( '%1$s: Type %2$s is not supported, reverting to text.', 'menu-icons' ),
__CLASS__,
esc_html( $field['type'] )
),
E_USER_WARNING
);
$field['type'] = 'text';
}
if ( is_null( $field['value'] ) && ! is_null( $field['default'] ) ) {
$field['value'] = $field['default'];
}
foreach ( self::$forbidden_attributes as $key ) {
unset( $field['attributes'][ $key ] );
}
$args = (object) wp_parse_args( $args, self::$defaults['args'] );
$class = self::$types[ $field['type'] ];
return new $class( $field, $args );
}
/**
* Constructor
*
* @since 0.1.0
* @param array $field Field array
* @param object $args Extra field arguments
*/
public function __construct( $field, $args ) {
$this->field = $field;
$this->args = $args;
if ( ! is_array( $this->args->keys ) ) {
$this->args->keys = array();
}
$this->args->keys[] = $field['id'];
$this->attributes['id'] = $this->create_id();
$this->attributes['name'] = $this->create_name();
$this->attributes = wp_parse_args(
$this->attributes,
(array) $field['attributes']
);
$this->set_properties();
}
/**
* Attribute
*
* @since 0.1.0
* @param string $key Attribute key
* @return mixed NULL if attribute doesn't exist
*/
public function __get( $key ) {
foreach ( array( 'attributes', 'field' ) as $group ) {
if ( isset( $this->{$group}[ $key ] ) ) {
return $this->{$group}[ $key ];
}
}
return null;
}
/**
* Create id/name attribute
*
* @since 0.1.0
* @param string $format Attribute format
*/
protected function create_id_name( $format ) {
return call_user_func_array(
'sprintf',
array_merge(
array( $format ),
$this->args->keys
)
);
}
/**
* Create id attribute
*
* @since 0.1.0
* @access protected
* @return string
*/
protected function create_id() {
$format = implode( '-', $this->args->keys );
return $this->create_id_name( $format );
}
/**
* Create name attribute
*
* @since 0.1.0
* @access protected
* @return string
*/
protected function create_name() {
$format = '%s';
$format .= str_repeat( '[%s]', ( count( $this->args->keys ) - 1 ) );
return $this->create_id_name( $format );
}
/**
* Set field properties
*
* @since 0.1.0
*/
protected function set_properties() {}
/**
* Build field attributes
*
* @since 0.1.0
* @param array $excludes Attributes to be excluded
* @return string
*/
protected function build_attributes( $excludes = array() ) {
$excludes = array_filter( (array) $excludes );
$attributes = '';
foreach ( $this->attributes as $key => $value ) {
if ( in_array( $key, $excludes, true ) ) {
continue;
}
if ( 'class' === $key ) {
$value = implode( ' ', (array) $value );
}
$attributes .= sprintf(
' %s="%s"',
esc_attr( $key ),
esc_attr( $value )
);
}
return $attributes;
}
/**
* Print field
*
* @since 0.1.0
*/
abstract public function render();
/**
* Print field description
*
* @since 0.1.0
*/
public function description() {
if ( ! empty( $this->field['description'] ) ) {
$tag = ( ! empty( $this->args->inline_description ) ) ? 'span' : 'p';
printf( // WPCS: XSS ok.
'<%1$s class="description">%2$s</%1$s>',
$tag,
wp_kses( $this->field['description'], $this->allowed_html )
);
}
}
}
/**
* Field: text
*/
class Kucrut_Form_Field_Text extends Kucrut_Form_Field {
protected $template = '<input type="%s" value="%s"%s />';
protected function set_properties() {
if ( ! is_string( $this->field['value'] ) ) {
$this->field['value'] = '';
}
if ( in_array( $this->field['type'], array( 'text', 'url' ), true ) ) {
if ( ! isset( $this->attributes['class'] ) ) {
$this->attributes['class'] = array();
}
$this->attributes['class'] = array_unique(
array_merge(
array( 'regular-text' ),
$this->attributes['class']
)
);
}
}
public function render() {
printf( // WPCS: xss ok
$this->template,
esc_attr( $this->field['type'] ),
esc_attr( $this->field['value'] ),
$this->build_attributes()
);
$this->description();
}
}
/**
* Field: Textarea
*/
class Kucrut_Form_Field_Textarea extends Kucrut_Form_Field {
protected $template = '<textarea%s>%s</textarea>';
protected $attributes = array(
'class' => 'widefat',
'cols' => 50,
'rows' => 5,
);
public function render() {
printf( // WPCS: XSS ok.
$this->template,
$this->build_attributes(),
esc_textarea( $this->field['value'] )
);
}
}
/**
* Field: Checkbox
*/
class Kucrut_Form_Field_Checkbox extends Kucrut_Form_Field {
protected $template = '<label><input type="%s" value="%s"%s%s /> %s</label><br />';
protected function set_properties() {
$this->field['value'] = array_filter( (array) $this->field['value'] );
$this->attributes['name'] .= '[]';
}
protected function checked( $value ) {
return checked( in_array( $value, $this->field['value'], true ), true, false );
}
public function render() {
foreach ( $this->field['choices'] as $value => $label ) {
printf( // WPCS: XSS ok.
$this->template,
$this->field['type'],
esc_attr( $value ),
$this->checked( $value ),
$this->build_attributes( 'id' ),
esc_html( $label )
);
}
}
}
/**
* Field: Radio
*/
class Kucrut_Form_Field_Radio extends Kucrut_Form_Field_Checkbox {
protected function set_properties() {
if ( ! is_string( $this->field['value'] ) ) {
$this->field['value'] = '';
}
}
protected function checked( $value ) {
return checked( $value, $this->field['value'], false );
}
}
/**
* Field: Select
*/
class Kucrut_Form_Field_Select extends Kucrut_Form_Field {
protected $template = '<option value="%s"%s>%s</option>';
protected function set_properties() {
if ( ! is_string( $this->field['value'] ) ) {
$this->field['value'] = '';
}
}
protected function selected( $value ) {
return selected( ( $value === $this->field['value'] ), true, false );
}
public function render() {
?>
<select<?php echo $this->build_attributes() // xss ok ?>>
<?php foreach ( $this->field['choices'] as $index => $choice ) : ?>
<?php
if ( is_array( $choice ) ) {
$value = $choice['value'];
$label = $choice['label'];
} else {
$value = $index;
$label = $choice;
}
?>
<?php
printf( // WPCS: XSS ok.
$this->template,
esc_attr( $value ),
$this->selected( $value ),
esc_html( $label )
);
?>
<?php endforeach; ?>
</select>
<?php
}
}
/**
* Field: Multiple Select
*/
class Kucrut_Form_Field_Select_Multiple extends Kucrut_Form_Field_Select {
protected function set_properties() {
$this->field['value'] = array_filter( (array) $this->field['value'] );
$this->attributes['name'] .= '[]';
$this->attributes['multiple'] = 'multiple';
}
protected function selected( $value ) {
return selected( in_array( $value, $this->field['value'], true ), true, false );
}
}
/**
* Field: Select Pages
*/
class Kucrut_Form_Field_Select_Pages extends Kucrut_Form_Field_Select {
protected $wp_dropdown_pages_args = array(
'depth' => 0,
'child_of' => 0,
'option_none_value' => '',
);
public function __construct( $field, $args ) {
$this->wp_dropdown_pages_args['show_option_none'] = __( '&mdash; Select &mdash;', 'menu-icons' );
parent::__construct( $field, $args );
}
public function set_properties() {
parent::set_properties();
if ( empty( $this->args->wp_dropdown_pages_args ) ) {
$this->args->wp_dropdown_pages_args = array();
}
// Apply defeaults
$this->args->wp_dropdown_pages_args = wp_parse_args(
$this->args->wp_dropdown_pages_args,
$this->wp_dropdown_pages_args
);
// Force some args
$this->args->wp_dropdown_pages_args = array_merge(
$this->args->wp_dropdown_pages_args,
array(
'echo' => true,
'name' => $this->attributes['name'],
'id' => $this->attributes['id'],
'selected' => $this->field['value'],
)
);
}
public function render() {
wp_dropdown_pages( $this->args->wp_dropdown_pages_args ); // WPCS: XSS ok.
}
}
/**
* Field: Special (Callback)
*/
class Kucrut_Form_Field_Special extends Kucrut_Form_Field {
public function render() {
call_user_func_array(
$this->field['render_cb'],
array( $this )
);
}
}

View File

@ -0,0 +1,111 @@
<?php
/**
* Misc. helper functions
*
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
if ( ! function_exists( 'kucrut_get_array_value_deep' ) ) {
/**
* Get value of a multidimensional array
*
* @since 0.1.0
* @param array $array Haystack
* @param array $keys Needles
* @return mixed
*/
function kucrut_get_array_value_deep( array $array, array $keys ) {
if ( empty( $array ) || empty( $keys ) ) {
return $array;
}
foreach ( $keys as $idx => $key ) {
unset( $keys[ $idx ] );
if ( ! isset( $array[ $key ] ) ) {
return null;
}
if ( ! empty( $keys ) ) {
$array = $array[ $key ];
}
}
if ( ! isset( $array[ $key ] ) ) {
return null;
}
return $array[ $key ];
}
}
if ( ! function_exists( 'kucrut_validate' ) ) {
/**
* Validate settings values
*
* @param array $values Settings values
* @return array
*/
function kucrut_validate( $values, $sanitize_cb = 'wp_kses_data' ) {
foreach ( $values as $key => $value ) {
if ( is_array( $value ) ) {
$values[ $key ] = kucrut_validate( $value );
} else {
$values[ $key ] = call_user_func_array(
$sanitize_cb,
array( $value )
);
}
}
return $values;
}
}
if ( ! function_exists( 'kucrut_get_image_sizes' ) ) {
/**
* Get image sizes
*
* @since 0.9.0
* @access protected
* @return array
*/
function kucrut_get_image_sizes() {
$_sizes = array(
'thumbnail' => __( 'Thumbnail', 'menu-icons' ),
'medium' => __( 'Medium', 'menu-icons' ),
'large' => __( 'Large', 'menu-icons' ),
'full' => __( 'Full Size', 'menu-icons' ),
);
$_sizes = apply_filters( 'image_size_names_choose', $_sizes );
$sizes = array();
foreach ( $_sizes as $value => $label ) {
$sizes[] = array(
'value' => $value,
'label' => $label,
);
}
return $sizes;
}
}
if ( ! function_exists( 'kucrut_get_script_suffix' ) ) {
/**
* Get script & style suffix
*
* When SCRIPT_DEBUG is defined true, this will return '.min'.
*
* @return string
*/
function kucrut_get_script_suffix() {
return ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
}
}

View File

@ -0,0 +1,127 @@
<script type="text/html" id="tmpl-menu-icons-item-field-preview-font">
<i class="_icon {{'fa' == data.type ? '' : data.type}} {{ data.icon }}"></i>
</script>
<script type="text/html" id="tmpl-menu-icons-item-field-preview-image">
<img src="{{ data.url }}" class="_icon" />
</script>
<script type="text/html" id="tmpl-menu-icons-item-field-preview-svg">
<img src="{{ data.url }}" class="_icon" />
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-font-before">
<a href="#">
<i class="_icon {{ data.type }} {{ data.icon }} _{{ data.position }}"
style="font-size:{{ data.font_size }}em; vertical-align:{{ data.vertical_align }};"
></i>
<span>{{ data.title }}</span>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-font-after">
<a href="#">
<span>{{ data.title }}</span>
<i class="_icon {{ data.type }} {{ data.icon }} _{{ data.position }}"
style="font-size:{{ data.font_size }}em; vertical-align:{{ data.vertical_align }};"
></i>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-font-hide_label">
<a href="#">
<i class="_icon {{ data.type }} {{ data.icon }} _{{ data.position }}"
style="font-size:{{ data.font_size }}em; vertical-align:{{ data.vertical_align }};"
></i>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-image-before">
<a href="#">
<img src="{{ data.url }}"
alt="{{ data.alt }}"
class="_icon {{ data.type }} _{{ data.position }}"
style="vertical-align:{{ data.vertical_align }};"
/>
<span>{{ data.title }}</span>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-image-after">
<a href="#">
<span>{{ data.title }}</span>
<img src="{{ data.url }}"
alt="{{ data.alt }}"
class="_icon {{ data.type }} _{{ data.position }}"
style="vertical-align:{{ data.vertical_align }};"
/>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-image-hide_label">
<a href="#">
<img src="{{ data.url }}"
alt="{{ data.alt }}"
class="_icon {{ data.type }} _{{ data.position }}"
style="vertical-align:{{ data.vertical_align }};"
/>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-svg-before">
<a href="#">
<img src="{{ data.url }}"
alt="{{ data.alt }}"
class="_icon _{{data.type}}"
style="width:{{data.svg_width}}em;vertical-align:{{ data.vertical_align }}"
/>
<span>{{ data.title }}</span>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-svg-after">
<a href="#">
<span>{{ data.title }}</span>
<img src="{{ data.url }}"
alt="{{ data.alt }}"
class="_icon _{{data.type}}"
style="width:{{data.svg_width}}em;vertical-align:{{ data.vertical_align }}"
/>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-item-sidebar-preview-svg-hide_label">
<a href="#">
<img src="{{ data.url }}"
alt="{{ data.alt }}"
class="_icon _{{data.type}}"
style="width:{{data.svg_width}}em;vertical-align:{{ data.vertical_align }}"
/>
</a>
</script>
<script type="text/html" id="tmpl-menu-icons-settings-field-text">
<span>{{ data.label }}</span>
<input type="text" data-setting="{{ data.id }}" value="{{ data.value }}" />
</script>
<script type="text/html" id="tmpl-menu-icons-settings-field-number">
<span>{{ data.label }}</span>
<input type="number" min="{{ data.attributes.min }}" step="{{ data.attributes.step }}" data-setting="{{ data.id }}" value="{{ data.value }}" />
<# if ( data.description ) { #><em>{{ data.description }} </em><# } #>
</script>
<script type="text/html" id="tmpl-menu-icons-settings-field-select">
<span>{{ data.label }}</span>
<select data-setting="{{ data.id }}">
<# _.each( data.choices, function( choice ) { #>
<# if ( data.value === choice.value ) { #>
<option selected="selected" value="{{ choice.value }}">{{ choice.label }}</option>
<# } else { #>
<option value="{{ choice.value }}">{{ choice.label }}</option>
<# } #>
<# } ); #>
</select>
</script>
<?php do_action( 'menu_icons_js_templates' );

View File

@ -0,0 +1,169 @@
<?php
/**
* Menu item metadata
*
* @package Menu_Icons
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
final class Menu_Icons_Meta {
const KEY = 'menu-icons';
/**
* Default meta value
*
* @since 0.9.0
* @access protected
* @var array
*/
protected static $defaults = array(
'type' => '',
'icon' => '',
'url' => '',
);
/**
* Initialize metadata functionalities
*
* @since 0.9.0
*/
public static function init() {
add_filter( 'is_protected_meta', array( __CLASS__, '_protect_meta_key' ), 10, 3 );
}
/**
* Protect meta key
*
* This prevents our meta key from showing up on Custom Fields meta box.
*
* @since 0.3.0
* @wp_hook filter is_protected_meta
* @param bool $protected Protection status.
* @param string $meta_key Meta key.
* @param string $meta_type Meta type.
* @return bool Protection status.
*/
public static function _protect_meta_key( $protected, $meta_key, $meta_type ) {
if ( self::KEY === $meta_key ) {
$protected = true;
}
return $protected;
}
/**
* Get menu item meta value
*
* @since 0.3.0
* @since 0.9.0 Add $defaults parameter.
* @param int $id Menu item ID.
* @param array $defaults Optional. Default value.
* @return array
*/
public static function get( $id, $defaults = array() ) {
$defaults = wp_parse_args( $defaults, self::$defaults );
$value = get_post_meta( $id, self::KEY, true );
$value = wp_parse_args( (array) $value, $defaults );
if ( ! empty( $value['type'] ) && 'fa' === $value['type'] ) {
if ( ! empty( $value['icon'] ) && count( explode( ' ', $value['icon'] ) ) <= 1 ) {
$value['icon'] = sprintf( 'fa %s', $value['icon'] );
}
}
$font_awesome5 = font_awesome_backward_compatible();
$icon = ! empty( $value['icon'] ) ? $value['icon'] : '';
$icon = explode( ' ', $icon );
$icon = sprintf( '%s-%s', reset( $icon ), end( $icon ) );
if ( ! empty( $font_awesome5[ $icon ] ) ) {
$value['icon'] = $font_awesome5[ $icon ];
}
// Backward-compatibility.
if ( empty( $value['icon'] ) &&
! empty( $value['type'] ) &&
! empty( $value[ "{$value['type']}-icon" ] )
) {
$value['icon'] = $value[ "{$value['type']}-icon" ];
}
if ( ! empty( $value['width'] ) ) {
$value['svg_width'] = $value['width'];
}
unset( $value['width'] );
if ( isset( $value['position'] ) &&
! in_array( $value['position'], array( 'before', 'after' ), true )
) {
$value['position'] = $defaults['position'];
}
if ( isset( $value['size'] ) && ! isset( $value['font_size'] ) ) {
$value['font_size'] = $value['size'];
unset( $value['size'] );
}
// The values below will NOT be saved
if ( ! empty( $value['icon'] ) &&
in_array( $value['type'], array( 'image', 'svg' ), true )
) {
$value['url'] = wp_get_attachment_image_url( $value['icon'], 'thumbnail', false );
}
return $value;
}
/**
* Update menu item metadata
*
* @since 0.9.0
*
* @param int $id Menu item ID.
* @param mixed $value Metadata value.
*
* @return void
*/
public static function update( $id, $value ) {
/**
* Allow plugins/themes to filter the values
*
* Deprecated.
*
* @since 0.1.0
* @param array $value Metadata value.
* @param int $id Menu item ID.
*/
$_value = apply_filters( 'menu_icons_values', $value, $id );
if ( $_value !== $value && WP_DEBUG ) {
_deprecated_function( 'menu_icons_values', '0.8.0', 'menu_icons_item_meta_values' );
}
/**
* Allow plugins/themes to filter the values
*
* @since 0.8.0
* @param array $value Metadata value.
* @param int $id Menu item ID.
*/
$value = apply_filters( 'menu_icons_item_meta_values', $_value, $id );
// Don't bother saving if `type` or `icon` is not set.
if ( empty( $value['type'] ) || empty( $value['icon'] ) ) {
$value = false;
}
// Update
if ( ! empty( $value ) ) {
update_post_meta( $id, self::KEY, $value );
} else {
delete_post_meta( $id, self::KEY );
}
}
}

View File

@ -0,0 +1,305 @@
<?php
/**
* Menu editor handler
*
* @package Menu_Icons
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
/**
* Nav menu admin
*/
final class Menu_Icons_Picker {
/**
* Initialize class
*
* @since 0.1.0
*/
public static function init() {
add_action( 'load-nav-menus.php', array( __CLASS__, '_load_nav_menus' ) );
add_filter( 'wp_nav_menu_item_custom_fields', array( __CLASS__, '_fields' ), 10, 4 );
add_filter( 'manage_nav-menus_columns', array( __CLASS__, '_columns' ), 99 );
add_action( 'wp_update_nav_menu_item', array( __CLASS__, '_save' ), 10, 3 );
add_filter( 'icon_picker_type_props', array( __CLASS__, '_add_extra_type_props_data' ), 10, 3 );
if ( ! version_compare( get_bloginfo( 'version' ), '5.4', '>=' ) ) {
add_filter(
'wp_edit_nav_menu_walker', function() {
return 'Menu_Item_Custom_Fields_Walker';
}, 99
);
}
}
/**
* Load Icon Picker
*
* @since 0.9.0
* @wp_hook action load-nav-menus.php
*/
public static function _load_nav_menus() {
Icon_Picker::instance()->load();
add_action( 'print_media_templates', array( __CLASS__, '_media_templates' ) );
}
/**
* Get menu item setting fields
*
* @since 0.9.0
* @access protected
* @param array $meta Menu item meta value.
* @return array
*/
protected static function _get_menu_item_fields( $meta ) {
$fa_icon = sprintf( '%s-%s', $meta['type'], $meta['icon'] );
$font_awesome5 = font_awesome_backward_compatible();
if ( array_key_exists( $fa_icon, $font_awesome5 ) ) {
$fa5_icon = $font_awesome5[ $fa_icon ];
$fa5_class = explode( ' ', $fa5_icon );
$type = reset( $fa5_class );
$icon = end( $fa5_class );
$meta['icon'] = sprintf( '%s %s', $type, $icon );
}
$fields = array_merge(
array(
array(
'id' => 'type',
'label' => __( 'Type', 'menu-icons' ),
'value' => $meta['type'],
),
array(
'id' => 'icon',
'label' => __( 'Icon', 'menu-icons' ),
'value' => $meta['icon'],
),
),
Menu_Icons_Settings::get_settings_fields( $meta )
);
return $fields;
}
/**
* Print fields
*
* @since 0.1.0
* @access protected
* @uses add_action() Calls 'menu_icons_before_fields' hook
* @uses add_action() Calls 'menu_icons_after_fields' hook
* @wp_hook action menu_item_custom_fields
*
* @param object $item Menu item data object.
* @param int $depth Nav menu depth.
* @param array $args Menu item args.
* @param int $id Nav menu ID.
*
* @return string Form fields
*/
public static function _fields( $id, $item, $depth, $args ) {
$input_id = sprintf( 'menu-icons-%d', $item->ID );
$input_name = sprintf( 'menu-icons[%d]', $item->ID );
$menu_settings = Menu_Icons_Settings::get_menu_settings( Menu_Icons_Settings::get_current_menu_id() );
$meta = Menu_Icons_Meta::get( $item->ID, $menu_settings );
$fields = self::_get_menu_item_fields( $meta );
?>
<div class="field-icon description-wide menu-icons-wrap" data-id="<?php echo json_encode( $item->ID ); ?>">
<?php
/**
* Allow plugins/themes to inject HTML before menu icons' fields
*
* @param object $item Menu item data object.
* @param int $depth Nav menu depth.
* @param array $args Menu item args.
* @param int $id Nav menu ID.
*
*/
do_action( 'menu_icons_before_fields', $item, $depth, $args, $id );
?>
<p class="description submitbox">
<label><?php esc_html_e( 'Icon:', 'menu-icons' ) ?></label>
<?php printf( '<a class="_select">%s</a>', esc_html__( 'Select', 'menu-icons' ) ); ?>
<?php printf( '<a class="_remove submitdelete hidden">%s</a>', esc_html__( 'Remove', 'menu-icons' ) ); ?>
</p>
<div class="_settings hidden">
<?php
foreach ( $fields as $field ) {
printf(
'<label>%1$s: <input type="text" name="%2$s" class="_mi-%3$s" value="%4$s" /></label><br />',
esc_html( $field['label'] ),
esc_attr( "{$input_name}[{$field['id']}]" ),
esc_attr( $field['id'] ),
esc_attr( $field['value'] )
);
}
// The fields below will not be saved. They're only used for the preview.
printf( '<input type="hidden" class="_mi-url" value="%s" />', esc_attr( $meta['url'] ) );
?>
</div>
<?php
/**
* Allow plugins/themes to inject HTML after menu icons' fields
*
* @param object $item Menu item data object.
* @param int $depth Nav menu depth.
* @param array $args Menu item args.
* @param int $id Nav menu ID.
*
*/
do_action( 'menu_icons_after_fields', $item, $depth, $args, $id );
?>
</div>
<?php
}
/**
* Add our field to the screen options toggle
*
* @since 0.1.0
* @access private
* @wp_hook action manage_nav-menus_columns
* @link http://codex.wordpress.org/Plugin_API/Filter_Reference/manage_posts_columns
*
* @param array $columns Menu item columns
*
* @return array
*/
public static function _columns( $columns ) {
$columns['icon'] = __( 'Icon', 'menu-icons' );
return $columns;
}
/**
* Save menu item's icons metadata
*
* @since 0.1.0
* @access protected
* @wp_hook action wp_update_nav_menu_item
* @link http://codex.wordpress.org/Plugin_API/Action_Reference/wp_update_nav_menu_item
*
* @param int $menu_id Nav menu ID.
* @param int $menu_item_db_id Menu item ID.
* @param array $menu_item_args Menu item data.
*/
public static function _save( $menu_id, $menu_item_db_id, $menu_item_args ) {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
return;
}
if ( ! function_exists( 'get_current_screen' ) ) {
return;
}
$screen = get_current_screen();
if ( ! $screen instanceof WP_Screen || 'nav-menus' !== $screen->id ) {
return;
}
check_admin_referer( 'update-nav_menu', 'update-nav-menu-nonce' );
// Sanitize
if ( ! empty( $_POST['menu-icons'][ $menu_item_db_id ] ) ) {
$value = array_map(
'sanitize_text_field',
wp_unslash( (array) $_POST['menu-icons'][ $menu_item_db_id ] )
);
} else {
$value = array();
}
Menu_Icons_Meta::update( $menu_item_db_id, $value );
}
/**
* Get and print media templates from all types
*
* @since 0.2.0
* @since 0.9.0 Deprecate menu_icons_media_templates filter.
* @wp_hook action print_media_templates
*/
public static function _media_templates() {
$id_prefix = 'tmpl-menu-icons';
// Deprecated.
$templates = apply_filters( 'menu_icons_media_templates', array() );
if ( ! empty( $templates ) ) {
if ( WP_DEBUG ) {
_deprecated_function( 'menu_icons_media_templates', '0.9.0', 'menu_icons_js_templates' );
}
foreach ( $templates as $key => $template ) {
$id = sprintf( '%s-%s', $id_prefix, $key );
self::_print_tempate( $id, $template );
}
}
require_once dirname( __FILE__ ) . '/media-template.php';
}
/**
* Print media template
*
* @since 0.2.0
* @param string $id Template ID.
* @param string $template Media template HTML.
*/
protected static function _print_tempate( $id, $template ) {
?>
<script type="text/html" id="<?php echo esc_attr( $id ) ?>">
<?php echo $template; // xss ok ?>
</script>
<?php
}
/**
* Add extra icon type properties data
*
* @since 0.9.0
* @wp_hook action icon_picker_type_props
*
* @param array $props Icon type properties.
* @param string $id Icon type ID.
* @param Icon_Picker_Type $type Icon_Picker_Type object.
*
* @return array
*/
public static function _add_extra_type_props_data( $props, $id, $type ) {
$settings_fields = array(
'hide_label',
'position',
'vertical_align',
);
if ( 'Font' === $props['controller'] ) {
$settings_fields[] = 'font_size';
}
switch ( $id ) {
case 'image':
$settings_fields[] = 'image_size';
break;
case 'svg':
$settings_fields[] = 'svg_width';
break;
}
$props['data']['settingsFields'] = $settings_fields;
return $props;
}
}

View File

@ -0,0 +1,806 @@
<?php
/**
* Settings
*
* @package Menu_Icons
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
/**
* Menu Icons Settings module
*/
final class Menu_Icons_Settings {
const UPDATE_KEY = 'menu-icons-settings-update';
const RESET_KEY = 'menu-icons-settings-reset';
const TRANSIENT_KEY = 'menu_icons_message';
/**
* Default setting values
*
* @since 0.3.0
* @var array
* @access protected
*/
protected static $defaults = array(
'global' => array(
'icon_types' => array( 'dashicons' ),
),
);
/**
* Setting values
*
* @since 0.3.0
* @var array
* @access protected
*/
protected static $settings = array();
/**
* Script dependencies
*
* @since 0.9.0
* @access protected
* @var array
*/
protected static $script_deps = array( 'jquery' );
/**
* Settings init
*
* @since 0.3.0
*/
public static function init() {
// Include Menu Icons for Block Editor
if ( class_exists( '\ThemeIsle\GutenbergMenuIcons' ) ) {
\ThemeIsle\GutenbergMenuIcons::instance();
add_action( 'enqueue_block_assets', array( __CLASS__, '_enqueue_font_awesome' ) );
}
/**
* Allow themes/plugins to override the default settings
*
* @since 0.9.0
*
* @param array $default_settings Default settings.
*/
self::$defaults = apply_filters( 'menu_icons_settings_defaults', self::$defaults );
self::$settings = get_option( 'menu-icons', self::$defaults );
foreach ( self::$settings as $key => &$value ) {
if ( 'global' === $key ) {
// Remove unregistered icon types.
$value['icon_types'] = array_values(
array_intersect(
array_keys( Menu_Icons::get( 'types' ) ),
array_filter( (array) $value['icon_types'] )
)
);
} else {
// Backward-compatibility.
if ( isset( $value['width'] ) && ! isset( $value['svg_width'] ) ) {
$value['svg_width'] = $value['width'];
}
unset( $value['width'] );
}
}
unset( $value );
/**
* Allow themes/plugins to override the settings
*
* @since 0.9.0
*
* @param array $settings Menu Icons settings.
*/
self::$settings = apply_filters( 'menu_icons_settings', self::$settings );
if ( self::is_menu_icons_disabled_for_menu() ) {
return;
}
if ( ! empty( self::$settings['global']['icon_types'] ) ) {
require_once Menu_Icons::get( 'dir' ) . 'includes/picker.php';
Menu_Icons_Picker::init();
self::$script_deps[] = 'icon-picker';
}
add_action( 'load-nav-menus.php', array( __CLASS__, '_load_nav_menus' ), 1 );
add_action( 'wp_ajax_menu_icons_update_settings', array( __CLASS__, '_ajax_menu_icons_update_settings' ) );
}
/**
* Check if menu icons is disabled for a menu
*
* @since 0.8.0
*
* @param int $menu_id Menu ID. Defaults to current menu being edited.
*
* @return bool
*/
public static function is_menu_icons_disabled_for_menu( $menu_id = 0 ) {
if ( empty( $menu_id ) ) {
$menu_id = self::get_current_menu_id();
}
// When we're creating a new menu or the recently edited menu
// could not be found.
if ( empty( $menu_id ) ) {
return true;
}
$menu_settings = self::get_menu_settings( $menu_id );
$is_disabled = ! empty( $menu_settings['disabled'] );
return $is_disabled;
}
/**
* Get ID of menu being edited
*
* @since 0.7.0
* @since 0.8.0 Get the recently edited menu from user option.
*
* @return int
*/
public static function get_current_menu_id() {
global $nav_menu_selected_id;
if ( ! empty( $nav_menu_selected_id ) ) {
return $nav_menu_selected_id;
}
if ( is_admin() && isset( $_REQUEST['menu'] ) ) {
$menu_id = absint( $_REQUEST['menu'] );
} else {
$menu_id = absint( get_user_option( 'nav_menu_recently_edited' ) );
}
return $menu_id;
}
/**
* Get menu settings
*
* @since 0.3.0
*
* @param int $menu_id
*
* @return array
*/
public static function get_menu_settings( $menu_id ) {
$menu_settings = self::get( sprintf( 'menu_%d', $menu_id ) );
$menu_settings = apply_filters( 'menu_icons_menu_settings', $menu_settings, $menu_id );
if ( ! is_array( $menu_settings ) ) {
$menu_settings = array();
}
return $menu_settings;
}
/**
* Get setting value
*
* @since 0.3.0
* @return mixed
*/
public static function get() {
$args = func_get_args();
return kucrut_get_array_value_deep( self::$settings, $args );
}
/**
* Prepare wp-admin/nav-menus.php page
*
* @since 0.3.0
* @wp_hook action load-nav-menus.php
*/
public static function _load_nav_menus() {
add_action( 'admin_enqueue_scripts', array( __CLASS__, '_enqueue_assets' ), 99 );
/**
* Allow settings meta box to be disabled.
*
* @since 0.4.0
*
* @param bool $disabled Defaults to FALSE.
*/
$settings_disabled = apply_filters( 'menu_icons_disable_settings', false );
if ( true === $settings_disabled ) {
return;
}
self::_maybe_update_settings();
self::_add_settings_meta_box();
add_action( 'admin_notices', array( __CLASS__, '_admin_notices' ) );
}
/**
* Update settings
*
* @since 0.3.0
*/
public static function _maybe_update_settings() {
if ( ! empty( $_POST['menu-icons']['settings'] ) ) {
check_admin_referer( self::UPDATE_KEY, self::UPDATE_KEY );
$redirect_url = self::_update_settings( $_POST['menu-icons']['settings'] ); // Input var okay.
wp_redirect( $redirect_url );
} elseif ( ! empty( $_REQUEST[ self::RESET_KEY ] ) ) {
check_admin_referer( self::RESET_KEY, self::RESET_KEY );
wp_redirect( self::_reset_settings() );
}
}
/**
* Update settings
*
* @since 0.7.0
* @access protected
*
* @param array $values Settings values.
*
* @return string Redirect URL.
*/
protected static function _update_settings( $values ) {
update_option(
'menu-icons',
wp_parse_args(
kucrut_validate( $values ),
self::$settings
)
);
set_transient( self::TRANSIENT_KEY, 'updated', 30 );
$redirect_url = remove_query_arg(
array( 'menu-icons-reset' ),
wp_get_referer()
);
return $redirect_url;
}
/**
* Reset settings
*
* @since 0.7.0
* @access protected
* @return string Redirect URL.
*/
protected static function _reset_settings() {
delete_option( 'menu-icons' );
set_transient( self::TRANSIENT_KEY, 'reset', 30 );
$redirect_url = remove_query_arg(
array( self::RESET_KEY, 'menu-icons-updated' ),
wp_get_referer()
);
return $redirect_url;
}
/**
* Settings meta box
*
* @since 0.3.0
* @access private
*/
private static function _add_settings_meta_box() {
add_meta_box(
'menu-icons-settings',
__( 'Menu Icons Settings', 'menu-icons' ),
array( __CLASS__, '_meta_box' ),
'nav-menus',
'side',
'low',
array()
);
}
/**
* Update settings via ajax
*
* @since 0.7.0
* @wp_hook action wp_ajax_menu_icons_update_settings
*/
public static function _ajax_menu_icons_update_settings() {
check_ajax_referer( self::UPDATE_KEY, self::UPDATE_KEY );
if ( empty( $_POST['menu-icons']['settings'] ) ) {
wp_send_json_error();
}
$redirect_url = self::_update_settings( $_POST['menu-icons']['settings'] ); // Input var okay.
wp_send_json_success( array( 'redirectUrl' => $redirect_url ) );
}
/**
* Print admin notices
*
* @since 0.3.0
* @wp_hook action admin_notices
*/
public static function _admin_notices() {
$messages = array(
'updated' => __( '<strong>Menu Icons Settings</strong> have been successfully updated.', 'menu-icons' ),
'reset' => __( '<strong>Menu Icons Settings</strong> have been successfully reset.', 'menu-icons' ),
);
$message_type = get_transient( self::TRANSIENT_KEY );
if ( ! empty( $message_type ) && ! empty( $messages[ $message_type ] ) ) {
printf(
'<div class="updated notice is-dismissible"><p>%s</p></div>',
wp_kses( $messages[ $message_type ], array( 'strong' => true ) )
);
}
delete_transient( self::TRANSIENT_KEY );
}
/**
* Settings meta box
*
* @since 0.3.0
*/
public static function _meta_box() {
?>
<div class="taxonomydiv">
<ul id="menu-icons-settings-tabs" class="taxonomy-tabs add-menu-item-tabs hide-if-no-js">
<?php foreach ( self::get_fields() as $section ) : ?>
<?php
printf(
'<li><a href="#" title="%s" class="mi-settings-nav-tab" data-type="menu-icons-settings-%s">%s</a></li>',
esc_attr( $section['description'] ),
esc_attr( $section['id'] ),
esc_html( $section['title'] )
);
?>
<?php endforeach; ?>
<?php
printf(
'<li><a href="#" class="mi-settings-nav-tab" data-type="menu-icons-settings-extensions">%s</a></li>',
esc_html__( 'Extensions', 'menu-icons' )
);
?>
</ul>
<?php foreach ( self::_get_fields() as $section_index => $section ) : ?>
<div id="menu-icons-settings-<?php echo esc_attr( $section['id'] ) ?>"
class="tabs-panel _<?php echo esc_attr( $section_index ) ?>">
<h4 class="hide-if-js"><?php echo esc_html( $section['title'] ) ?></h4>
<?php foreach ( $section['fields'] as $field ) : ?>
<div class="_field">
<?php
printf(
'<label for="%s" class="_main">%s</label>',
esc_attr( $field->id ),
esc_html( $field->label )
);
// Help text.
if ( $field->help_text ) :
printf( '<i>%s</i>', esc_html( $field->help_text ) );
endif;
$field->render();
?>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
<div id="menu-icons-settings-extensions" class="tabs-panel _extensions">
<h4 class="hide-if-js"><?php echo esc_html__( 'Extensions', 'menu-icons' ) ?></h4>
<ul>
<li><a target="_blank" href="http://wordpress.org/plugins/menu-icons-icomoon/">IcoMoon</a></li>
</ul>
</div>
</div>
<p class="submitbox button-controls">
<?php wp_nonce_field( self::UPDATE_KEY, self::UPDATE_KEY ) ?>
<span class="list-controls">
<?php
printf(
'<a href="%s" title="%s" class="select-all submitdelete">%s</a>',
esc_url(
wp_nonce_url(
admin_url( '/nav-menus.php' ),
self::RESET_KEY,
self::RESET_KEY
)
),
esc_attr__( 'Discard all changes and reset to default state', 'menu-icons' ),
esc_html__( 'Reset', 'menu-icons' )
);
?>
</span>
<span class="add-to-menu">
<span class="spinner"></span>
<?php
submit_button(
__( 'Save Settings', 'menu-icons' ),
'secondary',
'menu-icons-settings-save',
false
);
?>
</span>
</p>
<?php
}
/**
* Get settings sections
*
* @since 0.3.0
* @uses apply_filters() Calls 'menu_icons_settings_sections'.
* @return array
*/
public static function get_fields() {
$menu_id = self::get_current_menu_id();
$icon_types = wp_list_pluck( Menu_Icons::get( 'types' ), 'name' );
asort( $icon_types );
$sections = array(
'global' => array(
'id' => 'global',
'title' => __( 'Global', 'menu-icons' ),
'description' => __( 'Global settings', 'menu-icons' ),
'fields' => array(
array(
'id' => 'icon_types',
'type' => 'checkbox',
'label' => __( 'Icon Types', 'menu-icons' ),
'choices' => $icon_types,
'value' => self::get( 'global', 'icon_types' ),
),
array(
'id' => 'fa5_extra_icons',
'type' => 'textarea',
'label' => __( 'FA Custom Icon Classes', 'menu-icons' ),
'value' => self::get( 'global', 'fa5_extra_icons' ),
'help_text' => '( comma separated icons )',
),
),
'args' => array(),
),
);
if ( ! empty( $menu_id ) ) {
$menu_term = get_term( $menu_id, 'nav_menu' );
$menu_key = sprintf( 'menu_%d', $menu_id );
$menu_settings = self::get_menu_settings( $menu_id );
$sections['menu'] = array(
'id' => $menu_key,
'title' => __( 'Current Menu', 'menu-icons' ),
'description' => sprintf(
__( '"%s" menu settings', 'menu-icons' ),
apply_filters( 'single_term_title', $menu_term->name )
),
'fields' => self::get_settings_fields( $menu_settings ),
'args' => array( 'inline_description' => true ),
);
}
return apply_filters( 'menu_icons_settings_sections', $sections, $menu_id );
}
/**
* Get settings fields
*
* @since 0.4.0
*
* @param array $values Values to be applied to each field.
*
* @uses apply_filters() Calls 'menu_icons_settings_fields'.
* @return array
*/
public static function get_settings_fields( array $values = array() ) {
$fields = array(
'hide_label' => array(
'id' => 'hide_label',
'type' => 'select',
'label' => __( 'Hide Label', 'menu-icons' ),
'default' => '',
'choices' => array(
array(
'value' => '',
'label' => __( 'No', 'menu-icons' ),
),
array(
'value' => '1',
'label' => __( 'Yes', 'menu-icons' ),
),
),
),
'position' => array(
'id' => 'position',
'type' => 'select',
'label' => __( 'Position', 'menu-icons' ),
'default' => 'before',
'choices' => array(
array(
'value' => 'before',
'label' => __( 'Before', 'menu-icons' ),
),
array(
'value' => 'after',
'label' => __( 'After', 'menu-icons' ),
),
),
),
'vertical_align' => array(
'id' => 'vertical_align',
'type' => 'select',
'label' => __( 'Vertical Align', 'menu-icons' ),
'default' => 'middle',
'choices' => array(
array(
'value' => 'super',
'label' => __( 'Super', 'menu-icons' ),
),
array(
'value' => 'top',
'label' => __( 'Top', 'menu-icons' ),
),
array(
'value' => 'text-top',
'label' => __( 'Text Top', 'menu-icons' ),
),
array(
'value' => 'middle',
'label' => __( 'Middle', 'menu-icons' ),
),
array(
'value' => 'baseline',
'label' => __( 'Baseline', 'menu-icons' ),
),
array(
'value' => 'text-bottom',
'label' => __( 'Text Bottom', 'menu-icons' ),
),
array(
'value' => 'bottom',
'label' => __( 'Bottom', 'menu-icons' ),
),
array(
'value' => 'sub',
'label' => __( 'Sub', 'menu-icons' ),
),
),
),
'font_size' => array(
'id' => 'font_size',
'type' => 'number',
'label' => __( 'Font Size', 'menu-icons' ),
'default' => '1.2',
'description' => 'em',
'attributes' => array(
'min' => '0.1',
'step' => '0.1',
),
),
'svg_width' => array(
'id' => 'svg_width',
'type' => 'number',
'label' => __( 'SVG Width', 'menu-icons' ),
'default' => '1',
'description' => 'em',
'attributes' => array(
'min' => '.5',
'step' => '.1',
),
),
'image_size' => array(
'id' => 'image_size',
'type' => 'select',
'label' => __( 'Image Size', 'menu-icons' ),
'default' => 'thumbnail',
'choices' => kucrut_get_image_sizes(),
),
);
$fields = apply_filters( 'menu_icons_settings_fields', $fields );
foreach ( $fields as &$field ) {
if ( isset( $values[ $field['id'] ] ) ) {
$field['value'] = $values[ $field['id'] ];
}
if ( ! isset( $field['value'] ) && isset( $field['default'] ) ) {
$field['value'] = $field['default'];
}
}
unset( $field );
return $fields;
}
/**
* Get processed settings fields
*
* @since 0.3.0
* @access private
* @return array
*/
private static function _get_fields() {
if ( ! class_exists( 'Kucrut_Form_Field' ) ) {
require_once Menu_Icons::get( 'dir' ) . 'includes/library/form-fields.php';
}
$keys = array( 'menu-icons', 'settings' );
$sections = self::get_fields();
foreach ( $sections as &$section ) {
$_keys = array_merge( $keys, array( $section['id'] ) );
$_args = array_merge( array( 'keys' => $_keys ), $section['args'] );
foreach ( $section['fields'] as &$field ) {
$field = Kucrut_Form_Field::create( $field, $_args );
}
unset( $field );
}
unset( $section );
return $sections;
}
/**
* Enqueue scripts & styles for Block Icons
*
* @since 0.3.0
* @wp_hook action enqueue_block_assets
*/
public static function _enqueue_font_awesome() {
$url = Menu_Icons::get( 'url' );
wp_register_style(
'font-awesome-5',
"{$url}css/fontawesome/css/all.min.css"
);
}
/**
* Enqueue scripts & styles for Appearance > Menus page
*
* @since 0.3.0
* @wp_hook action admin_enqueue_scripts
*/
public static function _enqueue_assets() {
$url = Menu_Icons::get( 'url' );
$suffix = kucrut_get_script_suffix();
if ( defined( 'MENU_ICONS_SCRIPT_DEBUG' ) && MENU_ICONS_SCRIPT_DEBUG ) {
$script_url = '//localhost:8081/';
} else {
$script_url = $url;
}
wp_enqueue_style(
'menu-icons',
"{$url}css/admin{$suffix}.css",
false,
Menu_Icons::VERSION
);
wp_enqueue_script(
'menu-icons',
"{$script_url}js/admin{$suffix}.js",
self::$script_deps,
Menu_Icons::VERSION,
true
);
$customizer_url = add_query_arg(
array(
'autofocus[section]' => 'custom_css',
'return' => admin_url( 'nav-menus.php' ),
),
admin_url( 'customize.php' )
);
/**
* Allow plugins/themes to filter the settings' JS data
*
* @since 0.9.0
*
* @param array $js_data JS Data.
*/
$menu_current_theme = '';
$theme = wp_get_theme();
if ( ! empty( $theme ) ) {
if ( is_child_theme() && $theme->parent() ) {
$menu_current_theme = $theme->parent()->get( 'Name' );
} else {
$menu_current_theme = $theme->get( 'Name' );
}
}
$upsell_notices = array();
$box_data = '<div id="menu-icons-sidebar">';
if ( ( $menu_current_theme != 'Neve' ) ) {
$upsell_notices['neve'] = array(
'content' => wp_sprintf( '<div class="menu-icon-notice-popup-img"><img src="%s"/></div><div class="menu-icon-notice-popup"><h4>%s</h4>%s', plugin_dir_url( __FILE__ ) . '../images/neve-theme.jpg', __( 'Check-out our latest lightweight FREE theme - Neve', 'menu-icons' ), __( 'Neves mobile-first approach, compatibility with AMP and popular page-builders makes website building accessible for everyone.', 'menu-icons' ) ),
'url' => add_query_arg(
array(
'theme' => 'neve',
),
admin_url( 'theme-install.php' )
),
'btn_text' => __( 'Preview Neve', 'menu-icons' ),
);
}
if ( ! in_array( 'otter-blocks/otter-blocks.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ), true ) ) {
$upsell_notices['otter-blocks'] = array(
'content' => wp_sprintf( '<div class="menu-icon-notice-popup-img"><img src="%s"/></div><div class="menu-icon-notice-popup"><h4>%s</h4>%s', plugin_dir_url( __FILE__ ) . '../images/otter-block.png', __( 'Build professional pages with Otter Blocks', 'menu-icons' ), __( 'Otter is a dynamic collection of page building blocks and templates, covering all the elements you need to build your WordPress site.', 'menu-icons' ) ),
'url' => add_query_arg(
array(
'tab' => 'plugin-information',
'plugin' => 'otter-blocks',
'TB_iframe' => true,
'width' => 772,
'height' => 551,
),
admin_url( 'plugin-install.php' )
),
'btn_text' => __( 'Preview Otter Blocks', 'menu-icons' ),
);
}
if ( ! empty( $upsell_notices ) ) {
$rand_key = array_rand( $upsell_notices );
$menu_upgrade_hestia_box_text = $upsell_notices[ $rand_key ]['content'];
$box_data .= '<div class="nv-upgrade-notice postbox new-card">';
$box_data .= wp_kses_post( wpautop( $menu_upgrade_hestia_box_text ) );
$box_data .= '<a class="button" href="' . $upsell_notices[ $rand_key ]['url'] . '" target="_blank">' . $upsell_notices[ $rand_key ]['btn_text'] . '</a>';
$box_data .= '</div></div>';
}
$js_data = apply_filters(
'menu_icons_settings_js_data',
array(
'text' => array(
'title' => __( 'Select Icon', 'menu-icons' ),
'select' => __( 'Select', 'menu-icons' ),
'remove' => __( 'Remove', 'menu-icons' ),
'change' => __( 'Change', 'menu-icons' ),
'all' => __( 'All', 'menu-icons' ),
'preview' => __( 'Preview', 'menu-icons' ),
'settingsInfo' => sprintf(
'<div> %1$s <p>' . esc_html__( 'Please note that the actual look of the icons on the front-end will also be affected by the style of your active theme. You can add your own CSS using %2$s or a plugin such as %3$s if you need to override it.', 'menu-icons' ) . '</p></div>',
$box_data,
sprintf(
'<a href="%s">%s</a>',
esc_url( $customizer_url ),
esc_html__( 'the customizer', 'menu-icons' )
),
'<a target="_blank" href="https://wordpress.org/plugins/advanced-css-editor/">Advanced CSS Editor</a>'
),
),
'settingsFields' => self::get_settings_fields(),
'activeTypes' => self::get( 'global', 'icon_types' ),
'ajaxUrls' => array(
'update' => add_query_arg( 'action', 'menu_icons_update_settings', admin_url( '/admin-ajax.php' ) ),
),
'menuSettings' => self::get_menu_settings( self::get_current_menu_id() ),
)
);
wp_localize_script( 'menu-icons', 'menuIcons', $js_data );
}
}

View File

@ -0,0 +1,24 @@
<?php
/**
* Icon fonts handler
*
* @package Menu_Icons
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
require_once dirname( __FILE__ ) . '/type.php';
/**
* Generic handler for icon fonts
*
*/
abstract class Menu_Icons_Type_Fonts extends Menu_Icons_Type {
/**
* Constructor
*
* @since 0.9.0
*/
public function __construct() {
_deprecated_function( __CLASS__, '0.9.0', 'Icon_Picker_Type_Font' );
}
}

View File

@ -0,0 +1,107 @@
<?php
/**
* Icon type handler
*
* @package Menu_Icons
* @version 0.1.0
* @author Dzikri Aziz <kvcrvt@gmail.com>
*/
/**
* Generic handler for icon type
*
* @since 0.1.0
*/
abstract class Menu_Icons_Type {
/**
* Holds icon type
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $type;
/**
* Holds icon label
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $label;
/**
* Holds icon stylesheet URL
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $stylesheet;
/**
* Custom stylesheet ID
*
* @since 0.8.0
* @access protected
* @var string
*/
protected $stylesheet_id;
/**
* Holds icon version
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $version;
/**
* Holds array key for icon value
*
* @since 0.1.0
* @access protected
* @var string
*/
protected $key;
/**
* Holds menu settings
*
* @since 0.3.0
* @access protected
* @var array
*/
protected $menu_setttings = array();
/**
* Class constructor
*
* This simply sets $key
*
* @since 0.1.0
* @since 0.9.0 Deprecated.
*/
function __construct() {
_deprecated_function( __CLASS__, '0.9.0', 'Icon_Picker_Type' );
}
/**
* Register our type
*
* @since 0.1.0
* @since 0.9.0 Deprecated. This simply returns the $types.
* @param array $types Icon Types
* @uses apply_filters() Calls 'menu_icons_{type}_props' on type properties.
* @return array
*/
public function register( $types ) {
return $types;
}
}

View File

@ -0,0 +1,655 @@
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function(value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 2);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
/* global menuIcons:false */
__webpack_require__(3);
(function ($) {
var miPicker;
if (!menuIcons.activeTypes || _.isEmpty(menuIcons.activeTypes)) {
return;
}
/**
* @namespace
* @property {object} templates - Cached templates for the item previews on the fields
* @property {string} wrapClass - Field wrapper's class
* @property {object} frame - Menu Icons' media frame instance
* @property {object} target - Frame's target model
*/
miPicker = {
templates: {},
wrapClass: 'div.menu-icons-wrap',
frame: null,
target: new wp.media.model.IconPickerTarget(),
/**
* Callback function to filter active icon types
*
* TODO: Maybe move to frame view?
*
* @param {string} type - Icon type.
*/
typesFilter: function (type) {
return $.inArray(type.id, menuIcons.activeTypes) >= 0;
},
/**
* Create Menu Icons' media frame
*/
createFrame: function () {
miPicker.frame = new wp.media.view.MediaFrame.MenuIcons({
target: miPicker.target,
ipTypes: _.filter(iconPicker.types, miPicker.typesFilter),
SidebarView: wp.media.view.MenuIconsSidebar
});
},
/**
* Pick icon for a menu item and open the frame
*
* @param {object} model - Menu item model.
*/
pickIcon: function (model) {
miPicker.frame.target.set(model, {
silent: true
});
miPicker.frame.open();
},
/**
* Set or unset icon
*
* @param {object} e - jQuery click event.
*/
setUnset: function (e) {
var $el = $(e.currentTarget),
$clicked = $(e.target);
e.preventDefault();
if ($clicked.hasClass('_select') || $clicked.hasClass('_icon')) {
miPicker.setIcon($el);
} else if ($clicked.hasClass('_remove')) {
miPicker.unsetIcon($el);
}
},
/**
* Set Icon
*
* @param {object} $el - jQuery object.
*/
setIcon: function ($el) {
var id = $el.data('id'),
frame = miPicker.frame,
items = frame.menuItems,
model = items.get(id);
if (model) {
miPicker.pickIcon(model.toJSON());
return;
}
model = {
id: id,
$el: $el,
$title: $('#edit-menu-item-title-' + id),
$inputs: {}
}; // Collect menu item's settings fields and use them
// as the model's attributes.
$el.find('div._settings input').each(function () {
var $input = $(this),
key = $input.attr('class').replace('_mi-', ''),
value = $input.val();
if (!value) {
if (_.has(menuIcons.menuSettings, key)) {
value = menuIcons.menuSettings[key];
} else if (_.has(menuIcons.settingsFields, key)) {
value = menuIcons.settingsFields[key]['default'];
}
}
model[key] = value;
model.$inputs[key] = $input;
});
items.add(model);
miPicker.pickIcon(model);
},
/**
* Unset icon
*
* @param {object} $el - jQuery object.
*/
unsetIcon: function ($el) {
var id = $el.data('id');
$el.find('div._settings input').val('');
$el.trigger('mi:update');
miPicker.frame.menuItems.remove(id);
},
/**
* Update valeus of menu item's setting fields
*
* When the type and icon is set, this will (re)generate the icon
* preview on the menu item field.
*
* @param {object} e - jQuery event.
*/
updateField: function (e) {
var $el = $(e.currentTarget),
$set = $el.find('a._select'),
$unset = $el.find('a._remove'),
type = $el.find('input._mi-type').val(),
icon = $el.find('input._mi-icon').val(),
url = $el.find('input._mi-url').val(),
template;
if (type === '' || icon === '' || _.indexOf(menuIcons.activeTypes, type) < 0) {
$set.text(menuIcons.text.select).attr('title', '');
$unset.addClass('hidden');
return;
}
if (miPicker.templates[type]) {
template = miPicker.templates[type];
} else {
template = miPicker.templates[type] = wp.template('menu-icons-item-field-preview-' + iconPicker.types[type].templateId);
}
$unset.removeClass('hidden');
$set.attr('title', menuIcons.text.change);
$set.html(template({
type: type,
icon: icon,
url: url
}));
},
/**
* Initialize picker functionality
*
* #fires mi:update
*/
init: function () {
miPicker.createFrame();
$(document).on('click', miPicker.wrapClass, miPicker.setUnset).on('mi:update', miPicker.wrapClass, miPicker.updateField); // Trigger 'mi:update' event to generate the icons on the item fields.
$(miPicker.wrapClass).trigger('mi:update');
}
};
miPicker.init();
})(jQuery);
/***/ }),
/* 1 */
/***/ (function(module, exports) {
(function ($) {
/**
* Settings box tabs
*
* We can't use core's tabs script here because it will clear the
* checkboxes upon tab switching
*/
$('#menu-icons-settings-tabs').on('click', 'a.mi-settings-nav-tab', function (e) {
var $el = $(this).blur(),
$target = $('#' + $el.data('type'));
e.preventDefault();
e.stopPropagation();
$el.parent().addClass('tabs').siblings().removeClass('tabs');
$target.removeClass('tabs-panel-inactive').addClass('tabs-panel-active').show().siblings('div.tabs-panel').hide().addClass('tabs-panel-inactive').removeClass('tabs-panel-active');
}).find('a.mi-settings-nav-tab').first().click(); // Settings meta box
$('#menu-icons-settings-save').on('click', function (e) {
var $button = $(this).prop('disabled', true),
$spinner = $button.siblings('span.spinner');
e.preventDefault();
e.stopPropagation();
$spinner.css({
display: 'inline-block',
visibility: 'visible'
});
$.ajax({
type: 'POST',
url: window.menuIcons.ajaxUrls.update,
data: $('#menu-icons-settings :input').serialize(),
success: function (response) {
if (response.success && response.data.redirectUrl === true) {
window.location = response.data.redirectUrl;
} else {
$button.prop('disabled', false);
}
$spinner.hide();
},
fail: function () {
$spinner.hide();
}
});
});
})(jQuery);
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(1);
__webpack_require__(0);
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
wp.media.model.MenuIconsItemSettingField = __webpack_require__(4);
wp.media.model.MenuIconsItemSettings = __webpack_require__(5);
wp.media.model.MenuIconsItem = __webpack_require__(6);
wp.media.view.MenuIconsItemSettingField = __webpack_require__(9);
wp.media.view.MenuIconsItemSettings = __webpack_require__(10);
wp.media.view.MenuIconsItemPreview = __webpack_require__(8);
wp.media.view.MenuIconsSidebar = __webpack_require__(11);
wp.media.view.MediaFrame.MenuIcons = __webpack_require__(7);
/***/ }),
/* 4 */
/***/ (function(module, exports) {
/**
* wp.media.model.MenuIconsItemSettingField
*
* @class
* @augments Backbone.Model
*/
var MenuIconsItemSettingField = Backbone.Model.extend({
defaults: {
id: '',
label: '',
value: '',
type: 'text'
}
});
module.exports = MenuIconsItemSettingField;
/***/ }),
/* 5 */
/***/ (function(module, exports) {
/**
* wp.media.model.MenuIconsItemSettings
*
* @class
* @augments Backbone.Collection
*/
var MenuIconsItemSettings = Backbone.Collection.extend({
model: wp.media.model.MenuIconsItemSettingField
});
module.exports = MenuIconsItemSettings;
/***/ }),
/* 6 */
/***/ (function(module, exports) {
/**
* wp.media.model.MenuIconsItem
*
* @class
* @augments Backbone.Model
*/
var Item = Backbone.Model.extend({
initialize: function () {
this.on('change', this.updateValues, this);
},
/**
* Update the values of menu item's settings fields
*
* #fires mi:update
*/
updateValues: function () {
_.each(this.get('$inputs'), function ($input, key) {
$input.val(this.get(key));
}, this); // Trigger the 'mi:update' event to regenerate the icon on the field.
this.get('$el').trigger('mi:update');
}
});
module.exports = Item;
/***/ }),
/* 7 */
/***/ (function(module, exports) {
/**
* wp.media.view.MediaFrame.MenuIcons
*
* @class
* @augments wp.media.view.MediaFrame.IconPicker
* @augments wp.media.view.MediaFrame.Select
* @augments wp.media.view.MediaFrame
* @augments wp.media.view.Frame
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIcons = wp.media.view.MediaFrame.IconPicker.extend({
initialize: function () {
this.menuItems = new Backbone.Collection([], {
model: wp.media.model.MenuIconsItem
});
wp.media.view.MediaFrame.IconPicker.prototype.initialize.apply(this, arguments);
if (this.setMenuTabPanelAriaAttributes) {
this.off('open', this.setMenuTabPanelAriaAttributes, this); // Set the router ARIA tab panel attributes when the modal opens.
this.off('open', this.setRouterTabPanelAriaAttributes, this); // Update the menu ARIA tab panel attributes when the content updates.
this.off('content:render', this.setMenuTabPanelAriaAttributes, this); // Update the router ARIA tab panel attributes when the content updates.
this.off('content:render', this.setRouterTabPanelAriaAttributes, this);
}
this.listenTo(this.target, 'change', this.miUpdateItemProps);
this.on('select', this.miClearTarget, this);
},
miUpdateItemProps: function (props) {
var model = this.menuItems.get(props.id);
model.set(props.changed);
},
miClearTarget: function () {
this.target.clear({
silent: true
});
}
});
module.exports = MenuIcons;
/***/ }),
/* 8 */
/***/ (function(module, exports) {
/**
* wp.media.view.MenuIconsItemPreview
*
* @class
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIconsItemPreview = wp.media.View.extend({
tagName: 'p',
className: 'mi-preview menu-item attachment-info',
events: {
'click a': 'preventDefault'
},
initialize: function () {
wp.media.View.prototype.initialize.apply(this, arguments);
this.model.on('change', this.render, this);
},
render: function () {
var frame = this.controller,
state = frame.state(),
selected = state.get('selection').single(),
props = this.model.toJSON(),
data = _.extend(props, {
type: state.id,
icon: selected.id,
title: this.model.get('$title').val(),
url: state.ipGetIconUrl(selected, props.image_size)
}),
template = 'menu-icons-item-sidebar-preview-' + iconPicker.types[state.id].templateId + '-';
if (data.hide_label) {
template += 'hide_label';
} else {
template += data.position;
}
this.template = wp.media.template(template);
this.$el.html(this.template(data));
return this;
},
preventDefault: function (e) {
e.preventDefault();
}
});
module.exports = MenuIconsItemPreview;
/***/ }),
/* 9 */
/***/ (function(module, exports) {
var $ = jQuery,
MenuIconsItemSettingField;
/**
* wp.media.view.MenuIconsItemSettingField
*
* @class
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
MenuIconsItemSettingField = wp.media.View.extend({
tagName: 'label',
className: 'setting',
events: {
'change :input': '_update'
},
initialize: function () {
wp.media.View.prototype.initialize.apply(this, arguments);
this.template = wp.media.template('menu-icons-settings-field-' + this.model.get('type'));
this.model.on('change', this.render, this);
},
prepare: function () {
return this.model.toJSON();
},
_update: function (e) {
var value = $(e.currentTarget).val();
this.model.set('value', value);
this.options.item.set(this.model.id, value);
}
});
module.exports = MenuIconsItemSettingField;
/***/ }),
/* 10 */
/***/ (function(module, exports) {
/**
* wp.media.view.MenuIconsItemSettings
*
* @class
* @augments wp.media.view.PriorityList
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIconsItemSettings = wp.media.view.PriorityList.extend({
className: 'mi-settings attachment-info',
prepare: function () {
_.each(this.collection.map(this.createField, this), function (view) {
this.set(view.model.id, view);
}, this);
},
createField: function (model) {
var field = new wp.media.view.MenuIconsItemSettingField({
item: this.model,
model: model,
collection: this.collection
});
return field;
}
});
module.exports = MenuIconsItemSettings;
/***/ }),
/* 11 */
/***/ (function(module, exports) {
/**
* wp.media.view.MenuIconsSidebar
*
* @class
* @augments wp.media.view.IconPickerSidebar
* @augments wp.media.view.Sidebar
* @augments wp.media.view.PriorityList
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIconsSidebar = wp.media.view.IconPickerSidebar.extend({
initialize: function () {
var title = new wp.media.View({
tagName: 'h3',
priority: -10
});
var info = new wp.media.View({
tagName: 'p',
className: '_info',
priority: 1000
});
wp.media.view.IconPickerSidebar.prototype.initialize.apply(this, arguments);
title.$el.text(window.menuIcons.text.preview);
this.set('title', title);
info.$el.html(window.menuIcons.text.settingsInfo);
this.set('info', info);
},
createSingle: function () {
this.createPreview();
this.createSettings();
},
disposeSingle: function () {
this.unset('preview');
this.unset('settings');
},
createPreview: function () {
var self = this,
frame = self.controller,
state = frame.state(); // If the selected icon is still being downloaded (image or svg type),
// wait for it to complete before creating the preview.
if (state.dfd && state.dfd.state() === 'pending') {
state.dfd.done(function () {
self.createPreview();
});
return;
}
self.set('preview', new wp.media.view.MenuIconsItemPreview({
controller: frame,
model: frame.target,
priority: 80
}));
},
createSettings: function () {
var frame = this.controller,
state = frame.state(),
fieldIds = state.get('data').settingsFields,
fields = [];
_.each(fieldIds, function (fieldId) {
var field = window.menuIcons.settingsFields[fieldId],
model;
if (!field) {
return;
}
model = _.defaults({
value: frame.target.get(fieldId) || field['default']
}, field);
fields.push(model);
});
if (!fields.length) {
return;
}
this.set('settings', new wp.media.view.MenuIconsItemSettings({
controller: this.controller,
collection: new wp.media.model.MenuIconsItemSettings(fields),
model: frame.target,
type: this.options.type,
priority: 120
}));
}
});
module.exports = MenuIconsSidebar;
/***/ })
/******/ ]);

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
require( './settings' );
require( './picker' );

View File

@ -0,0 +1,9 @@
wp.media.model.MenuIconsItemSettingField = require( './models/item-setting-field.js' );
wp.media.model.MenuIconsItemSettings = require( './models/item-settings.js' );
wp.media.model.MenuIconsItem = require( './models/item.js' );
wp.media.view.MenuIconsItemSettingField = require( './views/item-setting-field.js' );
wp.media.view.MenuIconsItemSettings = require( './views/item-settings.js' );
wp.media.view.MenuIconsItemPreview = require( './views/item-preview.js' );
wp.media.view.MenuIconsSidebar = require( './views/sidebar.js' );
wp.media.view.MediaFrame.MenuIcons = require( './views/frame.js' );

View File

@ -0,0 +1,16 @@
/**
* wp.media.model.MenuIconsItemSettingField
*
* @class
* @augments Backbone.Model
*/
var MenuIconsItemSettingField = Backbone.Model.extend({
defaults: {
id: '',
label: '',
value: '',
type: 'text'
}
});
module.exports = MenuIconsItemSettingField;

View File

@ -0,0 +1,11 @@
/**
* wp.media.model.MenuIconsItemSettings
*
* @class
* @augments Backbone.Collection
*/
var MenuIconsItemSettings = Backbone.Collection.extend({
model: wp.media.model.MenuIconsItemSettingField
});
module.exports = MenuIconsItemSettings;

View File

@ -0,0 +1,27 @@
/**
* wp.media.model.MenuIconsItem
*
* @class
* @augments Backbone.Model
*/
var Item = Backbone.Model.extend({
initialize: function() {
this.on( 'change', this.updateValues, this );
},
/**
* Update the values of menu item's settings fields
*
* #fires mi:update
*/
updateValues: function() {
_.each( this.get( '$inputs' ), function( $input, key ) {
$input.val( this.get( key ) );
}, this );
// Trigger the 'mi:update' event to regenerate the icon on the field.
this.get( '$el' ).trigger( 'mi:update' );
}
});
module.exports = Item;

View File

@ -0,0 +1,46 @@
/**
* wp.media.view.MediaFrame.MenuIcons
*
* @class
* @augments wp.media.view.MediaFrame.IconPicker
* @augments wp.media.view.MediaFrame.Select
* @augments wp.media.view.MediaFrame
* @augments wp.media.view.Frame
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIcons = wp.media.view.MediaFrame.IconPicker.extend({
initialize: function() {
this.menuItems = new Backbone.Collection([], {
model: wp.media.model.MenuIconsItem
});
wp.media.view.MediaFrame.IconPicker.prototype.initialize.apply( this, arguments );
if(this.setMenuTabPanelAriaAttributes){
this.off( 'open', this.setMenuTabPanelAriaAttributes, this );
// Set the router ARIA tab panel attributes when the modal opens.
this.off( 'open', this.setRouterTabPanelAriaAttributes, this );
// Update the menu ARIA tab panel attributes when the content updates.
this.off( 'content:render', this.setMenuTabPanelAriaAttributes, this );
// Update the router ARIA tab panel attributes when the content updates.
this.off( 'content:render', this.setRouterTabPanelAriaAttributes, this );
}
this.listenTo( this.target, 'change', this.miUpdateItemProps );
this.on( 'select', this.miClearTarget, this );
},
miUpdateItemProps: function( props ) {
var model = this.menuItems.get( props.id );
model.set( props.changed );
},
miClearTarget: function() {
this.target.clear({ silent: true });
}
});
module.exports = MenuIcons;

View File

@ -0,0 +1,51 @@
/**
* wp.media.view.MenuIconsItemPreview
*
* @class
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIconsItemPreview = wp.media.View.extend({
tagName: 'p',
className: 'mi-preview menu-item attachment-info',
events: {
'click a': 'preventDefault'
},
initialize: function() {
wp.media.View.prototype.initialize.apply( this, arguments );
this.model.on( 'change', this.render, this );
},
render: function() {
var frame = this.controller,
state = frame.state(),
selected = state.get( 'selection' ).single(),
props = this.model.toJSON(),
data = _.extend( props, {
type: state.id,
icon: selected.id,
title: this.model.get( '$title' ).val(),
url: state.ipGetIconUrl( selected, props.image_size )
}),
template = 'menu-icons-item-sidebar-preview-' + iconPicker.types[ state.id ].templateId + '-';
if ( data.hide_label ) {
template += 'hide_label';
} else {
template += data.position;
}
this.template = wp.media.template( template );
this.$el.html( this.template( data ) );
return this;
},
preventDefault: function( e ) {
e.preventDefault();
}
});
module.exports = MenuIconsItemPreview;

View File

@ -0,0 +1,38 @@
var $ = jQuery,
MenuIconsItemSettingField;
/**
* wp.media.view.MenuIconsItemSettingField
*
* @class
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
MenuIconsItemSettingField = wp.media.View.extend({
tagName: 'label',
className: 'setting',
events: {
'change :input': '_update'
},
initialize: function() {
wp.media.View.prototype.initialize.apply( this, arguments );
this.template = wp.media.template( 'menu-icons-settings-field-' + this.model.get( 'type' ) );
this.model.on( 'change', this.render, this );
},
prepare: function() {
return this.model.toJSON();
},
_update: function( e ) {
var value = $( e.currentTarget ).val();
this.model.set( 'value', value );
this.options.item.set( this.model.id, value );
}
});
module.exports = MenuIconsItemSettingField;

View File

@ -0,0 +1,30 @@
/**
* wp.media.view.MenuIconsItemSettings
*
* @class
* @augments wp.media.view.PriorityList
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIconsItemSettings = wp.media.view.PriorityList.extend({
className: 'mi-settings attachment-info',
prepare: function() {
_.each( this.collection.map( this.createField, this ), function( view ) {
this.set( view.model.id, view );
}, this );
},
createField: function( model ) {
var field = new wp.media.view.MenuIconsItemSettingField({
item: this.model,
model: model,
collection: this.collection
});
return field;
}
});
module.exports = MenuIconsItemSettings;

View File

@ -0,0 +1,101 @@
/**
* wp.media.view.MenuIconsSidebar
*
* @class
* @augments wp.media.view.IconPickerSidebar
* @augments wp.media.view.Sidebar
* @augments wp.media.view.PriorityList
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var MenuIconsSidebar = wp.media.view.IconPickerSidebar.extend({
initialize: function() {
var title = new wp.media.View({
tagName: 'h3',
priority: - 10
});
var info = new wp.media.View({
tagName: 'p',
className: '_info',
priority: 1000
});
wp.media.view.IconPickerSidebar.prototype.initialize.apply( this, arguments );
title.$el.text( window.menuIcons.text.preview );
this.set( 'title', title );
info.$el.html( window.menuIcons.text.settingsInfo );
this.set( 'info', info );
},
createSingle: function() {
this.createPreview();
this.createSettings();
},
disposeSingle: function() {
this.unset( 'preview' );
this.unset( 'settings' );
},
createPreview: function() {
var self = this,
frame = self.controller,
state = frame.state();
// If the selected icon is still being downloaded (image or svg type),
// wait for it to complete before creating the preview.
if ( state.dfd && state.dfd.state() === 'pending' ) {
state.dfd.done( function() {
self.createPreview();
});
return;
}
self.set( 'preview', new wp.media.view.MenuIconsItemPreview({
controller: frame,
model: frame.target,
priority: 80
}) );
},
createSettings: function() {
var frame = this.controller,
state = frame.state(),
fieldIds = state.get( 'data' ).settingsFields,
fields = [];
_.each( fieldIds, function( fieldId ) {
var field = window.menuIcons.settingsFields[ fieldId ],
model;
if ( ! field ) {
return;
}
model = _.defaults({
value: frame.target.get( fieldId ) || field['default']
}, field );
fields.push( model );
});
if ( ! fields.length ) {
return;
}
this.set( 'settings', new wp.media.view.MenuIconsItemSettings({
controller: this.controller,
collection: new wp.media.model.MenuIconsItemSettings( fields ),
model: frame.target,
type: this.options.type,
priority: 120
}) );
}
});
module.exports = MenuIconsSidebar;

View File

@ -0,0 +1,190 @@
/* global menuIcons:false */
require( './media' );
( function( $ ) {
var miPicker;
if ( ! menuIcons.activeTypes || _.isEmpty( menuIcons.activeTypes ) ) {
return;
}
/**
* @namespace
* @property {object} templates - Cached templates for the item previews on the fields
* @property {string} wrapClass - Field wrapper's class
* @property {object} frame - Menu Icons' media frame instance
* @property {object} target - Frame's target model
*/
miPicker = {
templates: {},
wrapClass: 'div.menu-icons-wrap',
frame: null,
target: new wp.media.model.IconPickerTarget(),
/**
* Callback function to filter active icon types
*
* TODO: Maybe move to frame view?
*
* @param {string} type - Icon type.
*/
typesFilter: function( type ) {
return ( $.inArray( type.id, menuIcons.activeTypes ) >= 0 );
},
/**
* Create Menu Icons' media frame
*/
createFrame: function() {
miPicker.frame = new wp.media.view.MediaFrame.MenuIcons({
target: miPicker.target,
ipTypes: _.filter( iconPicker.types, miPicker.typesFilter ),
SidebarView: wp.media.view.MenuIconsSidebar
});
},
/**
* Pick icon for a menu item and open the frame
*
* @param {object} model - Menu item model.
*/
pickIcon: function( model ) {
miPicker.frame.target.set( model, { silent: true });
miPicker.frame.open();
},
/**
* Set or unset icon
*
* @param {object} e - jQuery click event.
*/
setUnset: function( e ) {
var $el = $( e.currentTarget ),
$clicked = $( e.target );
e.preventDefault();
if ( $clicked.hasClass( '_select' ) || $clicked.hasClass( '_icon' ) ) {
miPicker.setIcon( $el );
} else if ( $clicked.hasClass( '_remove' ) ) {
miPicker.unsetIcon( $el );
}
},
/**
* Set Icon
*
* @param {object} $el - jQuery object.
*/
setIcon: function( $el ) {
var id = $el.data( 'id' ),
frame = miPicker.frame,
items = frame.menuItems,
model = items.get( id );
if ( model ) {
miPicker.pickIcon( model.toJSON() );
return;
}
model = {
id: id,
$el: $el,
$title: $( '#edit-menu-item-title-' + id ),
$inputs: {}
};
// Collect menu item's settings fields and use them
// as the model's attributes.
$el.find( 'div._settings input' ).each( function() {
var $input = $( this ),
key = $input.attr( 'class' ).replace( '_mi-', '' ),
value = $input.val();
if ( ! value ) {
if ( _.has( menuIcons.menuSettings, key ) ) {
value = menuIcons.menuSettings[ key ];
} else if ( _.has( menuIcons.settingsFields, key ) ) {
value = menuIcons.settingsFields[ key ]['default'];
}
}
model[ key ] = value;
model.$inputs[ key ] = $input;
});
items.add( model );
miPicker.pickIcon( model );
},
/**
* Unset icon
*
* @param {object} $el - jQuery object.
*/
unsetIcon: function( $el ) {
var id = $el.data( 'id' );
$el.find( 'div._settings input' ).val( '' );
$el.trigger( 'mi:update' );
miPicker.frame.menuItems.remove( id );
},
/**
* Update valeus of menu item's setting fields
*
* When the type and icon is set, this will (re)generate the icon
* preview on the menu item field.
*
* @param {object} e - jQuery event.
*/
updateField: function( e ) {
var $el = $( e.currentTarget ),
$set = $el.find( 'a._select' ),
$unset = $el.find( 'a._remove' ),
type = $el.find( 'input._mi-type' ).val(),
icon = $el.find( 'input._mi-icon' ).val(),
url = $el.find( 'input._mi-url' ).val(),
template;
if ( type === '' || icon === '' || _.indexOf( menuIcons.activeTypes, type ) < 0 ) {
$set.text( menuIcons.text.select ).attr( 'title', '' );
$unset.addClass( 'hidden' );
return;
}
if ( miPicker.templates[ type ]) {
template = miPicker.templates[ type ];
} else {
template = miPicker.templates[ type ] = wp.template( 'menu-icons-item-field-preview-' + iconPicker.types[ type ].templateId );
}
$unset.removeClass( 'hidden' );
$set.attr( 'title', menuIcons.text.change );
$set.html( template({
type: type,
icon: icon,
url: url
}) );
},
/**
* Initialize picker functionality
*
* #fires mi:update
*/
init: function() {
miPicker.createFrame();
$( document )
.on( 'click', miPicker.wrapClass, miPicker.setUnset )
.on( 'mi:update', miPicker.wrapClass, miPicker.updateField );
// Trigger 'mi:update' event to generate the icons on the item fields.
$( miPicker.wrapClass ).trigger( 'mi:update' );
}
};
miPicker.init();
}( jQuery ) );

View File

@ -0,0 +1,60 @@
( function( $ ) {
/**
* Settings box tabs
*
* We can't use core's tabs script here because it will clear the
* checkboxes upon tab switching
*/
$( '#menu-icons-settings-tabs' )
.on( 'click', 'a.mi-settings-nav-tab', function( e ) {
var $el = $( this ).blur(),
$target = $( '#' + $el.data( 'type' ) );
e.preventDefault();
e.stopPropagation();
$el.parent().addClass( 'tabs' ).siblings().removeClass( 'tabs' );
$target
.removeClass( 'tabs-panel-inactive' )
.addClass( 'tabs-panel-active' )
.show()
.siblings( 'div.tabs-panel' )
.hide()
.addClass( 'tabs-panel-inactive' )
.removeClass( 'tabs-panel-active' );
})
.find( 'a.mi-settings-nav-tab' ).first().click();
// Settings meta box
$( '#menu-icons-settings-save' ).on( 'click', function( e ) {
var $button = $( this ).prop( 'disabled', true ),
$spinner = $button.siblings( 'span.spinner' );
e.preventDefault();
e.stopPropagation();
$spinner.css({
display: 'inline-block',
visibility: 'visible'
});
$.ajax({
type: 'POST',
url: window.menuIcons.ajaxUrls.update,
data: $( '#menu-icons-settings :input' ).serialize(),
success: function( response ) {
if ( response.success && response.data.redirectUrl === true ) {
window.location = response.data.redirectUrl;
} else {
$button.prop( 'disabled', false );
}
$spinner.hide();
},
fail: function() {
$spinner.hide();
}
});
});
})( jQuery );

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,867 @@
<?php
/**
* SendinBlue REST client
*/
class Mailin {
public $api_key;
public $base_url;
public $curl_opts = array();
public function __construct( $base_url, $api_key ) {
if ( ! function_exists( 'curl_init' ) ) {
throw new Exception( 'Mailin requires CURL module' );
}
$this->base_url = $base_url;
$this->api_key = $api_key;
}
/**
* Do CURL request with authorization
*/
private function do_request( $resource, $method, $input ) {
$called_url = $this->base_url . '/' . $resource;
$ch = curl_init( $called_url );
$auth_header = 'api-key:' . $this->api_key;
$content_header = 'Content-Type:application/json';
if ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ) {
// Windows only over-ride
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
}
curl_setopt( $ch, CURLOPT_HTTPHEADER, array($auth_header, $content_header) );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, $method );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $input );
$data = curl_exec( $ch );
if ( curl_errno( $ch ) ) {
echo 'Curl error: ' . curl_error( $ch ) . '\n';
}
curl_close( $ch );
return json_decode( $data, true );
}
public function get( $resource, $input ) {
return $this->do_request( $resource, 'GET', $input );
}
public function put( $resource, $input ) {
return $this->do_request( $resource, 'PUT', $input );
}
public function post( $resource, $input ) {
return $this->do_request( $resource, 'POST', $input );
}
public function delete( $resource, $input ) {
return $this->do_request( $resource, 'DELETE', $input );
}
/*
Get Account.
No input required
*/
public function get_account() {
return $this->get( 'account', '' );
}
/*
Get SMTP details.
No input required
*/
public function get_smtp_details() {
return $this->get( 'account/smtpdetail', '' );
}
/*
Create Child Account.
@param {Array} data contains php array with key value pair.
@options data {String} child_email: Email address of Reseller child [Mandatory]
@options data {String} password: Password of Reseller child to login [Mandatory]
@options data {String} company_org: Name of Reseller childs company [Mandatory]
@options data {String} first_name: First name of Reseller child [Mandatory]
@options data {String} last_name: Last name of Reseller child [Mandatory]
@options data {Array} credits: Number of email & sms credits respectively, which will be assigned to the Reseller childs account [Optional]
- email_credit {Integer} number of email credits
- sms_credit {Integer} Number of sms credts
@options data {Array} associate_ip: Associate dedicated IPs to reseller child. You can use commas to separate multiple IPs [Optional]
*/
public function create_child_account( $data ) {
return $this->post( 'account', json_encode( $data ) );
}
/*
Update Child Account.
@param {Array} data contains php array with key value pair.
@options data {String} auth_key: 16 character authorization key of Reseller child to be modified [Mandatory]
@options data {String} company_org: Name of Reseller childs company [Optional]
@options data {String} first_name: First name of Reseller child [Optional]
@options data {String} last_name: Last name of Reseller child [Optional]
@options data {String} password: Password of Reseller child to login [Optional]
@options data {Array} associate_ip: Associate dedicated IPs to reseller child. You can use commas to separate multiple IPs [Optional]
@options data {Array} disassociate_ip: Disassociate dedicated IPs from reseller child. You can use commas to separate multiple IPs [Optional]
*/
public function update_child_account( $data ) {
return $this->put( 'account', json_encode( $data ) );
}
/*
Delete Child Account.
@param {Array} data contains php array with key value pair.
@options data {String} auth_key: 16 character authorization key of Reseller child to be deleted [Mandatory]
*/
public function delete_child_account( $data ) {
return $this->delete( 'account/' . $data['auth_key'], '' );
}
/*
Get Reseller child Account.
@param {Array} data contains php array with key value pair.
@options data {String} auth_key: 16 character authorization key of Reseller child. Example : To get the details of more than one child account, use, {"key1":"abC01De2fGHI3jkL","key2":"mnO45Pq6rSTU7vWX"} [Mandatory]
*/
public function get_reseller_child( $data ) {
return $this->post( 'account/getchildv2', json_encode( $data ) );
}
/*
Add/Remove Reseller child's Email/Sms credits.
@param {Array} data contains php array with key value pair.
@options data {String} auth_key: 16 character authorization key of Reseller child to modify credits [Mandatory]
@options data {Array} add_credit: Number of email & sms credits to be added. You can assign either email or sms credits, one at a time other will remain 0. [Mandatory: if rmv_credit is empty]
- email_credit {Integer} number of email credits
- sms_credit {Integer} Number of sms credts
@options data {Array} rmv_credit: Number of email & sms credits to be removed. You can assign either email or sms credits, one at a time other will remain 0. [Mandatory: if add_credits is empty]
- email_credit {Integer} number of email credits
- sms_credit {Integer} Number of sms credts
*/
public function add_remove_child_credits( $data ) {
return $this->post( 'account/addrmvcredit', json_encode( $data ) );
}
/*
Get a particular campaign detail.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Unique Id of the campaign [Mandatory]
*/
public function get_campaign_v2( $data ) {
return $this->get( 'campaign/' . $data['id'] . '/detailsv2', '' );
}
/*
Get all campaigns detail.
@param {Array} data contains php array with key value pair.
@options data {String} type: Type of campaign. Possible values classic, trigger, sms, template ( case sensitive ) [Optional]
@options data {String} status: Status of campaign. Possible values draft, sent, archive, queued, suspended, in_process, temp_active, temp_inactive ( case sensitive ) [Optional]
@options data {Integer} page: Maximum number of records per request is 500, if there are more than 500 campaigns then you can use this parameter to get next 500 results [Optional]
@options data {Integer} page_limit: This should be a valid number between 1-500 [Optional]
*/
public function get_campaigns_v2( $data ) {
return $this->get( 'campaign/detailsv2', json_encode( $data ) );
}
/*
Create and Schedule your campaigns. It returns the ID of the created campaign.
@param {Array} data contains php array with key value pair.
@options data {String} category: Tag name of the campaign [Optional]
@options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} name: Name of the campaign [Mandatory]
@options data {String} bat: Email address for test mail [Optional]
@options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
@options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
@options data {Array} listid: These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
@options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
@options data {String} subject: Subject of the campaign [Mandatory]
@options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} reply_to: The reply to email in the campaign emails [Optional]
@options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM] To use the contact attributes here, these should already exist in SendinBlue account [Optional]
@options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
@options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
@options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image cant be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
@options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
@options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign cant be send now, & send_now = 1 means campaign ready to send now [Optional]
*/
public function create_campaign( $data ) {
return $this->post( 'campaign', json_encode( $data ) );
}
/*
Update your campaign.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of campaign to be modified [Mandatory]
@options data {String} category: Tag name of the campaign [Optional]
@options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} name: Name of the campaign [Optional]
@options data {String} bat: Email address for test mail [Optional]
@options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Optional]
@options data {String} html_url: Url which content is the body of content [Optional]
@options data {Array} listid These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
@options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
@options data {String} subject: Subject of the campaign.
@options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} reply_to: The reply to email in the campaign emails [Optional]
@options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
@options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
@options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
@options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image cant be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
@options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
@options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign cant be send now, & send_now = 1 means campaign ready to send now [Optional]
*/
public function update_campaign( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'campaign/' . $id, json_encode( $data ) );
}
/*
Delete your campaigns.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of campaign to be deleted [Mandatory]
*/
public function delete_campaign( $data ) {
return $this->delete( 'campaign/' . $data['id'], '' );
}
/*
Send report of Sent and Archived campaign.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of campaign to send its report [Mandatory]
@options data {String} lang: Language of email content. Possible values fr (default), en, es, it & pt [Optional]
@options data {String} email_subject: Message subject [Mandatory]
@options data {Array} email_to: Email address of the recipient(s). Example: "test@example.net". You can use commas to separate multiple recipients [Mandatory]
@options data {String} email_content_type: Body of the message in text/HTML version. Possible values text & html [Mandatory]
@options data {Array} email_bcc: Same as email_to but for Bcc [Optional]
@options data {Array} email_cc: Same as email_to but for Cc [Optional]
@options data {String} email_body: Body of the message [Mandatory]
*/
public function campaign_report_email( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->post( 'campaign/' . $id . '/report', json_encode( $data ) );
}
/*
Export the recipients of a specified campaign.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of campaign to export its recipients [Mandatory]
@options data {String} notify_url: URL that will be called once the export process is finished [Mandatory]
@options data {String} type: Type of recipients. Possible values all, non_clicker, non_opener, clicker, opener, soft_bounces, hard_bounces & unsubscribes [Mandatory]
*/
public function campaign_recipients_export( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->post( 'campaign/' . $id . '/recipients', json_encode( $data ) );
}
/*
Get the Campaign name, subject and share link of the classic type campaigns only which are sent, for those which are not sent and the rest of campaign types like trigger, template & sms, will return an error message of share link not available.
@param {Array} data contains php array with key value pair.
@options data {Array} camp_ids: Id of campaign to get share link. You can use commas to separate multiple ids [Mandatory]
*/
public function share_campaign( $data ) {
return $this->post( 'campaign/sharelinkv2', json_encode( $data ) );
}
/*
Send a Test Campaign.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of the campaign [Mandatory]
@options data {Array} emails: Email address of recipient(s) existing in the one of the lists & should not be blacklisted. Example: "test@example.net". You can use commas to separate multiple recipients [Mandatory]
*/
public function send_bat_email( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->post( 'campaign/' . $id . '/test', json_encode( $data ) );
}
/*
Update the Campaign status.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of campaign to update its status [Mandatory]
@options data {String} status: Types of status. Possible values suspended, archive, darchive, sent, queued, replicate and replicate_template ( case sensitive ) [Mandatory]
*/
public function update_campaign_status( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'campaign/' . $id . '/updatecampstatus', json_encode( $data ) );
}
/*
Create and schedule your Trigger campaigns.
@param {Array} data contains php array with key value pair.
@options data {String} category: Tag name of the campaign [Optional]
@options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} trigger_name: Name of the campaign [Mandatory]
@options data {String} bat: Email address for test mail [Optional]
@options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
@options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
@options data {Array} listid: These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
@options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
@options data {String} subject: Subject of the campaign [Mandatory]
@options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} reply_to: The reply to email in the campaign emails [Optional]
@options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
@options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
@options data {Integer} recurring: Type of trigger campaign. Possible values = 0 (default) & 1. recurring = 0 means contact can receive the same Trigger campaign only once, & recurring = 1 means contact can receive the same Trigger campaign several times [Optional]
@options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
@options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image cant be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
@options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
@options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign cant be send now, & send_now = 1 means campaign ready to send now [Optional]
*/
public function create_trigger_campaign( $data ) {
return $this->post( 'campaign', json_encode( $data ) );
}
/*
Update and schedule your Trigger campaigns.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of Trigger campaign to be modified [Mandatory]
@options data {String} category: Tag name of the campaign [Optional]
@options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} trigger_name: Name of the campaign [Mandatory]
@options data {String} bat Email address for test mail [Optional]
@options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
@options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
@options data {Array} listid: These are the lists to which the campaign has been sent [Mandatory: if scheduled_date is not empty]
@options data {String} scheduled_date: The day on which the campaign is supposed to run[Optional]
@options data {String} subject: Subject of the campaign [Mandatory]
@options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients, please make sure that the sender details are defined here, and in case of no sender, you can add them also via API & for Shared IP clients, if sender exists]
@options data {String} reply_to: The reply to email in the campaign emails [Optional]
@options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
@options data {Array} exclude_list: These are the lists which must be excluded from the campaign [Optional]
@options data {Integer} recurring: Type of trigger campaign. Possible values = 0 (default) & 1. recurring = 0 means contact can receive the same Trigger campaign only once, & recurring = 1 means contact can receive the same Trigger campaign several times [Optional]
@options data {String} attachment_url: Provide the absolute url of the attachment [Optional]
@options data {Integer} inline_image: Status of inline image. Possible values = 0 (default) & 1. inline_image = 0 means image cant be embedded, & inline_image = 1 means image can be embedded, in the email [Optional]
@options data {Integer} mirror_active: Status of mirror links in campaign. Possible values = 0 & 1 (default). mirror_active = 0 means mirror links are deactivated, & mirror_active = 1 means mirror links are activated, in the campaign [Optional]
@options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign cant be send now, & send_now = 1 means campaign ready to send now [Optional]
*/
public function update_trigger_campaign( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'campaign/' . $id, json_encode( $data ) );
}
/*
Get all folders detail.
@param {Array} data contains php array with key value pair.
@options data {Integer} page: Maximum number of records per request is 50, if there are more than 50 folders then you can use this parameter to get next 50 results [Mandatory]
@options data {Integer} page_limit: This should be a valid number between 1-50 [Mandatory]
*/
public function get_folders( $data ) {
return $this->get( 'folder', json_encode( $data ) );
}
/*
Get a particular folder detail.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of folder to get details [Mandatory]
*/
public function get_folder( $data ) {
return $this->get( 'folder/' . $data['id'], '' );
}
/*
Create a new folder.
@param {Array} data contains php array with key value pair.
@options data {String} name: Desired name of the folder to be created [Mandatory]
*/
public function create_folder( $data ) {
return $this->post( 'folder', json_encode( $data ) );
}
/*
Delete a specific folder information.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of folder to be deleted [Mandatory]
*/
public function delete_folder( $data ) {
return $this->delete( 'folder/' . $data['id'], '' );
}
/*
Update an existing folder.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of folder to be modified [Mandatory]
@options data {String} name: Desired name of the folder to be modified [Mandatory]
*/
public function update_folder( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'folder/' . $id, json_encode( $data ) );
}
/*
Get all lists detail.
@param {Array} data contains php array with key value pair.
@options data {Integer} list_parent: This is the existing folder id & can be used to get all lists belonging to it [Optional]
@options data {Integer} page: Maximum number of records per request is 50, if there are more than 50 processes then you can use this parameter to get next 50 results [Mandatory]
@options data {Integer} page_limit: This should be a valid number between 1-50 [Mandatory]
*/
public function get_lists( $data ) {
return $this->get( 'list', json_encode( $data ) );
}
/*
Get a particular list detail.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of list to get details [Mandatory]
*/
public function get_list( $data ) {
return $this->get( 'list/' . $data['id'], '' );
}
/*
Create a new list.
@param {Array} data contains php array with key value pair.
@options data {String} list_name: Desired name of the list to be created [Mandatory]
@options data {Integer} list_parent: Folder ID [Mandatory]
*/
public function create_list( $data ) {
return $this->post( 'list', json_encode( $data ) );
}
/*
Update a list.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of list to be modified [Mandatory]
@options data {String} list_name: Desired name of the list to be modified [Optional]
@options data {Integer} list_parent: Folder ID [Mandatory]
*/
public function update_list( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'list/' . $id, json_encode( $data ) );
}
/*
Delete a specific list.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of list to be deleted [Mandatory]
*/
public function delete_list( $data ) {
return $this->delete( 'list/' . $data['id'], '' );
}
/*
Display details of all users for the given lists.
@param {Array} data contains php array with key value pair.
@options data {Array} listids: These are the list ids to get their data. The ids found will display records [Mandatory]
@options data {String} timestamp: This is date-time filter to fetch modified user records >= this time. Valid format Y-m-d H:i:s. Example: "2015-05-22 14:30:00" [Optional]
@options data {Integer} page: Maximum number of records per request is 500, if in your list there are more than 500 users then you can use this parameter to get next 500 results [Optional]
@options data {Integer} page_limit: This should be a valid number between 1-500 [Optional]
*/
public function display_list_users( $data ) {
return $this->post( 'list/display', json_encode( $data ) );
}
/*
Add already existing users in the SendinBlue contacts to the list.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of list to link users in it [Mandatory]
@options data {Array} users: Email address of the already existing user(s) in the SendinBlue contacts. Example: "test@example.net". You can use commas to separate multiple users [Mandatory]
*/
public function add_users_list( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->post( 'list/' . $id . '/users', json_encode( $data ) );
}
/*
Delete already existing users in the SendinBlue contacts from the list.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of list to unlink users from it [Mandatory]
@options data {Array} users: Email address of the already existing user(s) in the SendinBlue contacts to be modified. Example: "test@example.net". You can use commas to separate multiple users [Mandatory]
*/
public function delete_users_list( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->delete( 'list/' . $id . '/delusers', json_encode( $data ) );
}
/*
Access all the attributes information under the account.
No input required
*/
public function get_attributes() {
return $this->get( 'attribute', '' );
}
/*
Access the specific type of attribute information.
@param {Array} data contains php array with key value pair.
@options data {String} type: Type of attribute. Possible values normal, transactional, category, calculated & global [Optional]
*/
public function get_attribute( $data ) {
return $this->get( 'attribute/' . $data['type'], '' );
}
/*
Create an Attribute.
@param {Array} data contains php array with key value pair.
@options data {String} type: Type of attribute. Possible values normal, transactional, category, calculated & global ( case sensitive ) [Mandatory]
@options data {Array} data: The name and data type of normal & transactional attribute to be created in your SendinBlue account. It should be sent as an associative array. Example: array(ATTRIBUTE_NAME1 => DATA_TYPE1, ATTRIBUTE_NAME2=> DATA_TYPE2).
The name and data value of category, calculated & global, should be sent as JSON string. Example: [{ "name":"ATTRIBUTE_NAME1", "value":"Attribute_value1" }, { "name":"ATTRIBUTE_NAME2", "value":"Attribute_value2" }]. You can use commas to separate multiple attributes [Mandatory]
*/
public function create_attribute( $data ) {
return $this->post( 'attribute/', json_encode( $data ) );
}
/*
Delete a specific type of attribute information.
@param {Array} data contains php array with key value pair.
@options data {Integer} type: Type of attribute to be deleted [Mandatory]
*/
public function delete_attribute( $type, $data ) {
$type = $data['type'];
unset( $data['type'] );
return $this->post( 'attribute/' . $type, json_encode( $data ) );
}
/*
Create a new user if an email provided as input, doesnt exists in the contact list of your SendinBlue account, otherwise it will update the existing user.
@param {Array} data contains php array with key value pair.
@options data {String} email: Email address of the user to be created in SendinBlue contacts. Already existing email address of user in the SendinBlue contacts to be modified [Mandatory]
@options data {Array} attributes: The name of attribute present in your SendinBlue account. It should be sent as an associative array. Example: array("NAME"=>"name"). You can use commas to separate multiple attributes [Optional]
@options data {Integer} blacklisted: This is used to blacklist/ Unblacklist a user. Possible values 0 & 1. blacklisted = 1 means user has been blacklisted [Optional]
@options data {Array} listid: The list id(s) to be linked from user [Optional]
@options data {Array} listid_unlink: The list id(s) to be unlinked from user [Optional]
@options data {Array} blacklisted_sms: This is used to blacklist/ Unblacklist a users SMS number. Possible values 0 & 1. blacklisted_sms = 1 means users SMS number has been blacklisted [Optional]
*/
public function create_update_user( $data ) {
return $this->post( 'user/createdituser', json_encode( $data ) );
}
/*
Get Access a specific user Information.
@param {Array} data contains php array with key value pair.
@options data {String} email: Email address of the already existing user in the SendinBlue contacts [Mandatory]
*/
public function get_user( $data ) {
return $this->get( 'user/' . $data['email'], '' );
}
/*
Unlink existing user from all lists.
@param {Array} data contains php array with key value pair.
@options data {String} email: Email address of the already existing user in the SendinBlue contacts to be unlinked from all lists [Mandatory]
*/
public function delete_user( $data ) {
return $this->delete( 'user/' . $data['email'], '' );
}
/*
Import Users Information.
@param {Array} data contains php array with key value pair.
@options data {String} url: The URL of the file to be imported. Possible file types .txt, .csv [Mandatory: if body is empty]
@options data {String} body: The Body with csv content to be imported. Example: NAME;SURNAME;EMAIL\n"Name1";"Surname1";"example1@example.net"\n"Name2";"Surname2";"example2@example.net", where \n separates each user data. You can use semicolon to separate multiple attributes [Mandatory: if url is empty]
@options data {Array} listids: These are the list ids in which the the users will be imported [Mandatory: if name is empty]
@options data {String} notify_url: URL that will be called once the import process is finished [Optional] In notify_url, we are sending the content using POST method
@options data {String} name: This is new list name which will be created first & then users will be imported in it [Mandatory: if listids is empty]
@options data {Integer} list_parent: This is the existing folder id & can be used with name parameter to make newly created lists desired parent [Optional]
*/
public function import_users( $data ) {
return $this->post( 'user/import', json_encode( $data ) );
}
/*
Export Users Information.
@param {Array} data contains php array with key value pair.
@options data {String} export_attrib: The name of attribute present in your SendinBlue account. You can use commas to separate multiple attributes. Example: "EMAIL,NAME,SMS" [Optional]
@options data {String} filter: Filter can be added to export users. Example: "{\"blacklisted\":1}", will export all blacklisted users [Mandatory]
@options data {String} notify_url: URL that will be called once the export process is finished [Optional]
*/
public function export_users( $data ) {
return $this->post( 'user/export', json_encode( $data ) );
}
/*
Get all the processes information under the account.
@param {Array} data contains php array with key value pair.
@options data {Integer} page: Maximum number of records per request is 50, if there are more than 50 processes then you can use this parameter to get next 50 results [Mandatory]
@options data {Integer} page_limit: This should be a valid number between 1-50 [Mandatory]
*/
public function get_processes( $data ) {
return $this->get( 'process', json_encode( $data ) );
}
/*
Get the process information.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of process to get details [Mandatory]
*/
public function get_process( $data ) {
return $this->get( 'process/' . $data['id'], '' );
}
/*
To retrieve details of all webhooks.
@param {Array} data contains php array with key value pair.
@options data {String} is_plat: Flag to get webhooks. Possible values 0 & 1. Example: to get Transactional webhooks, use $is_plat=0, to get Marketing webhooks, use $is_plat=1, & to get all webhooks, use $is_plat="" [Optional]
*/
public function get_webhooks( $data ) {
return $this->get( 'webhook', json_encode( $data ) );
}
/*
To retrieve details of any particular webhook.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of webhook to get details [Mandatory]
*/
public function get_webhook( $data ) {
return $this->get( 'webhook/' . $data['id'], '' );
}
/*
Create a Webhook.
@param {Array} data contains php array with key value pair.
@options data {String} url: URL that will be triggered by a webhook [Mandatory]
@options data {String} description: Webook description [Optional]
@options data {Array} events: Set of events. You can use commas to separate multiple events. Possible values for Transcational webhook request, delivered, hard_bounce, soft_bounce, blocked, spam, invalid_email, deferred, click, & opened and Possible Values for Marketing webhook spam, opened, click, hard_bounce, unsubscribe, soft_bounce & list_addition ( case sensitive ) [Mandatory]
@options data {Integer} is_plat: Flag to create webhook type. Possible values 0 (default) & 1. Example: to create Transactional webhooks, use $is_plat=0, & to create Marketing webhooks, use $is_plat=1 [Optional]
*/
public function create_webhook( $data ) {
return $this->post( 'webhook', json_encode( $data ) );
}
/*
Delete a webhook.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of webhook to be deleted [Mandatory]
*/
public function delete_webhook( $data ) {
return $this->delete( 'webhook/' . $data['id'], '' );
}
/*
Update a webhook.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of webhook to be modified [Mandatory]
@options data {String} url: URL that will be triggered by a webhook [Mandatory]
@options data {String} description: Webook description [Optional]
@options data {Array} events: Set of events. You can use commas to separate multiple events. Possible values for Transcational webhook request, delivered, hard_bounce, soft_bounce, blocked, spam, invalid_email, deferred, click, & opened and Possible Values for Marketing webhook spam, opened, click, hard_bounce, unsubscribe, soft_bounce & list_addition ( case sensitive ) [Mandatory]
*/
public function update_webhook( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'webhook/' . $id, json_encode( $data ) );
}
/*
Get Access of created senders information.
@param {Array} data contains php array with key value pair.
@options data {String} option: Options to get senders. Possible options IP-wise, & Domain-wise ( only for dedicated IP clients ). Example: to get senders with specific IP, use $option=1.2.3.4, to get senders with specific domain use, $option=domain.com, & to get all senders, use $option="" [Optional]
*/
public function get_senders( $data ) {
return $this->get( 'advanced', json_encode( $data ) );
}
/*
Create your Senders.
@param {Array} data contains php array with key value pair.
@options data {String} name: Name of the sender [Mandatory]
@options data {String} email: Email address of the sender [Mandatory]
@options data {Array} ip_domain: Pass pipe ( | ) separated Dedicated IP and its associated Domain. Example: "1.2.3.4|mydomain.com". You can use commas to separate multiple ip_domains [Mandatory: Only for Dedicated IP clients, for Shared IP clients, it should be kept blank]
*/
public function create_sender( $data ) {
return $this->post( 'advanced', json_encode( $data ) );
}
/*
Update your Senders.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of sender to be modified [Mandatory]
@options data {String} name: Name of the sender [Mandatory]
@options data {Array} ip_domain: Pass pipe ( | ) separated Dedicated IP and its associated Domain. Example: "1.2.3.4|mydomain.com". You can use commas to separate multiple ip_domains [Mandatory: Only for Dedicated IP clients, for Shared IP clients, it should be kept blank]
*/
public function update_sender( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'advanced/' . $id, json_encode( $data ) );
}
/*
Delete your Sender Information.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of sender to be deleted [Mandatory]
*/
public function delete_sender( $data ) {
return $this->delete( 'advanced/' . $data['id'], '' );
}
/*
Send Transactional Email.
@param {Array} data contains php array with key value pair.
@options data {Array} to: Email address of the recipient(s). It should be sent as an associative array. Example: array("to@example.net"=>"to whom"). You can use commas to separate multiple recipients [Mandatory]
@options data {String} subject: Message subject [Mandatory]
@options data {Array} from Email address for From header. It should be sent as an array. Example: array("from@email.com","from email") [Mandatory]
@options data {String} html: Body of the message. (HTML version) [Mandatory]. To send inline images, use <img src="{YourFileName.Extension}" alt="image" border="0" >, the 'src' attribute value inside {} (curly braces) should be same as the filename used in 'inline_image' parameter
@options data {String} text: Body of the message. (text version) [Optional]
@options data {Array} cc: Same as to but for Cc. Example: array("cc@example.net","cc whom") [Optional]
@options data {Array} bcc: Same as to but for Bcc. Example: array("bcc@example.net","bcc whom") [Optional]
@options data {Array} replyto: Same as from but for Reply To. Example: array("from@email.com","from email") [Optional]
@options data {Array} attachment: Provide the absolute url of the attachment/s. Possible extension values = gif, png, bmp, cgm, jpg, jpeg, txt, css, shtml, html, htm, csv, zip, pdf, xml, doc, xls, ppt, tar, and ez. To send attachment/s generated on the fly you have to pass your attachment/s filename & its base64 encoded chunk data as an associative array. Example: array("YourFileName.Extension"=>"Base64EncodedChunkData"). You can use commas to separate multiple attachments [Optional]
@options data {Array} headers: The headers will be sent along with the mail headers in original email. Example: array("Content-Type"=>"text/html; charset=iso-8859-1"). You can use commas to separate multiple headers [Optional]
@options data {Array} inline_image: Pass your inline image/s filename & its base64 encoded chunk data as an associative array. Example: array("YourFileName.Extension"=>"Base64EncodedChunkData"). You can use commas to separate multiple inline images [Optional]
*/
public function send_email( $data ) {
return $this->post( 'email', json_encode( $data ) );
}
/*
Aggregate / date-wise report of the SendinBlue SMTP account.
@param {Array} data contains php array with key value pair.
@options data {Integer} aggregate: This is used to indicate, you are interested in all-time totals. Possible values 0 & 1. aggregate = 0 means it will not aggregate records, and will show stats per day/date wise [Optional]
@options data {String} start_date: The start date to look up statistics. Date must be in YYYY-MM-DD format and should be before the end_date [Optional]
@options data {String} end_date: The end date to look up statistics. Date must be in YYYY-MM-DD format and should be after the start_date [Optional]
@options data {Integer} days: Number of days in the past to include statistics ( Includes today ). It must be an integer greater than 0 [Optional]
@options data {String} tag: The tag you will specify to retrieve detailed stats. It must be an existing tag that has statistics [Optional]
*/
public function get_statistics( $data ) {
return $this->post( 'statistics', json_encode( $data ) );
}
/*
Get Email Event report.
@param {Array} data contains php array with key value pair.
@options data {Integer} limit: To limit the number of results returned. It should be an integer [Optional]
@options data {String} start_date: The start date to get report from. Date must be in YYYY-MM-DD format and should be before the end_date [Optional]
@options data {String} end_date: The end date to get report till date. Date must be in YYYY-MM-DD format and should be after the start_date [Optional]
@options data {Integer} offset: Beginning point in the list to retrieve from. It should be an integer [Optional]
@options data {String} date: Specific date to get its report. Date must be in YYYY-MM-DD format and should be earlier than todays date [Optional]
@options data {Integer} days: Number of days in the past (includes today). If specified, must be an integer greater than 0 [Optional]
@options data {String} email: Email address to search report for [Optional]
*/
public function get_report( $data ) {
return $this->post( 'report', json_encode( $data ) );
}
/*
Delete any hardbounce, which actually would have been blocked due to some temporary ISP failures.
@param {Array} data contains php array with key value pair.
@options data {String} start_date: The start date to get report from. Date must be in YYYY-MM-DD format and should be before the end_date [Optional]
@options data {String} end_date: The end date to get report till date. Date must be in YYYY-MM-DD format and should be after the start_date [Optional]
@options data {String} email: Email address to delete its bounces [Optional]
*/
public function delete_bounces( $data ) {
return $this->post( 'bounces', json_encode( $data ) );
}
/*
Send templates created on SendinBlue, through SendinBlue SMTP (transactional mails).
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of the template created on SendinBlue account [Mandatory]
@options data {String} to: Email address of the recipient(s). You can use pipe ( | ) to separate multiple recipients. Example: "to-example@example.net|to2-example@example.net" [Mandatory]
@options data {String} cc: Same as to but for Cc [Optional]
@options data {String} bcc: Same as to but for Bcc [Optional]
@options data {Array} attrv The name of attribute present in your SendinBlue account. It should be sent as an associative array. Example: array("NAME"=>"name"). You can use commas to separate multiple attributes [Optional]
@options data {String} attachment_url: Provide the absolute url of the attachment. Url not allowed from local machine. File must be hosted somewhere [Optional]
@options data {Array} attachment: To send attachment/s generated on the fly you have to pass your attachment/s filename & its base64 encoded chunk data as an associative array [Optional]
*/
public function send_transactional_template( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'template/' . $id, json_encode( $data ) );
}
/*
Create a Template.
@param {Array} data contains php array with key value pair.
@options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
@options data {String} template_name: Name of the Template [Mandatory]
@options data {String} bat: Email address for test mail [Optional]
@options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
@options data {String} html_url Url: which content is the body of content [Mandatory: if html_content is empty]
@options data {String} subject: Subject of the campaign [Mandatory]
@options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
@options data {String} reply_to: The reply to email in the campaign emails [Optional]
@options data {String} to_fieldv This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
@options data {Integer} status: Status of template. Possible values = 0 (default) & 1. status = 0 means template is inactive, & status = 1 means template is active [Optional]
@options data {Integer} attachment: Status of attachment. Possible values = 0 (default) & 1. attach = 0 means an attachment cant be sent, & attach = 1 means an attachment can be sent, in the email [Optional]
*/
public function create_template( $data ) {
return $this->post( 'template', json_encode( $data ) );
}
/*
Update a Template.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of Template to be modified [Mandatory]
@options data {String} from_name: Sender name from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
@options data {String} template_name: Name of the Template [Mandatory]
@options data {String} bat: Email address for test mail [Optional]
@options data {String} html_content: Body of the content. The HTML content field must have more than 10 characters [Mandatory: if html_url is empty]
@options data {String} html_url: Url which content is the body of content [Mandatory: if html_content is empty]
@options data {String} subject: Subject of the campaign [Mandatory]
@options data {String} from_email: Sender email from which the campaign emails are sent [Mandatory: for Dedicated IP clients & for Shared IP clients, if sender exists]
@options data {String} reply_to: The reply to email in the campaign emails [Optional]
@options data {String} to_field: This is to personalize the «To» Field. If you want to include the first name and last name of your recipient, add [PRENOM] [NOM]. To use the contact attributes here, these should already exist in SendinBlue account [Optional]
@options data {Integer} status: Status of template. Possible values = 0 (default) & 1. status = 0 means template is inactive, & status = 1 means template is active [Optional]
@options data {Integer} attachment: Status of attachment. Possible values = 0 (default) & 1. attach = 0 means an attachment cant be sent, & attach = 1 means an attachment can be sent, in the email [Optional]
*/
public function update_template( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'template/' . $id, json_encode( $data ) );
}
/*
Send a transactional SMS.
@param {Array} data contains php array with key value pair.
@options data {String} to: The mobile number to send SMS to with country code [Mandatory]
@options data {String} from: The name of the sender. The number of characters is limited to 11 (alphanumeric format) [Mandatory]
@options data {String} text: The text of the message. The maximum characters used per SMS is 160, if used more than that, it will be counted as more than one SMS [Mandatory]
@options data {String} web_url: The web URL that can be called once the message is successfully delivered [Optional]
@options data {String} tag: The tag that you can associate with the message [Optional]
@options data {String} type: Type of message. Possible values marketing (default) & transactional. You can use marketing for sending marketing SMS, & for sending transactional SMS, use transactional type [Optional]
*/
public function send_sms( $data ) {
return $this->post( 'sms', json_encode( $data ) );
}
/*
Create & Schedule your SMS campaigns.
@param {Array} data contains php array with key value pair.
@options data {String} name: Name of the SMS campaign [Mandatory]
@options data {String} sender: This allows you to customize the SMS sender. The number of characters is limited to 11 ( alphanumeric format ) [Optional]
@options data {String} content: Content of the message. The maximum characters used per SMS is 160, if used more than that, it will be counted as more than one SMS [Optional]
@options data {String} bat: Mobile number with the country code to send test SMS. The mobile number defined here should belong to one of your contacts in SendinBlue account and should not be blacklisted [Optional]
@options data {Array} listid: These are the list ids to which the SMS campaign is sent [Mandatory: if scheduled_date is not empty]
@options data {Array} exclude_list: These are the list ids which will be excluded from the SMS campaign [Optional]
@options data {String} scheduled_date: The day on which the SMS campaign is supposed to run [Optional]
@options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign cant be send now, & send_now = 1 means campaign ready to send now [Optional]
*/
public function create_sms_campaign( $data ) {
return $this->post( 'sms', json_encode( $data ) );
}
/*
Update your SMS campaigns.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of the SMS campaign [Mandatory]
@options data {String} name: Name of the SMS campaign [Optional]
@options data {String} sender: This allows you to customize the SMS sender. The number of characters is limited to 11 ( alphanumeric format ) [Optional]
@options data {String} content: Content of the message. The maximum characters used per SMS is 160, if used more than that, it will be counted as more than one SMS [Optional]
@options data {String} bat: Mobile number with the country code to send test SMS. The mobile number defined here should belong to one of your contacts in SendinBlue account and should not be blacklisted [Optional]
@options data {Array} listid: hese are the list ids to which the SMS campaign is sent [Mandatory: if scheduled_date is not empty]
@options data {Array} exclude_list: These are the list ids which will be excluded from the SMS campaign [Optional]
@options data {String} scheduled_date: The day on which the SMS campaign is supposed to run [Optional]
@options data {Integer} send_now: Flag to send campaign now. Possible values = 0 (default) & 1. send_now = 0 means campaign cant be send now, & send_now = 1 means campaign ready to send now [Optional]
*/
public function update_sms_campaign( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->put( 'sms/' . $id, json_encode( $data ) );
}
/*
Send a Test SMS.
@param {Array} data contains php array with key value pair.
@options data {Integer} id: Id of the SMS campaign [Mandatory]
@options data {String} to: Mobile number with the country code to send test SMS. The mobile number defined here should belong to one of your contacts in SendinBlue account and should not be blacklisted [Mandatory]
*/
public function send_bat_sms( $data ) {
$id = $data['id'];
unset( $data['id'] );
return $this->get( 'sms/' . $id, json_encode( $data ) );
}
}

View File

@ -0,0 +1,263 @@
<?php
/**
* Menu Icons
*
* @package Menu_Icons
* @version 0.10.2
* @author Dzikri Aziz <kvcrvt@gmail.com>
*
*
* Plugin name: Menu Icons
* Plugin URI: https://github.com/Codeinwp/wp-menu-icons
* Description: Spice up your navigation menus with pretty icons, easily.
* Version: 0.13.7
* Author: ThemeIsle
* Author URI: https://themeisle.com
* License: GPLv2
* Text Domain: menu-icons
* Domain Path: /languages
* WordPress Available: yes
* Requires License: no
*/
/**
* Main plugin class
*/
final class Menu_Icons {
const DISMISS_NOTICE = 'menu-icons-dismiss-notice';
const VERSION = '0.13.7';
/**
* Holds plugin data
*
* @access protected
* @since 0.1.0
* @var array
*/
protected static $data;
/**
* Get plugin data
*
* @since 0.1.0
* @since 0.9.0 Return NULL if $name is not set in $data.
* @param string $name
*
* @return mixed
*/
public static function get( $name = null ) {
if ( is_null( $name ) ) {
return self::$data;
}
if ( isset( self::$data[ $name ] ) ) {
return self::$data[ $name ];
}
return null;
}
/**
* Load plugin
*
* 1. Load translation
* 2. Set plugin data (directory and URL paths)
* 3. Attach plugin initialization at icon_picker_init hook
*
* @since 0.1.0
* @wp_hook action plugins_loaded
* @link http://codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded
*/
public static function _load() {
load_plugin_textdomain( 'menu-icons', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
self::$data = array(
'dir' => plugin_dir_path( __FILE__ ),
'url' => plugin_dir_url( __FILE__ ),
'types' => array(),
);
Icon_Picker::instance();
require_once self::$data['dir'] . 'includes/library/compat.php';
require_once self::$data['dir'] . 'includes/library/functions.php';
require_once self::$data['dir'] . 'includes/meta.php';
Menu_Icons_Meta::init();
// Font awesome backward compatible functionalities.
require_once self::$data['dir'] . 'includes/library/font-awesome/backward-compatible-icons.php';
require_once self::$data['dir'] . 'includes/library/font-awesome/font-awesome.php';
Menu_Icons_Font_Awesome::init();
add_action( 'icon_picker_init', array( __CLASS__, '_init' ), 9 );
add_action( 'admin_enqueue_scripts', array( __CLASS__, '_admin_enqueue_scripts' ) );
add_action( 'wp_dashboard_setup', array( __CLASS__, '_wp_menu_icons_dashboard_notice' ) );
add_action( 'admin_action_menu_icon_hide_notice', array( __CLASS__, 'wp_menu_icons_dismiss_dashboard_notice' ) );
add_filter(
'menu_icons_load_promotions',
function() {
return array( 'otter' );
}
);
}
/**
* Initialize
*
* 1. Get registered types from Icon Picker
* 2. Load settings
* 3. Load front-end functionalities
*
* @since 0.1.0
* @since 0.9.0 Hook into `icon_picker_init`.
* @wp_hook action icon_picker_init
* @link http://codex.wordpress.org/Plugin_API/Action_Reference
*/
public static function _init() {
/**
* Allow themes/plugins to add/remove icon types
*
* @since 0.1.0
* @param array $types Icon types
*/
self::$data['types'] = apply_filters(
'menu_icons_types',
Icon_Picker_Types_Registry::instance()->types
);
// Nothing to do if there are no icon types registered.
if ( empty( self::$data['types'] ) ) {
if ( WP_DEBUG ) {
trigger_error( esc_html__( 'Menu Icons: No registered icon types found.', 'menu-icons' ) );
}
return;
}
// Load settings.
require_once self::$data['dir'] . 'includes/settings.php';
Menu_Icons_Settings::init();
// Load front-end functionalities.
if ( ! is_admin() ) {
require_once self::$data['dir'] . '/includes/front.php';
Menu_Icons_Front_End::init();
}
do_action( 'menu_icons_loaded' );
}
/**
* Display notice about missing Icon Picker
*
* @since 0.9.1
* @wp_hook action admin_notice
*/
public static function _notice_missing_icon_picker() {
?>
<div class="error">
<p><?php esc_html_e( 'Looks like Menu Icons was installed via Composer. Please activate Icon Picker first.', 'menu-icons' ); ?></p>
</div>
<?php
}
/**
* Register assets.
*/
public static function _admin_enqueue_scripts() {
$url = self::get( 'url' );
$suffix = kucrut_get_script_suffix();
wp_register_style(
'menu-icons-dashboard',
"{$url}css/dashboard-notice{$suffix}.css",
false,
self::VERSION
);
}
/**
* Render dashboard notice.
*/
public static function _wp_menu_icons_dashboard_notice() {
$show_notice = true;
if ( ! empty( get_option( self::DISMISS_NOTICE, false ) ) ) {
$show_notice = false;
}
if ( ! empty( get_transient( self::DISMISS_NOTICE ) ) ) {
$show_notice = false;
}
if ( $show_notice ) {
wp_enqueue_style( 'menu-icons-dashboard' );
add_action( 'admin_notices', array( __CLASS__, '_upsell_admin_notice' ) );
}
}
/**
* Ajax request handle for dissmiss dashboard notice.
*/
public static function wp_menu_icons_dismiss_dashboard_notice() {
// Verify WP nonce and store hide notice flag.
if ( isset( $_GET['_wp_notice_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_GET['_wp_notice_nonce'] ) ), self::DISMISS_NOTICE ) ) {
update_option( self::DISMISS_NOTICE, 1 );
}
if ( ! headers_sent() ) {
wp_safe_redirect( admin_url() );
exit;
}
}
/**
* Upsell admin notice.
*/
public static function _upsell_admin_notice() {
$neve_theme_url = add_query_arg(
array(
'theme' => 'neve',
),
admin_url( 'theme-install.php' )
);
$action_url = add_query_arg(
array(
'action' => 'menu_icon_hide_notice',
'_wp_notice_nonce' => wp_create_nonce( self::DISMISS_NOTICE ),
),
admin_url( 'index.php' )
);
?>
<div class="notice notice-info menu-icon-dashboard-notice">
<h2><?php esc_html_e( 'Thank you for installing Menu Icons!', 'menu-icons' ); ?></h2>
<p><?php esc_html_e( 'Have you heard about our latest FREE theme - Neve? Using a mobile-first approach, compatibility with AMP and popular page-builders, Neve makes website building accessible for everyone.', 'menu-icons' ); ?></p>
<a href="<?php echo esc_url( $neve_theme_url ); ?>" class="button button-primary button-large"><?php esc_html_e( 'Preview Neve', 'menu-icons' ); ?></a>
<a href="<?php echo esc_url( $action_url ); ?>" class="notice-dismiss"></a>
</div>
<?php
}
}
add_action( 'plugins_loaded', array( 'Menu_Icons', '_load' ) );
$vendor_file = dirname(__FILE__) . '/vendor/autoload.php';
if ( is_readable( $vendor_file ) ) {
require_once $vendor_file;
}
add_filter( 'themeisle_sdk_products', 'kucrut_register_sdk', 10, 1 );
function kucrut_register_sdk( $products ) {
$products[] = __FILE__;
return $products;
}

View File

@ -0,0 +1,388 @@
# Menu Icons by ThemeIsle #
**Contributors:** [codeinwp](https://profiles.wordpress.org/codeinwp), [themeisle](https://profiles.wordpress.org/themeisle)
**Tags:** menu, nav-menu, icons, navigation
**Requires at least:** 4.3
**Tested up to:** 5.4
**Stable tag:** trunk
**License:** GPLv2
**License URI:** http://www.gnu.org/licenses/gpl-2.0.html
Spice up your navigation menus with pretty icons, easily.
## Description ##
This plugin gives you the ability to add icons to your menu items, similar to the look of the latest dashboard menu.
https://www.youtube.com/watch?v=YcSotWXIczI
### Usage ###
1. After the plugin is activated, go to *Appearance* > *Menus* to edit your menus
1. Enable/Disable icon types in "Menu Icons Settings" meta box
1. Set default settings for current nav menu; these settings will be inherited by the newly added menu items
1. Select icon by clicking on the "Select icon" link
1. Save the menu
### Supported icon types ###
- Dashicons (WordPress core icons)
- [Elusive Icons](http://shoestrap.org/downloads/elusive-icons-webfont/) by [Aristeides Stathopoulos](http://shoestrap.org/blog/author/aristath/)
- [Font Awesome](http://fontawesome.io/) by [Dave Gandy](http://twitter.com/davegandy)
- [Foundation Icons](http://zurb.com/playground/foundation-icon-fonts-3/) by [Zurb](http://zurb.com/)
- [Genericons](http://genericons.com/) by [Automattic](http://automattic.com/)
- [Fontello](http://fontello.com/) icon packs
- [TI Icons](http://themeisle.com/free-icons/) icon pack by [ThemeIsle](http://twitter.com/themeisle)
- Image (attachments)
- SVG (attachments)
### Planned supported icon types ###
- Image (URL)
### Extensions ###
- [IcoMoon](http://wordpress.org/plugins/menu-icons-icomoon/) by [IcoMoon.io](http://icomoon.io/)
### Compatible themes ###
Menu icons works with most of the themes out there, especially with popular ones like Twenty Seventeen or [Hestia](https://themeisle.com/themes/hestia/).
Development of this plugin is done on [GitHub](https://github.com/codeinwp/wp-menu-icons). **Pull requests welcome**. Please see [issues reported](https://github.com/codeinwp/wp-menu-icons/issues) there before going to the plugin forum.
## If you like this plugin, then consider checking out our other projects: ##
[CodeinWP Blog](https://www.codeinwp.com/blog/) Designer's Guide To WordPress
[Revive.Social](https://revive.social) Social Media Tools
[JustFreeThemes](https://justfreethemes.com) - Free WordPress Themes directory
## Screenshots ##
1. Menu Editor
2. Icon selection
3. Twenty Fourteen with Dashicons
4. Twenty Fourteen with Genericons
5. Twenty Thirteen with Dashicons
6. Twenty Thirteen with Genericons
7. Settings Meta Box (Global)
8. Settings Meta Box (Menu)
## Installation ##
1. Upload `menu-icons` to the `/wp-content/plugins/` directory
1. Activate the plugin through the *Plugins* menu in WordPress
## Frequently Asked Questions ##
### The icons are not showing! ###
Make sure that your active theme is using the default walker for displaying the nav menu. If it's using its own custom walker, make sure that the menu item titles are filterable (please consult your theme author about this).
### The icon positions don't look right ###
If you're comfortable with editing your theme stylesheet, then you can override the styles from there.
If you have [Jetpack](http://wordpress.org/plugins/jetpack) installed, you can also use its **Custom CSS** module.
Otherwise, I recommend you to use the [Advanced CSS plugin](https://wordpress.org/plugins/advanced-css-editor/).
### Some font icons are not rendering correctly ###
This is a bug with the font icon itself. When the font is updated, this plugin will update its font too.
### How do I use css file from CDN? ###
You can use the `icon_picker_icon_type_stylesheet_uri` filter, eg:
/**
* Load Font Awesome's CSS from CDN
*
* @param string $stylesheet_uri Icon type's stylesheet URI.
* @param string $icon_type_id Icon type's ID.
* @param Icon_Picker_Type_Font $icon_type Icon type's instance.
*
* @return string
*/
function myprefix_font_awesome_css_from_cdn( $stylesheet_uri, $icon_type_id, $icon_type ) {
if ( 'fa' === $icon_type_id ) {
$stylesheet_uri = sprintf(
'https://maxcdn.bootstrapcdn.com/font-awesome/%s/css/font-awesome.min.css',
$icon_type->version
);
}
return $stylesheet_uri;
}
add_filter( 'icon_picker_icon_type_stylesheet_uri', 'myprefix_font_awesome_css_from_cdn', 10, 3 );
### Is this plugin extendable? ###
**Certainly!** Here's how you can remove an icon type from your plugin/theme:
/**
* Remove one or more icon types
*
* Uncomment one or more line to remove icon types
*
* @param array $types Registered icon types.
* @return array
*/
function my_remove_menu_icons_type( $types ) {
// Dashicons
//unset( $types['dashicons'] );
// Elusive
//unset( $types['elusive'] );
// Font Awesome
//unset( $types['fa'] );
// Foundation
//unset( $types['foundation-icons'] );
// Genericons
//unset( $types['genericon'] );
// Image
//unset( $types['image'] );
return $types;
}
add_filter( 'menu_icons_types', 'my_remove_menu_icons_type' );
To add a new icon type, take a look at the files inside the `includes/library/icon-picker/includes/types` directory of this plugin.
### I don't want the settings meta box. How do I remove/disable it? ###
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
add_filter( 'menu_icons_disable_settings', '__return_true' );
### How can I change the CSS class for hiding the menu item labels? ###
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
/**
* Override hidden label class
*
* @param string $class Hidden label class.
* @return string
*/
function my_menu_icons_hidden_label_class( $class ) {
$class = 'hidden';
return $class;
}
add_filter( 'menu_icons_hidden_label_class', 'my_menu_icons_hidden_label_class' );
### How can I modify the markup the menu items? ###
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
/**
* Override menu item markup
*
* @param string $markup Menu item title markup.
* @param integer $id Menu item ID.
* @param array $meta Menu item meta values.
* @param string $title Menu item title.
*
* @return string
*/
function my_menu_icons_override_markup( $markup, $id, $meta, $title ) {
// Do your thing.
return $markup;
}
add_filter( 'menu_icons_item_title', 'my_menu_icons_override_markup', 10, 4 );
### Can you please add X icon font? ###
Let me know via [GitHub issues](https://github.com/codeinw/wp-menu-icons/issues) and I'll see what I can do.
### How do I disable menu icons for a certain menu? ###
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
/**
* Disable menu icons for a menu
*
* @param array $menu_settings Menu Settings.
* @param int $menu_id Menu ID.
*
* @return array
*/
function my_menu_icons_menu_settings( $menu_settings, $menu_id ) {
if ( 13 === $menu_id ) {
$menu_settings['disabled'] = true;
}
return $menu_settings;
}
add_filter( 'menu_icons_menu_settings', 'my_menu_icons_menu_settings', 10, 2 );
### How do I add an icon pack from Fontello? ###
1. Create a new directory called `fontpacks` in `wp-content`.
1. Grab the zip of the pack, extract, and upload it to the newly created directory.
1. Enable the icon type from the Settings meta box.
### I can't select a custom image size from the *Image Size* dropdown ###
Read [this blog post](http://kucrut.org/add-custom-image-sizes-right-way/).
## Changelog ##
### 0.12.5 - 2020-08-18 ###
### 0.12.4 - 2020-07-13 ###
* Fix Font Awesome not loading
### 0.12.3 - 2020-07-13 ###
* Fixed Menu Icons in Block Editor not working
* Fixed CWP links.
### 0.12.2 - 2019-11-15 ###
### 0.12.1 - 2019-11-15 ###
* Improve legacy compatibility
### 0.12.0 - 2019-11-15 ###
* Fix issues with WordPress 5.3.
### 0.11.5 - 2019-05-23 ###
* Sync composer dependencies with the latest version
### 0.11.4 - 2018-12-10 ###
* fix issue with composer libraries.
### 0.11.3 - 2018-12-10 ###
* Tested with WP 5.0
### 0.11.2 - 2018-03-05 ###
* Improve popup sidebar layout.
### 0.11.1 - 2018-02-24 ###
* Add recommendation boxes in the menu icon popup.
### 0.11.0 - 2018-01-05 ###
* Change ownership to ThemeIsle.
* Improves compatibility with various ThemeIsle products.
### 0.10.2 ###
* Compatibility with WordPress 4.7.0, props [Aaron K](https://github.com/aaronkirkham).
### 0.10.1 ###
* Support RTL, props [ybspost](https://wordpress.org/support/profile/ybspost).
### 0.10.0 ###
* Icon Picker 0.4.0
* Font Awesome 4.6.1
* Introduce `icon_picker_icon_type_stylesheet_uri` filter hook.
* Add `aria-hidden="true"` attribute to icon element
### 0.9.3 ###
* Fix CSS conflicts
### 0.9.2 ###
* Update Icon Picker to [0.1.1](https://github.com/kucrut/wp-icon-picker/releases/tag/v0.1.1).
### 0.9.1 ###
* Fix support for Composer.
### 0.9.0 ###
* Performance optimization.
* Modularisation. Developers: Take a look at the [Icon Picker](https://github.com/kucrut/wp-icon-picker) library.
* Bug fixes.
* Removed `menu_icons_{type_id}_props` filter.
### 0.8.1 ###
* Fix disappearing icons from front-end when not logged-in, props [jj9617](http://profiles.wordpress.org/jj9617/)
### 0.8.0 ###
* Update Dashicons
* Update Genericons to 3.4
* Update Font Awesome to 4.4.0
* Allow the plugin to be disabled for a certain menu
* Add new icon type: SVG, props [Ethan Clevenger](https://github.com/ethanclevenger91)
* Add new filter: `menu_icons_hidden_label_class`
* Add new filter: `menu_icons_item_title`
### 0.7.0 ###
* Update Dashicons
* Fix annoying browser popup when navigating away from Nav Menus screen
* Work-around settings update with ajax
### 0.6.0 ###
* Update Genericons to [3.2](http://genericons.com/2014/10/03/3-2/)
* Update Font Awesome to [4.2.0](http://fontawesome.io/whats-new/)
### 0.5.1 ###
* Update Menu Item Custom Fields to play nice with other plugins.
* Add missing Foundation Icons stylesheet, props [John](http://wordpress.org/support/profile/dsl225)
* JS & CSS fixes
### 0.5.0 ###
* New Icon type: Foundation Icons
* Add new Dashicons icons
* Various fixes & enhancements
### 0.4.0 ###
* Fontello icon packs support
* New icon type: Image (attachments)
### 0.3.2 ###
* Add missing minified CSS for Elusive font icon, props [zazou83](http://profiles.wordpress.org/zazou83)
### 0.3.1 ###
* Fix fatal error on outdated PHP versions, props [dellos](http://profiles.wordpress.org/dellos)
### 0.3.0 ###
* Add Settings meta box on Menu screen
* New feature: Settings inheritance (nav menu > menu items)
* New feature: Hide menu item labels
* New Icon type: Elusive Icons
* Update Font Awesome to 4.1.0
### 0.2.3 ###
* Add new group for Dashicons: Media
### 0.2.1 ###
* Fix icon selector compatibility with WP 3.9
### 0.2.0 ###
* Media frame for icon selection
* New font icon: Font Awesome
### 0.1.5 ###
* Invisible, but important fixes and improvements
### 0.1.4 ###
* Fix menu saving
### 0.1.3 ###
* Provide icon selection fields on newly added menu items
### 0.1.2 ###
* Improve extra stylesheet
### 0.1.1 ###
* Improve icon selection UX
### 0.1.0 ###
* Initial public release

View File

@ -0,0 +1,497 @@
=== Menu Icons by ThemeIsle ===
Contributors: codeinwp, themeisle
Tags: menu, nav-menu, icons, navigation
Requires at least: 4.7
Tested up to: 6.3
Stable tag: trunk
License: GPLv2
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Spice up your navigation menus with pretty icons, easily.
== Description ==
This plugin gives you the ability to add icons to your menu items, similar to the look of the latest dashboard menu.
https://www.youtube.com/watch?v=YcSotWXIczI
= Usage =
1. After the plugin is activated, go to *Appearance* > *Menus* to edit your menus
1. Enable/Disable icon types in "Menu Icons Settings" meta box
1. Set default settings for current nav menu; these settings will be inherited by the newly added menu items
1. Select icon by clicking on the "Select icon" link
1. Save the menu
= Supported icon types =
- Dashicons (WordPress core icons)
- [Elusive Icons](http://shoestrap.org/downloads/elusive-icons-webfont/) by [Aristeides Stathopoulos](http://shoestrap.org/blog/author/aristath/)
- [Font Awesome](http://fontawesome.io/) by [Dave Gandy](http://twitter.com/davegandy)
- [Foundation Icons](http://zurb.com/playground/foundation-icon-fonts-3/) by [Zurb](http://zurb.com/)
- [Genericons](http://genericons.com/) by [Automattic](http://automattic.com/)
- [Fontello](http://fontello.com/) icon packs
- [TI Icons](http://themeisle.com/free-icons/) icon pack by [ThemeIsle](http://twitter.com/themeisle)
- Image (attachments)
- SVG (attachments)
= Planned supported icon types =
- Image (URL)
= Extensions =
- [IcoMoon](http://wordpress.org/plugins/menu-icons-icomoon/) by [IcoMoon.io](http://icomoon.io/)
= Compatible themes =
Menu icons works with most of the themes out there, especially with popular ones like Twenty Seventeen or [Hestia](https://themeisle.com/themes/hestia/).
Development of this plugin is done on [GitHub](https://github.com/codeinwp/wp-menu-icons). **Pull requests welcome**. Please see [issues reported](https://github.com/codeinwp/wp-menu-icons/issues) there before going to the plugin forum.
== If you like this plugin, then consider checking out our other projects: ==
[CodeinWP Blog](https://www.codeinwp.com/blog/) Designer's Guide To WordPress
[Revive.Social](https://revive.social) Social Media Tools
[JustFreeThemes](https://justfreethemes.com) - Free WordPress Themes directory
== Screenshots ==
1. Menu Editor
2. Icon selection
3. Twenty Fourteen with Dashicons
4. Twenty Fourteen with Genericons
5. Twenty Thirteen with Dashicons
6. Twenty Thirteen with Genericons
7. Settings Meta Box (Global)
8. Settings Meta Box (Menu)
== Installation ==
1. Upload `menu-icons` to the `/wp-content/plugins/` directory
1. Activate the plugin through the *Plugins* menu in WordPress
== Frequently Asked Questions ==
= The icons are not showing! =
Make sure that your active theme is using the default walker for displaying the nav menu. If it's using its own custom walker, make sure that the menu item titles are filterable (please consult your theme author about this).
= The icon positions don't look right =
If you're comfortable with editing your theme stylesheet, then you can override the styles from there.
If you have [Jetpack](http://wordpress.org/plugins/jetpack) installed, you can also use its **Custom CSS** module.
Otherwise, I recommend you to use the [Advanced CSS plugin](https://wordpress.org/plugins/advanced-css-editor/).
= Some font icons are not rendering correctly =
This is a bug with the font icon itself. When the font is updated, this plugin will update its font too.
= How do I use css file from CDN? =
You can use the `icon_picker_icon_type_stylesheet_uri` filter, eg:
`
/**
* Load Font Awesome's CSS from CDN
*
* @param string $stylesheet_uri Icon type's stylesheet URI.
* @param string $icon_type_id Icon type's ID.
* @param Icon_Picker_Type_Font $icon_type Icon type's instance.
*
* @return string
*/
function myprefix_font_awesome_css_from_cdn( $stylesheet_uri, $icon_type_id, $icon_type ) {
if ( 'fa' === $icon_type_id ) {
$stylesheet_uri = sprintf(
'https://maxcdn.bootstrapcdn.com/font-awesome/%s/css/font-awesome.min.css',
$icon_type->version
);
}
return $stylesheet_uri;
}
add_filter( 'icon_picker_icon_type_stylesheet_uri', 'myprefix_font_awesome_css_from_cdn', 10, 3 );
`
= Is this plugin extendable? =
**Certainly!** Here's how you can remove an icon type from your plugin/theme:
`
/**
* Remove one or more icon types
*
* Uncomment one or more line to remove icon types
*
* @param array $types Registered icon types.
* @return array
*/
function my_remove_menu_icons_type( $types ) {
// Dashicons
//unset( $types['dashicons'] );
// Elusive
//unset( $types['elusive'] );
// Font Awesome
//unset( $types['fa'] );
// Foundation
//unset( $types['foundation-icons'] );
// Genericons
//unset( $types['genericon'] );
// Image
//unset( $types['image'] );
return $types;
}
add_filter( 'menu_icons_types', 'my_remove_menu_icons_type' );
`
To add a new icon type, take a look at the files inside the `includes/library/icon-picker/includes/types` directory of this plugin.
= I don't want the settings meta box. How do I remove/disable it? =
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
`
add_filter( 'menu_icons_disable_settings', '__return_true' );
`
= How can I change the CSS class for hiding the menu item labels? =
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
`
/**
* Override hidden label class
*
* @param string $class Hidden label class.
* @return string
*/
function my_menu_icons_hidden_label_class( $class ) {
$class = 'hidden';
return $class;
}
add_filter( 'menu_icons_hidden_label_class', 'my_menu_icons_hidden_label_class' );
`
= How can I modify the markup the menu items? =
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
`
/**
* Override menu item markup
*
* @param string $markup Menu item title markup.
* @param integer $id Menu item ID.
* @param array $meta Menu item meta values.
* @param string $title Menu item title.
*
* @return string
*/
function my_menu_icons_override_markup( $markup, $id, $meta, $title ) {
// Do your thing.
return $markup;
}
add_filter( 'menu_icons_item_title', 'my_menu_icons_override_markup', 10, 4 );
`
= Can you please add X icon font? =
Let me know via [GitHub issues](https://github.com/codeinw/wp-menu-icons/issues) and I'll see what I can do.
= How do I disable menu icons for a certain menu? =
Add this block of code to your [mu-plugin file](http://codex.wordpress.org/Must_Use_Plugins):
`
/**
* Disable menu icons for a menu
*
* @param array $menu_settings Menu Settings.
* @param int $menu_id Menu ID.
*
* @return array
*/
function my_menu_icons_menu_settings( $menu_settings, $menu_id ) {
if ( 13 === $menu_id ) {
$menu_settings['disabled'] = true;
}
return $menu_settings;
}
add_filter( 'menu_icons_menu_settings', 'my_menu_icons_menu_settings', 10, 2 );
`
= How do I add an icon pack from Fontello? =
1. Create a new directory called `fontpacks` in `wp-content`.
1. Grab the zip of the pack, extract, and upload it to the newly created directory.
1. Enable the icon type from the Settings meta box.
= I can't select a custom image size from the *Image Size* dropdown =
Read [this blog post](http://kucrut.org/add-custom-image-sizes-right-way/).
== Changelog ==
##### [Version 0.13.7](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.6...v0.13.7) (2023-08-17)
- Updated dependencies
- Fixed broken button layout issues in other languages
##### [Version 0.13.6](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.5...v0.13.6) (2023-07-07)
- Updated composer dependencies to address warning in the widgets section
##### [Version 0.13.5](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.4...v0.13.5) (2023-03-30)
- Updated Dependencies and WordPress core tested up to version 6.2
##### [Version 0.13.4](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.3...v0.13.4) (2023-03-01)
Update dependencies
##### [Version 0.13.3](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.2...v0.13.3) (2023-02-25)
- Fix img width/height value, props @Htbaa
- Update dependencies
##### [Version 0.13.2](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.1...v0.13.2) (2022-11-24)
* Fix - update dependencies
##### [Version 0.13.1](https://github.com/codeinwp/wp-menu-icons/compare/v0.13.0...v0.13.1) (2022-11-04)
Tested with the WordPress 6.1 version
#### [Version 0.13.0](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.12...v0.13.0) (2022-08-23)
* Fix Neve upsells showing up inconsistently on edge cases
* Fix inconsistency with Font Awesome 5 and adds compatibility with 6th version
* Fix compatibility with JupiterX
* Update dependencies
##### [Version 0.12.12](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.11...v0.12.12) (2022-05-27)
- Fix the style handler conflict issue which breaks the arrow icon of the submenus on some themes
- Fix dismiss dashboard notice issue on some edge cases
- Fix compatibility with the Max Mega Menu plugin
##### [Version 0.12.11](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.10...v0.12.11) (2022-03-16)
Add font awesome 5 support
Enhance compatibility with Otter/Neve
##### [Version 0.12.10](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.9...v0.12.10) (2022-02-07)
- [Fix] Add support for alt attribute for SVG icons
- Tested up with WordPress 5.9
##### [Version 0.12.9](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.8...v0.12.9) (2021-08-04)
* Tested compatibility with WordPress 5.8
##### [Version 0.12.8](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.7...v0.12.8) (2021-05-12)
* Fix issue when the image is not accessible to fetch the width/height metadata.
##### [Version 0.12.7](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.6...v0.12.7) (2021-05-07)
Fix PHP fatal error when uploading SVG with the image uploader
##### [Version 0.12.6](https://github.com/codeinwp/wp-menu-icons/compare/v0.12.5...v0.12.6) (2021-05-05)
* Adds explicit width/height to icons to prevent layout shifts issues
= 0.12.4 - 2020-07-13 =
* Fix Font Awesome not loading
= 0.12.3 - 2020-07-13 =
* Fixed Menu Icons in Block Editor not working
* Fixed CWP links.
= 0.12.2 - 2019-11-15 =
= 0.12.1 - 2019-11-15 =
* Improve legacy compatibility
= 0.12.0 - 2019-11-15 =
* Fix issues with WordPress 5.3.
= 0.11.5 - 2019-05-23 =
* Sync composer dependencies with the latest version
= 0.11.4 - 2018-12-10 =
* fix issue with composer libraries.
= 0.11.3 - 2018-12-10 =
* Tested with WP 5.0
= 0.11.2 - 2018-03-05 =
* Improve popup sidebar layout.
= 0.11.1 - 2018-02-24 =
* Add recommendation boxes in the menu icon popup.
= 0.11.0 - 2018-01-05 =
* Change ownership to ThemeIsle.
* Improves compatibility with various ThemeIsle products.
= 0.10.2 =
* Compatibility with WordPress 4.7.0, props [Aaron K](https://github.com/aaronkirkham).
= 0.10.1 =
* Support RTL, props [ybspost](https://wordpress.org/support/profile/ybspost).
= 0.10.0 =
* Icon Picker 0.4.0
* Font Awesome 4.6.1
* Introduce `icon_picker_icon_type_stylesheet_uri` filter hook.
* Add `aria-hidden="true"` attribute to icon element
= 0.9.3 =
* Fix CSS conflicts
= 0.9.2 =
* Update Icon Picker to [0.1.1](https://github.com/kucrut/wp-icon-picker/releases/tag/v0.1.1).
= 0.9.1 =
* Fix support for Composer.
= 0.9.0 =
* Performance optimization.
* Modularisation. Developers: Take a look at the [Icon Picker](https://github.com/kucrut/wp-icon-picker) library.
* Bug fixes.
* Removed `menu_icons_{type_id}_props` filter.
= 0.8.1 =
* Fix disappearing icons from front-end when not logged-in, props [jj9617](http://profiles.wordpress.org/jj9617/)
= 0.8.0 =
* Update Dashicons
* Update Genericons to 3.4
* Update Font Awesome to 4.4.0
* Allow the plugin to be disabled for a certain menu
* Add new icon type: SVG, props [Ethan Clevenger](https://github.com/ethanclevenger91)
* Add new filter: `menu_icons_hidden_label_class`
* Add new filter: `menu_icons_item_title`
= 0.7.0 =
* Update Dashicons
* Fix annoying browser popup when navigating away from Nav Menus screen
* Work-around settings update with ajax
= 0.6.0 =
* Update Genericons to [3.2](http://genericons.com/2014/10/03/3-2/)
* Update Font Awesome to [4.2.0](http://fontawesome.io/whats-new/)
= 0.5.1 =
* Update Menu Item Custom Fields to play nice with other plugins.
* Add missing Foundation Icons stylesheet, props [John](http://wordpress.org/support/profile/dsl225)
* JS & CSS fixes
= 0.5.0 =
* New Icon type: Foundation Icons
* Add new Dashicons icons
* Various fixes & enhancements
= 0.4.0 =
* Fontello icon packs support
* New icon type: Image (attachments)
= 0.3.2 =
* Add missing minified CSS for Elusive font icon, props [zazou83](http://profiles.wordpress.org/zazou83)
= 0.3.1 =
* Fix fatal error on outdated PHP versions, props [dellos](http://profiles.wordpress.org/dellos)
= 0.3.0 =
* Add Settings meta box on Menu screen
* New feature: Settings inheritance (nav menu > menu items)
* New feature: Hide menu item labels
* New Icon type: Elusive Icons
* Update Font Awesome to 4.1.0
= 0.2.3 =
* Add new group for Dashicons: Media
= 0.2.1 =
* Fix icon selector compatibility with WP 3.9
= 0.2.0 =
* Media frame for icon selection
* New font icon: Font Awesome
= 0.1.5 =
* Invisible, but important fixes and improvements
= 0.1.4 =
* Fix menu saving
= 0.1.3 =
* Provide icon selection fields on newly added menu items
= 0.1.2 =
* Improve extra stylesheet
= 0.1.1 =
* Improve icon selection UX
= 0.1.0 =
* Initial public release

View File

@ -0,0 +1,25 @@
<?php
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit2df3d2da63bd22bca27c5f9e05dba454::getLoader();

View File

@ -0,0 +1,23 @@
##### [Version 1.0.5](https://github.com/Codeinwp/gutenberg-menu-icons/compare/v1.0.4...v1.0.5) (2021-06-23)
- Redo with @wp/scripts
##### [Version 1.0.4](https://github.com/Codeinwp/gutenberg-menu-icons/compare/v1.0.3...v1.0.4) (2020-05-17)
- Make it compatible with the latest version of Gutenberg
##### [Version 1.0.3](https://github.com/Codeinwp/gutenberg-menu-icons/compare/v1.0.2...v1.0.3) (2020-04-21)
- Fix wrong use of CONSTANT
##### [Version 1.0.2](https://github.com/Codeinwp/gutenberg-menu-icons/compare/v1.0.1...v1.0.2) (2020-04-21)
- Fix line-height issue
##### [Version 1.0.1](https://github.com/Codeinwp/gutenberg-menu-icons/compare/v1.0.0...v1.0.1) (2020-04-19)
- Updated CSS to make it compatible with the latest version of Gutenberg plugin.
#### Version1.0.0 (2020-04-16)
> Things are getting better every day. 🚀

View File

@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@ -0,0 +1,24 @@
ThemeIsle Gutenberg Menu Icons
--------------------------
You can include this library like this::
```
if ( class_exists( '\ThemeIsle\GutenbergMenuIcons' ) ) {
\ThemeIsle\GutenbergMenuIcons::instance();
}
```
## Releasing
This repository uses conventional [changelog commit](https://github.com/Codeinwp/conventional-changelog-simple-preset) messages to trigger release
How to release a new version:
- Clone the master branch
- Do your changes
- Send a PR to master and merge it using the following subject message
- `release: <release short description>` - for patch release
- `release(minor): <release short description>` - for minor release
- `release(major): <release short description>` - for major release
The release notes will inherit the body of the commit message which triggered the release. For more details check the [simple-preset](https://github.com/Codeinwp/conventional-changelog-simple-preset) that we use.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
<?php return array('dependencies' => array('wp-polyfill'), 'version' => '0168e17510d72c2dc5a2d893e33e5086');

View File

@ -0,0 +1 @@
(window.webpackJsonp_themeisle_gutenberg_menu_icons=window.webpackJsonp_themeisle_gutenberg_menu_icons||[]).push([[2],{9:function(e,n,t){}}]),function(e){function n(n){for(var r,u,c=n[0],l=n[1],s=n[2],f=0,p=[];f<c.length;f++)u=c[f],Object.prototype.hasOwnProperty.call(o,u)&&o[u]&&p.push(o[u][0]),o[u]=0;for(r in l)Object.prototype.hasOwnProperty.call(l,r)&&(e[r]=l[r]);for(a&&a(n);p.length;)p.shift()();return i.push.apply(i,s||[]),t()}function t(){for(var e,n=0;n<i.length;n++){for(var t=i[n],r=!0,c=1;c<t.length;c++){var l=t[c];0!==o[l]&&(r=!1)}r&&(i.splice(n--,1),e=u(u.s=t[0]))}return e}var r={},o={0:0},i=[];function u(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,u),t.l=!0,t.exports}u.m=e,u.c=r,u.d=function(e,n,t){u.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},u.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,n){if(1&n&&(e=u(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(u.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var r in e)u.d(t,r,function(n){return e[n]}.bind(null,r));return t},u.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(n,"a",n),n},u.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},u.p="";var c=window.webpackJsonp_themeisle_gutenberg_menu_icons=window.webpackJsonp_themeisle_gutenberg_menu_icons||[],l=c.push.bind(c);c.push=n,c=c.slice();for(var s=0;s<c.length;s++)n(c[s]);var a=l;i.push([8,2]),t()}({8:function(e,n,t){"use strict";t.r(n),t(9);const r=document.querySelectorAll(".wp-block-navigation-link");0<r.length&&Array.from(r).forEach(e=>{const n=e.querySelector(".wp-block-navigation-link__content");let t=Array.from(e.classList);const r=t.find(e=>e.includes("fab")||e.includes("far")||e.includes("fas"))||"fas",o=t.find(e=>e.includes("fa-"));o&&(e.classList.remove(r,o),n.classList.add(r,o))})}});

View File

@ -0,0 +1 @@
<?php return array('dependencies' => array('wp-block-editor', 'wp-components', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill'), 'version' => '2c1513ca91e5dc3cbe8c5cbdd71ea894');

View File

@ -0,0 +1 @@
.wp-block-themeisle-blocks-menu-icon-picker-popover:not(.is-mobile).is-bottom{z-index:9999999}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content{overflow-y:hidden}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-menu-group{padding:7px}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-popover__items{max-height:300px;overflow-y:auto;display:-ms-grid;display:grid;-ms-grid-columns:auto auto auto auto;grid-template-columns:auto auto auto auto;grid-column-gap:10px;grid-row-gap:10px}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-popover__items .components-button{display:flex;justify-content:center}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-popover__items .components-button:hover{box-shadow:inset 0 0 0 1px #007cba}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-popover__items .components-button.is-selected{background:#f8f9f9}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-popover__items .components-button.is-selected i{color:#007cba}.wp-block-themeisle-blocks-menu-icon-picker-popover .components-popover__content .components-popover__items .components-button i.remove-icon{color:#d92222}.fas.wp-block-navigation-link,.fab.wp-block-navigation-link,.far.wp-block-navigation-link{display:flex;align-items:center;font-weight:inherit;-moz-osx-font-smoothing:inherit;-webkit-font-smoothing:inherit;line-height:inherit}.fas.wp-block-navigation-link:before,.fab.wp-block-navigation-link:before,.far.wp-block-navigation-link:before{margin-right:5px}.fas.wp-block-navigation-link .wp-block-navigation-link__content,.fab.wp-block-navigation-link .wp-block-navigation-link__content,.far.wp-block-navigation-link .wp-block-navigation-link__content{display:flex;font-weight:inherit;-moz-osx-font-smoothing:inherit;-webkit-font-smoothing:inherit}.fas.wp-block-navigation-link .wp-block-navigation-link__content:before,.fab.wp-block-navigation-link .wp-block-navigation-link__content:before,.far.wp-block-navigation-link .wp-block-navigation-link__content:before{margin-right:5px}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.fas.wp-block-navigation-link:before,.fab.wp-block-navigation-link:before,.far.wp-block-navigation-link:before{display:none}.fas.wp-block-navigation-link__content,.fab.wp-block-navigation-link__content,.far.wp-block-navigation-link__content{font-family:inherit;display:flex;align-items:center;font-weight:inherit;-moz-osx-font-smoothing:inherit;-webkit-font-smoothing:inherit;line-height:inherit}.fas.wp-block-navigation-link__content:before,.fab.wp-block-navigation-link__content:before,.far.wp-block-navigation-link__content:before{font-family:"Font Awesome 5 Free";margin-right:5px}.fab.wp-block-navigation-link__content:before,.far.wp-block-navigation-link__content:before{font-weight:400}.fas.wp-block-navigation-link__content:before{font-weight:900}.fab.wp-block-navigation-link__content:before{font-family:"Font Awesome 5 Brands"}

View File

@ -0,0 +1,169 @@
<?php
/**
* Class for Menu Icons logic.
*
* @package gutenberg-menu-icons
*/
namespace ThemeIsle;
use WP_Block_Type_Registry;
/**
* Class GutenbergMenuIcons
*/
class GutenbergMenuIcons {
/**
* The main instance var.
*
* @var GutenbergMenuIcons
*/
public static $instance = null;
/**
* Holds the module slug.
*
* @since 1.0.0
* @access protected
* @var string $slug The module slug.
*/
protected $slug = 'gutenberg-menu-icons';
/**
* Initialize the class
*/
public function init() {
add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_editor_assets' ) );
add_action( 'enqueue_block_assets', array( $this, 'enqueue_block_frontend_assets' ) );
}
/**
* Load Gutenberg editor assets.
*
* @since 1.0.0
* @access public
*/
public function enqueue_editor_assets() {
$block_registered = WP_Block_Type_Registry::get_instance()->is_registered( 'core/navigation' );
if ( ! $block_registered ) {
return;
}
$asset_file = include plugin_dir_path( __FILE__ ) . 'build/index.asset.php';
wp_enqueue_script(
'themeisle-gutenberg-menu-icons',
plugin_dir_url( $this->get_dir() ) . $this->slug . '/build/index.js',
$asset_file['dependencies'],
$asset_file['version'],
true
);
wp_enqueue_style(
'themeisle-gutenberg-menu-icons',
plugin_dir_url( $this->get_dir() ) . $this->slug . '/build/index.css',
array( 'font-awesome-5' ),
$asset_file['version']
);
wp_enqueue_style(
'themeisle-gutenberg-menu-icons-font-awesome',
plugins_url( '/', __FILE__ ) . 'assets/css/font-awesome.min.css',
array( 'font-awesome-5' ),
$asset_file['version']
);
wp_set_script_translations( 'themeisle-gutenberg-menu-icons', 'otter-blocks' );
}
/**
* Load Gutenberg assets.
*
* @since 1.0.0
* @access public
*/
public function enqueue_block_frontend_assets() {
if ( ! has_block( 'core/navigation' ) ) {
return;
}
if ( is_admin() ) {
return;
}
$asset_file = include plugin_dir_path( __FILE__ ) . 'build/frontend.asset.php';
wp_enqueue_script(
'themeisle-gutenberg-menu-icons-frontend',
plugin_dir_url( $this->get_dir() ) . $this->slug . '/build/frontend.js',
$asset_file['dependencies'],
$asset_file['version'],
true
);
wp_enqueue_style(
'themeisle-gutenberg-menu-icons-frontend',
plugin_dir_url( $this->get_dir() ) . $this->slug . '/build/style-frontend.css',
array( 'font-awesome-5' ),
$asset_file['version']
);
}
/**
* Method to return path to child class in a Reflective Way.
*
* @since 1.0.0
* @access protected
* @return string
*/
protected function get_dir() {
return dirname( __FILE__ );
}
/**
* The instance method for the static class.
* Defines and returns the instance of the static class.
*
* @static
* @since 1.0.0
* @access public
* @return GutenbergMenuIcons
*/
public static function instance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
self::$instance->init();
}
return self::$instance;
}
/**
* Throw error on object clone
*
* The whole idea of the singleton design pattern is that there is a single
* object therefore, we don't want the object to be cloned.
*
* @access public
* @since 1.0.0
* @return void
*/
public function __clone() {
// Cloning instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'otter-blocks' ), '1.0.0' );
}
/**
* Disable unserializing of the class
*
* @access public
* @since 1.0.0
* @return void
*/
public function __wakeup() {
// Unserializing instances of the class is forbidden.
_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'otter-blocks' ), '1.0.0' );
}
}

View File

@ -0,0 +1,23 @@
<?php
/**
* Loader for the ThemeIsle\GutenbergMenuIcons
*
* @package ThemeIsle\GutenbergMenuIcons
* @copyright Copyright (c) 2020, Hardeep Asrani
* @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
* @since 1.0.0
*/
define( 'THEMEISLE_GUTENBERG_MENU_ICONS_VERSION', '1.0.5' );
if ( function_exists( 'add_action' ) ) {
add_action(
'plugins_loaded',
function () {
// call this only if Gutenberg is active.
if ( function_exists( 'register_block_type' ) ) {
require_once dirname( __FILE__ ) . '/class-gutenberg-menu-icons.php';
}
}
);
}

View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
{description}
Copyright (C) {year} {fullname}
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@ -0,0 +1,79 @@
.iconpicker-fonts-browser .media-toolbar-secondary {
min-width: 40%;
}
.iconpicker-item ._icon {
display: inline-block;
margin-top: 8px;
color: #555;
}
.iconpicker-items .selected ._icon {
color: #222;
}
.iconpicker-item ._icon i {
font-size: 100px;
width: 100%;
height: 100%;
vertical-align: middle;
}
.attachment .svg-icon img {
min-width: 80%;
max-width: 100%;
}
/** Field **/
.ipf-select {
cursor: pointer;
}
.ipf .has-icon {
display: block;
width: 100px;
height: 100px;
line-height: 100px;
margin-bottom: 1em;
text-align: center;
padding: 12px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.1) inset, 0 0 0 1px rgba(0, 0, 0, .05) inset;
background: #eee;
}
.ipf ._icon {
display: inline-block;
color: #333;
font-size: 6em;
width: 100%;
height: 100%;
}
.ipf ._icon::before {
line-height: 100px;
}
/** CMB **/
.cmb_metabox .Icon_Picker_Field_Cmb.repeatable > .field-item {
float: left;
height: 100px;
line-height: 100px;
margin-right: 12px;
margin-bottom: 12px;
padding: 12px;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.1) inset, 0 0 0 1px rgba(0, 0, 0, .05) inset;
background: #eee;
min-width: 100px;
text-align: center;
}
.Icon_Picker_Field_Cmb.repeatable .button {
display: inline-block;
vertical-align: middle;
}
.Icon_Picker_Field_Cmb.repeatable .has-icon {
margin-bottom: 0;
padding: 0;
box-shadow: none;
background: none;
}
.Icon_Picker_Field_Cmb.repeatable .ipf-remove {
display: none;
}
.Icon_Picker_Field_Cmb .cmb-delete-field {
right: 3px;
}

View File

@ -0,0 +1 @@
.cmb_metabox .Icon_Picker_Field_Cmb.repeatable>.field-item,.ipf .has-icon{line-height:100px;padding:12px;box-shadow:0 0 15px rgba(0,0,0,.1) inset,0 0 0 1px rgba(0,0,0,.05) inset;background:#eee;text-align:center}.iconpicker-fonts-browser .media-toolbar-secondary{min-width:40%}.iconpicker-item ._icon{display:inline-block;margin-top:8px;color:#555}.iconpicker-items .selected ._icon{color:#222}.iconpicker-item ._icon i{font-size:100px;width:100%;height:100%;vertical-align:middle}.attachment .svg-icon img{min-width:80%;max-width:100%}.ipf-select{cursor:pointer}.ipf .has-icon{display:block;width:100px;height:100px;margin-bottom:1em}.ipf ._icon{display:inline-block;color:#333;font-size:6em;width:100%;height:100%}.ipf ._icon::before{line-height:100px}.cmb_metabox .Icon_Picker_Field_Cmb.repeatable>.field-item{float:left;height:100px;margin-right:12px;margin-bottom:12px;min-width:100px}.Icon_Picker_Field_Cmb.repeatable .button{display:inline-block;vertical-align:middle}.Icon_Picker_Field_Cmb.repeatable .has-icon{margin-bottom:0;padding:0;box-shadow:none;background:0 0}.Icon_Picker_Field_Cmb.repeatable .ipf-remove{display:none}.Icon_Picker_Field_Cmb .cmb-delete-field{right:3px}

View File

@ -0,0 +1,309 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="Elusive-Icons" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
<glyph unicode="&#xe600;" d="M1024 50.069l-189.285 189.285c51.891 74.299 82.554 164.519 82.554 262.011 0 253.297-205.403 458.635-458.635 458.635-253.232 0-458.635-205.337-458.635-458.635 0-253.297 205.337-458.635 458.635-458.635 97.493 0 187.778 30.663 262.077 82.554l189.285-189.285zM458.569 173.704c-180.899 0-327.596 146.632-327.596 327.596s146.698 327.596 327.596 327.596c180.964 0 327.596-146.632 327.596-327.596 0.066-180.964-146.567-327.596-327.596-327.596zM262.012 435.846h393.115v131.038h-393.115z" />
<glyph unicode="&#xe601;" d="M524.088 697.923h-131.038v-131.039h-131.038v-131.039h131.038v-131.038h131.038v131.038h131.038v131.039h-131.038zM1024 50.069l-189.285 189.285c51.891 74.299 82.554 164.518 82.554 262.012 0 253.297-205.403 458.634-458.635 458.634-253.232 0-458.635-205.338-458.635-458.634 0-253.297 205.337-458.635 458.635-458.635 97.493 0 187.778 30.663 262.077 82.554l189.285-189.285zM458.569 173.704c-180.899 0-327.596 146.633-327.596 327.596 0 180.964 146.698 327.596 327.596 327.596 180.964 0 327.596-146.633 327.596-327.596 0.066-180.964-146.566-327.596-327.596-327.596z" />
<glyph unicode="&#xe602;" d="M1024 59.36h-1024v777.28h1024zM364.623 220.93l358.072 224.887-358.072 224.887z" />
<glyph unicode="&#xe603;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM651.438 755.312c19.397 0.055 38.842-3.229 57.312-9.875l-101.938-101.938 28.125-72.562 72.562-28.125 101.938 101.938c21.267-59.104 8.234-127.829-39.125-175.188-47.358-47.359-116.021-60.392-175.125-39.125l-289.812-289.75-100.688 100.688 289.75 289.812c-21.267 59.104-8.234 127.766 39.125 175.125 32.559 32.559 75.203 48.88 117.875 49zM283.812 261.625c-11.556-11.556-11.556-30.256 0-41.812s30.256-11.556 41.812 0c11.556 11.556 11.556 30.256 0 41.812-12.526 11.386-31.019 10.468-41.812 0z" />
<glyph unicode="&#xe604;" d="M839.758 943.526c-98.471 35.432-212.885 13.712-291.787-65.19-78.902-78.902-100.622-193.316-65.19-291.786l-482.781-482.781 167.769-167.768 482.781 482.781c98.471-35.432 212.885-13.712 291.786 65.19 78.902 78.902 100.622 193.316 65.19 291.787l-169.773-169.773-120.924 46.844-46.844 120.924 169.773 169.773zM201.54 137.54c19.253-19.253 19.253-50.469 0-69.722-19.253-19.253-50.469-19.253-69.722 0-19.253 19.253-19.253 50.469 0 69.722 19.253 19.253 50.469 19.253 69.722 0z" />
<glyph unicode="&#xe605;" d="M511.415-64c-285.929 5.496-509.416 239.882-511.415 512.585 5.56 285.716 238.702 509.416 511.415 511.415 285.732-5.712 510.583-238.334 512.585-511.415-5.648-285.945-239.515-510.583-512.585-512.585zM511.415 923.721c-265.487-5.228-474.459-221.626-476.306-475.136 5.164-265.699 222.807-474.459 476.306-476.306 265.699 5.164 474.459 222.807 476.306 476.306-5.011 265.683-223.173 473.291-476.306 475.136zM388.535 29.623l131.072 376.832 136.923-368.64c-92.248-30.881-179.459-32.752-267.995-8.192zM287.89 695.515c-47.983-6.522-94.649-8.849-140.434-7.022 86.935 124.289 226.13 194.213 363.959 195.438 112.734-2.134 217.83-44.747 294.912-114.688-35.749 2.642-57.154-13.036-72.558-39.79-22.387-69.068 24.919-120.194 51.493-172.032 25.126-47.364 23.134-101.222 9.362-147.456l-65.536-223.524-157.988 469.285c16.462 1.532 33.031 2.025 47.982 4.681 17.696 3.94 21.578 20.407 9.362 30.427-3.901 3.121-8.192 4.681-12.873 4.681l-94.793-7.022h-71.973c-20.32-1.2-77.697 18.429-82.505-8.192-2.485-10.254 5.17-18.292 14.043-19.895 15.655-2.029 33.591-4.331 47.982-5.851l69.047-184.905-95.963-283.209-159.159 469.285c16.842 1.463 33.906 1.973 49.152 4.681 12.483 1.565 17.944 7.806 16.384 18.725-2.213 9.709-10.866 16.269-19.895 16.384zM112.348 622.958l209.481-566.418c-75.586 37.256-135.343 92.044-177.884 157.404-77.821 124.187-86.007 281.74-31.598 409.015zM930.962 332.142c-34.391-112.307-104.634-205.324-201.874-261.559 4.681 12.483 12.093 33.548 22.235 63.195l121.71 353.426c11.703 34.328 19.895 72.558 24.576 114.688 1.58 17.237 1.633 34.615-1.17 50.322 49.869-107.556 64.015-214.094 34.523-320.073z" />
<glyph unicode="&#xe606;" d="M406.8 960c-55.98-0.402-100.333-43.397-102.72-101.627 0.407-56.663 43.856-100.581 102.72-102.747 52.417 0.71 98.978 43.925 101.627 102.747-0.397 56.432-43.592 99.054-101.627 101.627zM435.2 732.693c-23.314 0-42.984-7.83-59.013-23.493-13.022-13.071-27.602-41.9-22.933-65.040h-1.093l60.107-289.6c6.199-33.172 33.5-54.561 69.947-56.827 83.726 0.23 174.513 2.131 260.080 1.093l144.267-251.36c16.233-34.259 57.8-41.474 87.973-16.4 14.477 14.365 20.331 38.805 10.373 60.107l-167.2 290.72c-12.047 24.924-35.814 38.965-65.573 40.427h-185.787l-21.84 107.093h145.333c31.419-2.323 54.053 21.653 47.547 54.64-4.78 16.117-21.482 30.959-40.987 31.707h-170.48c-8.592 43.916-7.224 70.462-40.987 100.533-14.207 10.928-30.791 16.4-49.733 16.4zM278.427 608.747c-4.488-0.061-9.099-0.623-13.707-1.733-64.379-25.051-122.297-68.097-167.2-127.867-39.569-55.797-61.691-122.961-63.387-196.72 0.659-87.418 38.196-177.125 105.467-244.8 65.202-62.1 155.703-99.583 252.987-101.627 70.957 0.391 141.887 21.346 206.56 62.827 58.087 39.456 103.606 96.075 131.12 166.667 5.1 12.386 9.478 26.247 13.12 41.547 5.333 24.052-8.167 43.591-33.867 51.36-23.376 5.18-44.281-7.718-52.453-32.8-2.186-10.928-5.469-21.48-9.84-31.68-18.559-49.073-53.105-91.549-98.907-124.587-44.531-30.283-97.864-46.773-155.733-48.080-68.821 0.49-135.11 26.723-190.693 76.48-47.761 46.305-77.638 112.565-79.227 184.693 0.305 51.417 16.864 102.157 48.080 148.080 30.613 42.502 73.468 75.326 125.68 96.72 22.001 7.216 33.854 29.995 26.213 54.64-7.38 17.716-24.766 27.143-44.213 26.88z" />
<glyph unicode="&#xe607;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM239.918 702.606h544.13v-509.212h-544.13zM306.999 636.077v-376.186h410.002v376.186zM351.708 588.093h319.481v-166.809h-319.481zM351.708 392.365h90.488v-90.488h-90.488zM466.188 392.365h90.521v-90.488h-90.521zM580.669 392.365h90.521v-90.488h-90.521z" />
<glyph unicode="&#xe608;" d="M596.136 173.018h-170.325v170.325h170.325zM811.607 173.018h-170.325v170.325h170.325zM380.665 173.018h-170.325v170.325h170.325zM811.607 711.696v-313.972h-601.267v313.972zM897.796 801.988h-771.591v-707.976h771.591zM0-31.166v958.332h1024v-958.332z" />
<glyph unicode="&#xe609;" d="M512 960l-512-1024h1024l-512 1024zM472.625 604.938h78.75v-135.375l-19.25-190.375h-40.25l-19.25 190.375v135.375zM472.625 204.438h78.75v-84.813h-78.75v84.813z" />
<glyph unicode="&#xe60a;" d="M916.334 422.839c2.474 9.934-0.073 20.151-9.362 23.406l-38.619 17.554c-9.544 3.985-21.692-1.398-23.406-10.533-7.455-15.959-18.023-29.022-35.109-29.257-14.824 0-26.917 7.997-36.279 23.991-9.362 15.994-14.043 36.864-14.043 62.61 0 25.746 4.681 46.811 14.043 63.195 9.362 16.384 21.455 24.576 36.279 24.576 18.7-1.359 27.574-13.168 35.109-28.087 3.994-9.8 14.86-12.102 23.406-9.362l38.619 17.554c8.943 4.707 12.928 16.362 8.192 24.576-22.625 48.371-57.734 72.558-105.326 72.558-39.79 0-71.973-15.214-96.549-45.641-24.576-30.427-36.864-70.217-36.864-119.369 0-49.152 12.288-88.746 36.864-118.784 24.576-30.038 56.759-45.056 96.549-45.056 47.592 0 83.090 25.357 106.496 76.069zM544.183 346.77c62.033 0.959 109.272 43.584 110.007 99.474-1.096 29.514-12.963 52.471-33.938 70.217 18.47 17.44 29.074 41.193 29.257 64.366-1.536 63.242-54.135 93.119-105.326 93.623-44.471 0-78.799-17.554-102.985-52.663-5.462-7.803-4.681-15.606 2.341-23.406l28.087-25.746c9.003-8.026 19.019-6.542 26.917 1.17 11.703 16.384 25.746 24.576 42.13 24.576 13.263 0 21.065-3.315 23.406-9.947 4.512-9.839 3.215-18.816 0-26.917-12.070-12.498-29.711-8.777-46.811-8.777-11.122-0.374-19.725-6.896-19.895-17.554v-42.13c0.97-12.086 9.209-20.071 19.895-17.554 12.901 0.012 45.614 1.473 50.907-9.362 2.73-6.241 4.096-11.313 4.096-15.214 0-17.944-9.752-26.917-29.257-26.917-18.725 0-34.328 8.582-46.811 25.746-7.636 9.239-19.699 9.374-26.917 2.341l-29.257-29.257c-7.022-7.022-7.802-14.433-2.341-22.235 26.521-37.31 65.134-53.505 106.496-53.833zM428.325 648.704c2.139 11.218-6.123 22.039-16.384 22.235h-51.493c-9.362 0-14.824-4.681-16.384-14.043l-24.576-125.221-25.746 125.221c-2.341 9.362-8.192 14.043-17.554 14.043h-37.449c-10.144 0-15.995-4.681-17.554-14.043l-25.746-125.221-24.576 125.221c-1.56 9.362-7.411 14.043-17.554 14.043h-50.322c-12.826-1.009-18.991-11.151-17.554-22.235l64.366-283.209c2.341-9.362 8.192-14.043 17.554-14.043h49.152c9.362 0 15.214 4.681 17.554 14.043l23.406 117.029 23.406-117.029c1.56-9.362 7.411-14.043 17.554-14.043h49.152c9.362 0 15.214 4.681 17.554 14.043zM1024 960v-784l-512-240-512 240v784z" />
<glyph unicode="&#xe60b;" d="M0 631.633h208.057l312.989 255.095v-877.456l-312.989 255.095h-208.057zM638.643 673.244c61.512-61.512 92.872-136.292 94.078-224.339 0-84.429-31.359-156.796-94.078-217.103l-63.322 65.131c43.42 43.42 65.131 94.681 65.131 153.781 0 60.306-21.71 112.773-65.131 157.399l63.322 65.131zM747.194 779.986c90.459-90.459 135.689-199.614 135.689-327.463s-45.23-237.607-135.689-329.272l-66.94 66.94c72.367 71.161 108.551 158.304 108.551 261.428s-36.184 190.869-108.551 263.237zM846.7 879.491c55.482-55.482 98.902-120.009 130.262-193.583 31.359-73.574 47.039-151.369 47.039-233.385 0-82.016-15.68-160.113-47.039-234.29-31.359-74.177-74.78-139.006-130.262-194.488l-65.131 65.131c100.108 100.108 150.163 221.022 150.163 362.742s-50.054 262.634-150.163 362.742z" />
<glyph unicode="&#xe60c;" d="M929.315 378.573q2.199-2.199 2.199-5.183t-2.199-5.183l-48.693-48.693q-2.199-2.199-5.026-2.199-2.513 0-5.341 2.199l-69.427 69.427-69.427-69.427q-2.199-2.199-5.026-2.199-2.513 0-5.341 2.199l-48.693 48.693q-1.885 1.885-1.885 5.341 0 3.142 1.885 5.026l69.427 69.427-69.113 69.427q-2.199 1.885-2.199 5.026 0 3.456 2.199 5.341l48.379 48.693q2.199 2.199 5.341 2.199 3.141 0 5.026-2.199l69.427-69.427 69.427 69.427q2.199 2.199 5.184 2.199t5.183-2.199l48.693-48.693q2.199-2.199 2.199-5.183 0-2.984-2.199-5.183l-69.427-69.427zM92.486 631.633h208.057l312.99 255.096v-877.456l-312.99 255.096h-208.057v367.265z" />
<glyph unicode="&#xe60d;" d="M145.639 631.633h208.057l312.989 255.095v-877.456l-312.989 255.095h-208.057zM784.283 673.244c61.512-61.512 92.872-136.292 94.078-224.339 0-84.429-31.359-156.796-94.078-217.103l-63.322 65.131c43.421 43.421 65.131 94.681 65.131 153.781 0 60.306-21.71 112.773-65.131 157.399z" />
<glyph unicode="&#xe60e;" d="M0 960v-1024h1024v1024h-1024zM454.562 686.188c28.994 0.3 57.353-2.914 71.188-3.313 51.285-1.477 60.342-27.415 59.688-48.75-0.959-31.246-21.063-163.422 16.187-176.313 54.281 29.025 90.679 119.176 117.187 176.313 13.408 28.901 11.289 30.337 42.188 30.375l122.75 0.188c29.559 0.037 28.407 1.073 37.875-11 22.024-28.082-69.502-144.891-99.063-177.188-54.552-59.602-22.724-82.682-13.937-90.875 40.712-37.959 80.050-77.322 104.5-113.625 19.438-28.861 11.41-55.734-13.313-56.75l-131.625-5.438c-43.679-1.795-111.596 76.504-122.438 93.563-8.767 14.071-51.020 31.707-55-4.25l-5.562-50.187c-4.041-35.875-30.529-35.038-51.438-35.938-144.784-6.23-194.091 48.893-267 130.25-53.436 75.571-104.431 151.576-146.688 242.625-12.648 27.254-19.347 47.246-21.062 68.437 21.262 16.618 95.892 9.46 146 10.563 13.706 0.302 22.954-7.55 30.188-23.187 28.229-61.023 59.016-120.951 99.75-173.938 17.74-16.34 33.423-22.348 41.25 10.875 4.545 0.418 4.18 55.435 4.437 96.937 0.177 28.496-3.171 62.671-51.437 78.438 9.762 25.594 48.098 31.801 85.375 32.188z" />
<glyph unicode="&#xe60f;" d="M812.922 688.304c-105.758 87.401-246.232-32.040-279.273-127.729 20.374-0.351 43.685 1.767 61.159-4.871 26.981-14.597 27.357-42.729 25.438-66.571-12.031-52.759-49.416-148.757-97.421-156.414-10.103-1.082-20.567 4.511-31.391 16.778-41.954 52.554-36.757 121.689-46.545 179.687-9.159 48.522-16.064 146.452-73.607 167.78-63.38 7.741-119.035-39.485-159.662-76.854-24.896-23.092-50.334-45.103-76.313-66.030v-4.33c6.181-7.432 11.19-15.009 16.778-22.19 9.483-9.543 26.785-7.208 37.345-3.789 38.395 9.982 51.891 19.767 72.524-16.778 31.095-84.060 54.637-178.8 75.23-259.247 14.393-45.885 33.376-104.489 79.56-123.4 28.533-12.124 77.755 4.169 99.586 17.319 93.421 59.019 165.714 153.455 217.573 244.634 37.86 76.826 131.99 229.673 79.019 302.004zM1024 960v-1024h-1024v1024z" />
<glyph unicode="&#xe610;" d="M947.75 960l-947.75-948.875 76.25-75.125 947.75 947.688-76.25 76.312zM0 958.5v-240.062h240v240l-240 0.062zM282.812 958.5v-240.062h240v240l-240 0.062zM0 671.188v-240h240v240h-240zM282.812 671.188v-240l240 240h-240zM704.625 417l-148-134.812h467.375v134.812h-319.375zM524.625 244.625v-134.813h499.375v134.813h-499.375zM524.625 72.25v-134.75h499.375v134.75h-499.375z" />
<glyph unicode="&#xe611;" d="M0 876.188v-729.188h211v-211l328.938 211h484.062v729.188h-1024zM224.5 693h412.5v-127.188l162.5 127.188v-340l-162.5 127.188v-127.188h-412.5v340z" />
<glyph unicode="&#xe612;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM206.75 679h610.438v-462h-610.438zM281.625 604.125v-312.25h460.75v312.25zM443.5 549.75l179.812-103.688-179.812-104.312z" />
<glyph unicode="&#xe613;" d="M0 835.5v-775h1024v775zM125.562 709.875h772.875v-523.75h-772.875zM397.125 618.687v-348.875l301.625 174.938z" />
<glyph unicode="&#xe614;" d="M470.275 960l138.165-295.55c1.964 74.747-60.494 251.17-138.165 295.55zM902.675 939.216c-2.001-0.179-4.138-2.453-6.448-7.012-31.357-57.297-85.464-91.319-136.037-105.549-51.418-14.431-104.899-48.862-124.518-87.895-22.922-53.225-13.092-95.469 9.203-143.424 28.116 4.26 56.254 15.121 80.069 26.544 61.091 29.743 114.011 76.352 148.432 130.903 13.842 21.938 16.552 18.002 4.633-6.699-22.442-46.506-95.974-111.676-188.31-166.963-20.579-12.322-20.882-12.747-11.644-20.784 29.551-25.712 61.94-41.273 91.338-43.76 127.503-0.587 182.232 136.014 185.806 230.943-0.948 61.597-11.367 141.194-49.081 191.754-1.147 1.439-2.242 2.048-3.443 1.941zM437.909 674.217c-203.356 0-369.108-165.752-369.108-369.108 0-203.356 165.752-369.108 369.108-369.108 203.356 0 369.046 165.752 369.046 369.108 0 50.839-10.294 99.546-28.985 143.737l-77.44-32.741c14.412-34.073 22.412-71.513 22.412-110.995 0-153.327-119.819-277.602-271.322-284.719 175.329 119.784 254.699 430 160.953 627.221 7.447-135.349 1.338-503.63-208.218-625.594-141.988 16.517-251.54 136.525-251.54 283.092 0 157.932 127.163 285.032 285.095 285.032 39.483 0 76.797-7.875 110.87-22.287l32.804 77.315c-44.191 18.691-92.835 29.048-143.674 29.048z" />
<glyph unicode="&#xe615;" d="M801.77 227.513c-134.264 48.912-177.185 90.199-177.185 178.601 0 53.052 43.992 87.434 58.989 132.902 14.997 45.468 23.672 99.299 30.883 138.458 7.211 39.159 10.077 54.305 13.998 96.027 4.793 52.071-30.066 186.499-216.456 186.499-186.335 0-221.304-134.427-216.402-186.499 3.922-41.723 6.803-56.87 13.998-96.027 7.196-39.158 15.787-92.987 30.774-138.458 14.987-45.471 59.043-79.85 59.043-132.902 0-88.402-42.921-129.689-177.185-178.601-134.754-49.021-222.23-97.362-222.23-131.513 0-34.097 0-160 0-160h1024c0 0 0 125.903 0 160s-87.53 82.437-222.23 131.513z" />
<glyph unicode="&#xe616;" d="M819.261 288.555c-0.001-64.88-23.463-117.111-70.388-156.691-46.926-39.173-93.377-62.636-177.843-70.389v-125.475h-122.344v123.027c-99.564 2.040-167.642 19.586-242.723 52.638v161.588c35.5-17.546 78.141-33.052 127.923-46.518 50.19-13.466 75.627-21.423 114.799-23.871v189.743l-21.764 15.914c-80.794 31.827-138.125 66.308-171.993 103.441-33.46 37.54-50.19 83.853-50.19 138.941 0 59.166 23.055 107.724 69.164 145.674 46.518 38.356 91.948 61.615 174.783 69.777v93.647h122.344v-91.199c93.443-4.081 158.664-22.851 234.154-56.311l-57.535-143.226c-63.656 26.115-109.699 42.029-176.619 47.742v-180.562c79.569-30.604 116.839-57.127 150.3-79.569 33.867-22.443 58.554-47.13 74.061-74.061 15.913-26.932 23.87-58.352 23.871-94.259M635.027 279.373c-0.001 17.138-6.937 31.624-20.81 43.457-13.874 11.833-15.44 24.074-43.187 36.724v-152.406c55.494 9.385 63.997 33.46 63.997 72.225M388.973 650.902c0-17.955 6.12-32.849 18.362-44.682 12.649-11.426 13.603-23.259 41.351-35.5v143.838c-52.639-7.754-59.713-28.972-59.713-63.656" />
<glyph unicode="&#xe617;" d="M512-64c-282.769 0-512 229.231-512 512s229.231 512 512 512c282.769 0 512-229.231 512-512 0-282.769-229.231-512-512-512zM512 848.696c-221.329 0-400.696-179.423-400.696-400.696s179.367-400.696 400.696-400.696c221.329 0 400.696 179.423 400.696 400.696 0 221.273-179.367 400.696-400.696 400.696zM612.174 233.739h-200.348v227.617h-125.217l225.391 212.035 225.391-212.035h-125.217v-227.617z" />
<glyph unicode="&#xe618;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM519.165 778.699c95.656 3.873 165.625-79.573 169.046-166.699h-99.502c-3.703 39.039-31.339 68.144-69.544 66.614-38.205-1.53-68.694-31.626-69.512-69.544v-78.492l310.469 0.001v-312.868h-496.276v312.868h85.722v78.492c8.088 96.786 73.941 165.756 169.597 169.629z" />
<glyph unicode="&#xe619;" d="M964.924 507.076v-571.076h-905.848v571.076l156.445 0.001v143.316c2.178 84.511 35.808 162.987 90.803 218.803 27.715 27.715 60.354 49.778 97.915 66.188 37.562 16.41 77.858 24.615 120.889 24.615 83.715-1.705 160.464-35.744 216.068-89.162 58.7-59.642 90.579-138.458 92.444-214.974h-181.607c-1.111 35.641-14.008 60.716-37.197 84.239-25.978 24.405-56.879 36.961-89.709 37.197-35.641-1.111-66.186-14.008-89.709-37.197-24.405-25.978-36.961-56.879-37.197-89.709v-143.316z" />
<glyph unicode="&#xe61a;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 891.591c244.998 0 443.591-198.593 443.591-443.591s-198.593-443.623-443.591-443.623c-244.998 0-443.623 198.626-443.623 443.623 0 244.998 198.626 443.591 443.623 443.591zM787.094 498.208c14.736-13.935 14.278-33.917 3.275-48.034-13.458-14.197-34.671-14.802-48.034-3.275-41.74 37.876-87.419 73.317-129.91 112.444-0.13-1.673-11.521 7.519-16.375 7.642-4.367 0-6.55-5.095-6.55-15.284 2.143-42.049-0.98-86.441 3.821-127.181 1.82-14.92 2.729-23.471 2.729-25.655l49.126-279.471c2.815-25.664-11.213-44.833-33.842-49.126-22.66-6.164-45.947 13.376-49.126 33.842 0 0-39.633 225.659-40.392 229.254-0.759 3.594-2.099 23.499-9.825 24.563-9.927-3.602-8.777-20.32-9.825-24.563-1.048-4.243-40.392-229.254-40.392-229.254-6.64-23.674-27.049-37.666-49.126-33.842-25.226 6.307-37.556 26.468-33.842 49.126l49.126 280.563c7.254 51.855 5.458 98.243 5.458 150.652 0 10.192-2.001 15.469-6.004 15.829-4.003 0.364-9.279-2.366-15.829-8.188l-129.91-111.352c-15.179-11.311-36.399-9.426-48.034 3.275-11.762 16.807-11.010 34.992 3.275 48.034l170.303 150.652c8.007 5.095 15.467 8.551 22.38 10.371 6.916 1.82 15.467 2.729 25.655 2.729h113.535c10.189 0 18.741-0.909 25.655-2.729 6.914-1.82 14.374-5.641 22.38-11.463 54.222-47.561 111.79-98.732 170.303-149.561zM587.12 756.629c0-41.239-33.431-74.671-74.671-74.671-41.239 0-74.671 33.431-74.671 74.671 0 41.239 33.431 74.671 74.671 74.671 41.239 0 74.671-33.431 74.671-74.671z" />
<glyph unicode="&#xe61b;" d="M1024 774.832c-6.849-14.46-19.598-32.726-38.243-54.796-18.646-22.070-41.668-41.477-69.066-58.221 0.761-6.088 1.332-11.796 1.712-17.124 2.955-82.022-16.691-167.123-43.951-238.020-52.837-131.816-133.799-237.905-249.436-309.94-120.588-69.168-261.026-83.879-390.421-71.349-85.902 9.866-170.567 37.917-234.595 90.756 117.106-13.999 226.394 25.839 312.794 90.185-95.976-2.429-165.71 66.999-198.635 147.264 14.842-3.889 30.369-3.42 44.522-2.283 17.422 1.636 33.959 3.271 50.23 6.85-61.199 19.744-114.747 56.042-142.698 110.734-16.396 34.655-23.798 67.655-23.973 105.026 28.677-15.099 63.171-29.812 94.751-28.54-47.694 40.403-85.93 92.039-93.039 151.26-4.488 49.379 7.869 94.455 25.686 136.419 71.345-78.408 151.394-142.935 243.728-182.653 63.144-25.858 126.11-39.685 191.215-39.955-7.515 58.15-1.672 114.389 25.686 162.105 32.197 51.3 79.171 81.065 131.853 95.893 75.381 19.329 148.903-7.974 195.211-60.504 49.938 5.394 97.776 27.548 135.848 50.23-16.177-48.99-47.679-97.7-93.61-121.008 43.735 8.099 85.464 21.045 124.433 37.672z" />
<glyph unicode="&#xe61c;" d="M1024 960v-1024h-1024v1024zM596.431 213.649c-17.4 4.85-34.558 10.363-48.169 21.108-5.412 4.33-8.118 8.299-8.118 11.907 0 87.318 0 174.636 0 261.953h165.615c0 38.247 0 76.493 0 114.74h-165.615v173.192h-95.256c-7.101-88.917-54.21-173.192-147.214-173.192v-114.74h79.019c0-94.534 0-189.068 0-283.603 0.325-44.599 20.918-82.974 56.829-103.374 33.988-17.594 69.8-22.072 105.539-22.19 35.028 0.17 72.305-0.527 105.539 1.624 29.1 1.045 56.994 7.703 81.725 20.025v122.317c-14.432-9.382-30.309-17.319-47.628-23.814-29.053-9.526-54.986-12.653-82.266-5.953z" />
<glyph unicode="&#xe61d;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM432.562 768.562h158.875v-49h185.25v-90.187h-529.375v90.187h185.25v49zM275.75 560.75h472.5v-433.312h-472.5v433.312z" />
<glyph unicode="&#xe61e;" d="M385.174 960v-78.287h-295.927v-144.049h845.505v144.049h-295.927v78.287h-253.651zM134.654 628.061v-692.061h754.691v692.061h-754.691z" />
<glyph unicode="&#xe61f;" d="M964 302.035v-366.035h-904v366.035l345.333 147.087c-85.057 54.607-125.014 150.371-125.754 240.281 1.121 135.189 93.872 269.426 232.421 270.597 145.521-4.772 231.628-141.011 232.421-270.597-2.889-97.213-45.744-189.544-122.386-239.158z" />
<glyph unicode="&#xe620;" d="M150.102 298.538c1.144 72.484 21.331 137.697 57.647 194.080 37.42 56.044 78.988 110.577 113.694 162.694 55.094 84.962 101.793 172.969 130.347 263.257 9.926 28.322 32.458 44.338 60.21 40.994 30.927 1.899 52.344-14.575 60.21-40.994 30.067-97.764 78.011-183.219 130.988-263.257 36.176-58.982 77.5-104.505 113.053-162.694 38.573-61.3 57.3-127.62 57.647-194.080-2.203-99.152-41.214-191.324-105.367-256.851-71.555-68.752-165.688-105.034-256.531-105.687-99.103 2.111-191.021 41.444-256.211 105.687-68.61 71.782-105.033 165.922-105.687 256.851zM308.953 218.472c2.375-52.198 43.843-90.327 90.314-90.955 52.665 2.331 89.705 44.501 90.314 90.955 0 18.362-4.697 34.375-14.092 48.040-10.326 13.437-20.506 27.346-28.824 40.673-13.177 21.519-26.061 42.918-32.667 65.654-1.708 8.54-6.619 12.17-14.732 10.889-7.686 1.708-12.811-1.922-15.373-10.889-6.906-24.355-18.976-45.825-31.706-65.654-8.954-14.941-19.687-26.569-29.144-40.673-9.821-14.092-14.519-30.105-14.092-48.040z" />
<glyph unicode="&#xe621;" d="M874.015 810.015c-92.648 92.648-220.639 149.985-362.015 149.985-282.751 0-512-229.249-512-512 0-282.751 229.249-512 512-512 282.751 0 512 229.249 512 512 0 141.376-57.337 269.367-149.985 362.015zM770.121 736.348l92.271-92.271-346.415-346.327-242.477 242.477 92.271 92.271 150.25-150.25 254.1 254.1z" />
<glyph unicode="&#xe622;" d="M512 960c-131.026 0-262.076-49.962-362.046-149.934-199.939-199.944-199.939-524.164 0-724.108 199.939-199.944 524.152-199.944 724.091 0 199.939 199.944 199.939 524.164 0 724.108-99.969 99.972-231.020 149.934-362.046 149.934zM512 826.253c96.8 0 193.629-36.887 267.488-110.747 147.717-147.72 147.717-387.267 0-534.988-147.717-147.72-387.258-147.72-534.975 0-147.717 147.72-147.717 387.267 0 534.988 73.858 73.86 170.687 110.747 267.488 110.747zM459.627 740.318v-239.182h-132.556v-130.934h263.488v370.116h-130.931z" />
<glyph unicode="&#xe623;" d="M0 934.175zM612.296 882.55c36.275 0.39 70.598-37.081 94.373-63.81 55.837-68.61 25.025-144.64 12.75-227.868h254.681c34.429-0.256 52.081-26.145 49.685-61.124l-71.31-441.862c-16.16-56.504-78.972-106.245-145.184-113.311h-471.111c-27.869 0.364-48.751 20.145-50.937 50.937v514.424c0.362 27.867 20.145 48.751 50.937 50.937h117.121l115.873 259.743c6.444 14.018 23.335 31.619 43.123 31.935zM185.933 601.058c19.601-0.25 35.229-13.802 36.873-35.685v-567.923c-0.284-19.184-16.182-34.125-36.873-35.625h-148.996c-18.905 0.258-35.157 14.586-36.937 35.625v567.923c0.27 19.813 15.34 34.183 36.937 35.685z" />
<glyph unicode="&#xe624;" d="M973.87 279.747h-254.607c5.156-41.804 12.507-81.954 21.642-120.938 4.962-74.133-44.682-127.555-96.751-162.948-13.579-8.487-28.007-10.608-43.283-6.365-14.434 5.092-25.042 15.276-31.826 30.553l-115.846 259.699h-117.119c-30.784 2.186-50.559 23.060-50.921 50.921v514.305c2.186 30.784 23.060 50.559 50.921 50.921h471.022c25.717-1.962 51.094-11.121 71.926-22.915 36.114-21.936 61.545-52.188 73.199-89.112l71.29-443.016c4.246-33.594-20.213-60.68-49.648-61.106zM185.863 269.563h-148.945c-20.687 1.499-36.634 16.466-36.918 35.645v567.773c1.643 21.88 17.32 35.394 36.918 35.645h148.945c21.591-1.503 36.648-15.835 36.918-35.645v-567.773c-1.779-21.035-18.018-35.388-36.918-35.645z" />
<glyph unicode="&#xe625;" d="M0 960v-256h256v256h-256zM400 960v-256h624v256h-624zM0 576v-256h256v256h-256zM400 576v-256h624v256h-624zM0 192v-256h256v256h-256zM400 192v-256h624v256h-624z" />
<glyph unicode="&#xe626;" d="M0 960v-448h448v448h-448zM576 960v-448h448v448h-448zM0 384v-448h448v448h-448zM576 384v-448h448v448h-448z" />
<glyph unicode="&#xe627;" d="M0 960v-256h256v256h-256zM384 960v-256h256v256h-256zM768 960v-256h256v256h-256zM0 576v-256h256v256h-256zM384 576v-256h256v256h-256zM768 576v-256h256v256h-256zM0 192v-256h256v256h-256zM384 192v-256h256v256h-256zM768 192v-256h256v256h-256z" />
<glyph unicode="&#xe628;" d="M220 960l-5-181.812h63.188c0 124.703 0.023 124.562 159.375 124.562v-501.562c0-62.518-0.032-62.414-87.5-60.875v-49.937h323.875v49.937c-87.326 0-87.5 0.152-87.5 60.875v501.562c159.436 0 159.812-0.035 159.812-124.562h62.75l-4.562 181.812h-584.438zM178.688 291.5l-178.688-177.75 178.688-177.75v118.938h666.625v-118.938l178.688 177.75-178.688 177.75v-119h-666.625v119z" />
<glyph unicode="&#xe629;" d="M846.25 960l-177.75-178.688h119v-666.625h-119l177.75-178.688 177.75 178.688h-118.938v666.625h118.938l-177.75 178.688zM5.062 782.812l-5.062-181.812h63.188c0 124.703 0.085 124.562 159.437 124.562v-501.562c0-62.518-0.032-62.414-87.5-60.875v-49.937h323.813v49.937c-87.326 0-87.5 0.152-87.5 60.875v501.562c159.436 0 159.875-0.035 159.875-124.562h62.75l-4.562 181.812h-584.438z" />
<glyph unicode="&#xe62a;" d="M0 848.031v-200h1024v200h-1024zM642.438 798.531h329.062v-101h-329.062v101zM0 547.969v-200h1024v200h-1024zM416.188 498.469h555.312v-101h-555.312v101zM0 247.969v-200h1024v200h-1024zM763.688 198.469h207.812v-101h-207.812v101z" />
<glyph unicode="&#xe62b;" d="M0 561.085v248.041c2.968 38.946 30.775 65.629 66.108 66.108h248.041c32.903-0.552 63.554-12.455 90.42-28.683l388.726-426.97c23.438-30.099 24.641-67.553 0-92.879l-287.378-286.286c-29.038-25.056-69.734-27.324-92.879 0l-366.052 407.575c-25.731 31.846-46.604 73.764-46.986 113.094zM125.387 659.428c27.452-25.31 66.852-22.968 90.42 0 25.195 27.22 23.091 67.030 0 90.42-27.255 24.811-66.947 22.842-90.42 0-24.916-29.101-23.98-65.457 0-90.42zM432.16 874.142h95.064c39.854-2.458 87.017-18.163 112.547-46.986l366.052-408.667c24.735-28.561 23.729-69.583 0-93.972l-286.286-286.286c-39.676-22.491-76.038-20.923-100.528 7.649l280.822 280.822c25.287 27.979 22.586 68.332 0 92.879l-327.572 366.52c-38.775 48.395-122.254 85.855-140.101 88.040z" />
<glyph unicode="&#xe62c;" d="M26.199 584.071v296.821c2.268 45.351 38.81 78.562 79.109 79.109h296.821c47.733-2.966 104.726-21.681 135.334-56.226l439.347-489.035c27.598-34.938 28.379-83.284 0-112.452l-343.893-343.893c-33.718-30.505-84.026-29.206-112.452 0l-438.039 490.342c-31.933 37.711-55.785 88.13-56.226 135.335zM154.995 755.364c1.872-44.126 36.68-75.972 75.84-76.493 44.254 1.977 75.971 37.249 76.493 76.493-1.95 44.273-37.401 75.327-76.493 75.84-44.146-1.844-75.328-36.832-75.84-75.84z" />
<glyph unicode="&#xe62d;" d="M917.624 762.232c112.314-150.392 137.082-348.125 67.667-513.099-86.43-191.871-273.749-311.689-472.565-313.133-195.721 2.177-369.451 113.044-456.612 279.073h223.355c96.49 0.695 179.2 60.004 180.444 149.425-0.045 48.959-18.287 93.921-57.764 118.112-34.692 19.78-71.149 23.694-107.826 30.215-22.772 4.768-57.296 9.367-57.764 35.159 2.113 41.446 46.038 44.896 74.818 45.047 51.713 0 103.425 0 155.138 0 22.225-0.583 44.165-1.851 63.816-9.888 20.301-9.435 30.612-23.647 30.808-43.948v-154.918c1.533-51.318 18.218-94.998 54.463-126.901 36.819-29.633 80.263-42.046 123.78-42.3 46.494 1.267 90.603 14.036 123.78 42.3 38.102 35.548 54.144 80.023 54.463 126.901zM512.725 960c106.174-1.373 206.465-35.152 288.27-88.996v-491.124c-2.733-36.006-28.8-61.077-61.615-61.528-35.955 2.712-62.248 28.62-62.715 61.528v147.227c-1.341 65.175-19.188 133.637-82.52 157.665-16.873 6.226-34.844 9.339-53.913 9.339h-251.962c-44.63-1.121-85.79-13.721-117.729-40.652-33.256-30.601-49.206-68.641-49.512-109.871 0.495-28.173 6.917-56.227 21.455-78.009 24.127-32.89 58.78-48.327 94.073-54.936 28.219-6.692 57.178-6.732 83.62-15.382 19.247-7.193 25.171-18.377 25.306-36.258-1.119-21.265-12.422-30.574-30.257-35.708-25.353-5.919-51.559-4.933-75.368-4.944h-223.355c-10.509 43.714-16.402 88.185-16.504 129.648 5.41 286.182 239.292 510.014 512.725 512z" />
<glyph unicode="&#xe62e;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM256 704h512v-512h-512v512z" />
<glyph unicode="&#xe62f;" d="M0 960h1024v-1024h-1024z" />
<glyph unicode="&#xe630;" d="M810.667 960v-1024h-170.667v469.333l-426.667-426.667v938.667l426.667-426.667v469.333z" />
<glyph unicode="&#xe631;" d="M213.333-64v1024h170.667v-469.333l426.667 426.667v-938.667l-426.667 426.667v-469.333z" />
<glyph unicode="&#xe632;" d="M516.989 937.055l-128.348-366.811-388.641 1.722 309.221-235.474-91.424-277.109-30.289-91.931 319.452 221.292 313.425-229.801-27.858 92.69-83.978 279.54 315.451 227.066-388.539 8.712-118.471 370.103zM514.254 732.985l73.544-229.852 241.248-5.369-195.865-140.96 6.686-22.134 62.756-208.984-194.599 142.682-198.347-137.415 68.378 207.211 7.192 21.932-18.386 14.030-173.528 132.147 241.248-1.064 7.648 21.83 72.025 205.945z" />
<glyph unicode="&#xe633;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM515.375 780.875l80.687-251.937 264.438-5.938-214.688-154.5 76.063-253.375-213.313 156.437-217.437-150.687 82.875 251.25-210.5 160.25 264.562-1.187 87.313 249.687z" />
<glyph unicode="&#xe634;" d="M820.36-41.063l-313.408 229.822-319.459-221.333 121.725 369.087-309.218 235.428 388.638-1.713 128.352 366.835 118.466-370.146 388.544-8.712-315.422-227.049z" />
<glyph unicode="&#xe635;" d="M242.471 154.565v-83.538h403.505v83.538h-403.505zM249.301 304.829l-5.779-83.538 402.455-27.321 5.254 83.013-401.929 27.846zM125.307 339.505v-403.505h637.833v403.505h-66.725v-336.254h-504.382v336.254h-66.725zM279.774 482.414l-19.965-80.911 391.421-97.199 19.965 81.437-391.421 96.673zM366.465 684.692l-42.557-71.979 347.813-204.38 42.557 72.505-347.813 203.854zM578.725 876.462l-69.352-46.76 224.345-334.678 69.353 46.235-224.345 335.204zM849.831 960l-83.013-9.983 48.862-400.353 83.013 9.983-48.862 400.353z" />
<glyph unicode="&#xe636;" d="M512 960c-282.77 0-512-229.225-512-512 0-123.356 43.652-236.482 116.312-324.875 201.19 213.297 601.007 148.124 700.563-86.437 125.658 93.301 207.125 242.778 207.125 411.312 0 282.775-229.23 512-512 512zM819.75 693.438c46.964-15.45 28.73-95.098-6.688-92.938-195.109 62.14-345.109 94.135-571.062 59.375-46.964 15.451-28.73 95.098 6.688 92.938 201.427 17.552 376.551 12.54 571.062-59.375zM752.938 542.75c39.759-13.12 24.383-80.588-5.688-78.75-165.324 52.633-292.418 79.732-483.875 50.312-39.803 13.093-24.32 80.579 5.688 78.75 170.463 15.076 319.309 10.484 483.875-50.312zM698.313 393.812c33.471-11.032 20.541-67.858-4.75-66.312-139.258 44.38-246.335 67.191-407.625 42.375-33.495 11.052-20.523 67.861 4.812 66.312 143.999 12.552 268.391 9.103 407.562-42.375zM454.313 104.625c-78.978 0-150.050-42.395-183.375-108.438 71.839-38.41 153.907-60.187 241.062-60.187 52.651 0 103.446 7.927 151.25 22.688-38.528 80.444-126.656 145.937-208.938 145.937z" />
<glyph unicode="&#xe637;" d="M0 660.984h241.312l363.016 295.869v-1017.705l-363.016 295.869h-241.312zM740.721 709.246c71.344-71.344 107.716-158.076 109.115-260.197 0-97.923-36.372-181.858-109.115-251.803l-73.443 75.541c50.361 50.361 75.541 109.814 75.541 178.361 0 69.945-25.18 130.798-75.541 182.557l73.443 75.541zM866.623 833.049c104.918-104.918 157.377-231.519 157.377-379.803s-52.459-275.585-157.377-381.902l-77.639 77.639c83.934 82.536 125.902 183.607 125.902 303.213 0 119.607-41.967 221.377-125.902 305.312z" />
<glyph unicode="&#xe638;" d="M621.926 669.309c-23.764-0.166-47.615-4.113-70.457-12.391-4.758-1.783-12.468-4.393-15.849-12.135l1.041-409.564c2.021-4.455 4.681-6.929 9.125-8.517h364.146c59.519-1.045 105.902 49.864 113.409 111.872 6.429 67.139-34.598 127.266-106.589 137.695-20.449 2.951-45.926 0.020-66.646-8.165-0.694-0.311-0.892 0.471-1.425 5.379-5.114 44.968-23.964 84.618-54.255 121.862-41.706 45.944-106.8 74.42-172.499 73.963zM509.109 639.355c-6.946 0-13.596-98.901-14.696-296.715 17.016-151.699 15.101-155.638 31.17 0-2.282 197.825-9.527 296.718-16.473 296.715zM465.1 615.806c-6.946-0.215-13.447-91.483-14.264-273.165 17.016-151.699 15.101-155.638 31.17 0-2.565 182.542-9.959 273.38-16.906 273.165zM337.41 587.582c-0.052 0-0.108 0-0.16-0.020-6.535-0.988-12.675-82.352-14.328-244.925 17.016-151.699 15.085-155.638 31.154 0-3.131 162.722-10.074 244.651-16.666 244.941zM380.283 579.929c-6.734 0.138-13.254-78.813-14.921-237.289 17.016-151.699 15.101-155.638 31.17 0-2.565 157.921-9.515 237.15-16.249 237.289zM295.226 576.743c-7.017-0.074-13.372-78.174-13.624-234.103 17.016-151.699 15.085-155.638 31.154 0-2.848 156.223-10.513 234.176-17.53 234.103zM422.611 572.101c-0.053 0.001-0.105 0-0.16-0.020-6.876-1.064-13.254-78.61-14.072-229.444 17.016-151.699 15.101-155.638 31.17 0-2.826 153.879-10.108 229.33-16.938 229.46zM253.698 561.903c-6.045 0.058-11.776-71.853-14.552-219.262 17.016-151.699 15.101-155.638 31.17 0-4.011 144.894-10.477 219.204-16.618 219.262zM213.019 521.143c-5.744 0.351-11.539-58.799-15.753-178.503 17.016-151.699 15.101-155.638 31.17 0-3.98 118.3-9.673 178.152-15.417 178.503zM130.267 461.845c-3.401-0.69-6.754-38.213-14.232-113.97 16.089-150.022 14.28-153.919 29.473 0-8.17 76.183-11.732 114.681-15.241 113.97zM89.236 458.739c-3.401-0.676-6.754-37.46-14.232-111.712 16.089-147.042 14.28-150.861 29.473 0-8.045 73.521-11.623 111.235-15.081 111.712-0.054 0-0.106 0.020-0.16 0zM170.707 457.042c-3.597-0.69-7.14-38.229-15.049-113.986 17.016-150.022 15.101-153.918 31.17 0-8.508 75.011-12.289 113.499-15.945 113.986-0.057 0-0.119 0.020-0.176 0zM49.341 438.648c-3.401-0.569-6.77-31.542-14.248-94.038 16.089-123.762 14.28-126.976 29.473 0-8.045 61.88-11.607 93.637-15.065 94.038-0.054 0-0.106 0-0.16 0zM11.639 404.676c-2.78-0.366-5.525-20.276-11.639-60.483 13.154-79.621 11.673-81.689 24.094 0-6.68 40.434-9.587 60.86-12.455 60.483z" />
<glyph unicode="&#xe639;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM244.188 715.812h535.625v-535.625h-535.625v535.625zM419.25 613.938c-31.935 0-57.812-25.878-57.812-57.813s25.878-57.813 57.812-57.813c31.935 0 57.875 25.878 57.875 57.813 0 31.935-25.94 57.813-57.875 57.813zM599.5 613.938c-31.935 0-57.812-25.878-57.812-57.813s25.878-57.813 57.812-57.813c31.935 0 57.812 25.878 57.812 57.813 0 31.935-25.878 57.813-57.812 57.813zM325.875 431.875c0-102.795 83.33-186.125 186.125-186.125 102.795 0 186.125 83.33 186.125 186.125h-372.25z" />
<glyph unicode="&#xe63a;" d="M0 960v-1024h1024v1024zM334.75 765.25c61.049 0 110.562-49.451 110.562-110.5s-49.513-110.562-110.562-110.562c-61.049 0-110.563 49.514-110.563 110.562 0 61.049 49.514 110.5 110.563 110.5zM679.312 765.25c61.049 0 110.5-49.451 110.5-110.5s-49.451-110.562-110.5-110.562c-61.049 0-110.562 49.514-110.562 110.562 0 61.049 49.513 110.5 110.562 110.5zM156.187 417.188h711.625c0-196.511-159.301-355.875-355.812-355.875s-355.813 159.364-355.813 355.875z" />
<glyph unicode="&#xe63b;" d="M53.149 959.999l0.001-494.622c-11.764 7.837-32.732 14.395-43.51 6.517-10.393-12.016 4.38-29.55 10.894-40.754 64.568-64.987 130.734-106.749 208.697-140.774-17.637-55.206-22.824-110.52-17.378-165.22 11.591-95.607 76.913-188.462 179.356-189.147 48.996 1.118 101.73 36.429 102.192 86.954v215.246c12.432-3.554 24.598-8.793 36.961-10.894v-201.078c0-14.494 3.426-27.003 10.31-37.512 21.249-30.706 55.646-49.228 91.85-49.475 107.208 4.28 167.276 92.317 179.388 189.147 5.247 57.238-2.369 115.196-17.41 165.252 71.083 35.893 200.612 88.582 223.384 171.185 1.025 10.249-8.623 14.063-16.567 14.136-12.859-0.528-23.271-5.312-32.875-12.482l0.001 493.52zM106.386 905.629h807.684v-471.765c-13.466-8.547-26.501-14.207-40.203-20.652l-715.282-7.619c-18.519 7.065-34.601 18.521-52.199 26.099zM373.344 655.27c-66.64 0-120.64-54.033-120.64-120.673s54-120.64 120.64-120.64c66.64 0 120.673 54 120.673 120.64 0 66.64-54.033 120.673-120.673 120.673zM659.334 655.27c-66.64 0-120.64-54.033-120.64-120.673s54-120.64 120.64-120.64c66.64 0 120.673 54 120.673 120.64 0 66.64-54.033 120.673-120.673 120.673z" />
<glyph unicode="&#xe63c;" d="M797.287 320.534c0.536 79.814-46.71 132.879-111.197 162.687-31.757 13.573-64.292 24.658-95.312 32.318-42.058 10.638-81.374 17.706-123.248 29.58-33.936 8.022-75.487 34.056-76.688 64.637 7.714 54.251 73.788 66.528 113.936 66.828 60.029 2.291 97.648-27.821 123.796-72.306 19.15-32.088 34.688-51.163 70.114-51.49 38.561 2.171 68.512 32.643 69.019 67.923-5.386 79.456-76.295 125.266-141.324 146.802-83.982 21.225-176.192 21.856-254.165-7.669-74.169-27.396-125.158-88.978-125.987-162.14 3.722-134.445 138.886-173.096 239.923-195.006 30.773-6.133 60.439-12.543 88.739-21.911 37.85-13.743 69.592-34.496 70.114-74.497 0-24.102-12.051-44.186-36.153-60.255-51.569-25.376-115.244-39.041-166.522-12.051-36.607 17.49-54.362 47.016-69.019 79.974-15.325 34.096-34.198 55.483-70.114 55.872-37.654-1.404-70.677-28.427-71.21-63.541 5.966-70.253 55.077-128.149 110.649-157.758 105.24-43.218 221.357-51.595 323.184-9.86 79.143 33.968 130.641 103.017 131.465 181.859zM987.91 340.254c18.989-39.439 28.484-81.070 28.484-124.891-1.672-76.477-31.987-147.381-81.618-197.745-57.072-53.416-125.721-81.098-197.745-81.618-47.557 0.802-92.273 12.002-131.465 32.866-91.535-15.9-198.101-2.772-276.076 30.127-118.313 53.434-209.030 147.958-256.904 256.904-36.762 98.14-46.889 190.341-27.936 284.84-62.783 113.425-44.070 250.435 43.274 339.069 96.771 92.539 236.599 104.283 346.738 38.892 156.515 25.274 317-30.396 422.878-134.751 91.257-95.2 140.449-219.961 141.324-340.713-0.15-35.65-3.989-70.611-10.955-102.981z" />
<glyph unicode="&#xe63d;" d="M819.2-64v1024h204.8v-1024h-204.8zM546.133 704h204.8v-768h-204.8v768zM273.067 448h204.8v-512h-204.8v512zM0 192h204.8v-256h-204.8v256z" />
<glyph unicode="&#xe63e;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM253.938 743.688l91.125-28.625c12.064-3.962 20.099-15.165 21.5-26.625l5.125-50.188 412.625-46.062c17.718-3.433 30.167-19.429 27.688-35.875l-25.625-144.375c-3.262-15.101-15.769-25.454-29.688-25.625h-366.562l-7.188-40.938h348.125c18.203-0.641 31.537-14.503 31.75-30.688-0.755-18.464-15.638-30.549-31.75-30.75h-385c-19.419 1.606-33.674 16.994-30.688 35.812l16.375 90.125-25.625 251.938-70.625 22.5c-8.192 2.731-14.341 7.866-18.438 15.375-7.749 16.24-0.511 34.222 13.312 42 7.89 4.102 15.596 4.613 23.562 2zM392.688 266.25c26.51 0 48-21.49 48-48s-21.49-48-48-48c-26.51 0-48 21.49-48 48 0 26.51 21.49 48 48 48zM674.438 266.25c26.51 0 48-21.49 48-48s-21.49-48-48-48c-26.51 0-48 21.49-48 48 0 26.51 21.49 48 48 48z" />
<glyph unicode="&#xe63f;" d="M1023.487 595.316l-42.942-246.354c-5.296-27.214-26.979-43.762-51.983-44.072h-626.054l-12.431-70.064h596.673c31.419-2.387 52.73-24.645 53.113-53.113-2.284-31.353-24.539-52.724-53.113-53.113h-659.956c-35.692 3.21-56.975 31.661-53.113 63.283l28.251 153.689-42.942 431.684-122.047 38.422c-29.824 11.842-41.997 38.823-35.032 66.674 11.582 29.027 39.335 42.288 66.674 35.032l155.949-49.723c21.009-7.876 33.094-25.073 36.162-45.202l9.040-85.885 707.419-79.104c32.503-7.040 50.148-32.786 46.333-62.153zM388.499 17.081c0-44.78-36.301-81.081-81.081-81.081-44.78 0-81.081 36.301-81.081 81.081 0 44.78 36.301 81.081 81.081 81.081 44.78 0 81.081-36.301 81.081-81.081zM872.554 17.081c0-44.78-36.301-81.081-81.081-81.081s-81.081 36.301-81.081 81.081c0 44.78 36.301 81.081 81.081 81.081 44.78 0 81.081-36.301 81.081-81.081z" />
<glyph unicode="&#xe640;" d="M643.885 900.216v-251.059c-228.040-0.006-643.885-2.507-643.885-713.157 47.147 475.222 263.732 478.21 643.885 478.215v-274.17l380.115 380.115-380.115 380.054z" />
<glyph unicode="&#xe641;" d="M0 960v-1024h1024v534.625l-168-178.125v-188.5h-688v688h338.5v168h-506.5zM732.042 960v-192.833c-175.15-0.004-494.542-1.924-494.542-547.75 36.212 365.002 202.559 367.287 494.542 367.292v-210.583l291.958 291.958-291.958 291.917z" />
<glyph unicode="&#xe642;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM547.125 738.125c136.988 0 248-111.075 248-248.063s-111.012-248-248-248c-41.456 0-80.527 10.142-114.875 28.125 0.035-0.159 0.091-0.342 0.125-0.5l-111.875-111.813-91.625 91.687 107.875 107.938c0.178 0.080 0.384 0.11 0.562 0.188-24.223 38.308-38.25 83.702-38.25 132.375 0 136.988 111.075 248.063 248.063 248.063zM547.125 627.938c-76.129 0-137.875-61.746-137.875-137.875s61.746-137.812 137.875-137.812c76.129 0 137.813 61.684 137.813 137.812 0 76.129-61.684 137.875-137.813 137.875z" />
<glyph unicode="&#xe643;" d="M573.98 960c-241.755 0-437.758-195.97-437.758-437.724 0-85.898 24.734-166.027 67.484-233.634-0.314-0.137-0.622-0.26-0.937-0.402l-190.474-190.44 161.8-161.8 197.332 197.366c-0.060 0.278-0.139 0.557-0.201 0.836 60.617-31.736 129.592-49.684 202.752-49.684 241.755 0 437.724 196.003 437.724 437.758 0 241.755-195.97 437.724-437.724 437.724zM573.98 765.545c134.351 0 243.236-108.919 243.236-243.269 0-134.351-108.885-243.269-243.236-243.269-134.351 0-243.269 108.919-243.269 243.269 0 134.351 108.919 243.269 243.269 243.269z" />
<glyph unicode="&#xe644;" d="M434.875 960v-133.312c-151.534-30.699-270.864-150.028-301.563-301.563h-133.312v-154.25h133.312c30.699-151.534 150.028-270.864 301.563-301.563v-133.312h154.25v133.312c151.534 30.699 270.864 150.028 301.563 301.563h133.312v154.25h-133.312c-30.699 151.534-150.028 270.864-301.563 301.563v133.312h-154.25zM434.875 723.938v-149.625h154.25v149.625c96.205-26.83 171.983-102.608 198.813-198.813h-149.625v-154.25h149.625c-26.83-96.205-102.608-171.983-198.813-198.813v149.625h-154.25v-149.625c-96.205 26.83-171.983 102.608-198.813 198.813h149.625v154.25h-149.625c26.83 96.205 102.608 171.983 198.813 198.813z" />
<glyph unicode="&#xe645;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM213.375 695.062h597.25v-394.25h-216.875v-56.812h52.875v-43.062h-269.25v43.062h52.875v56.812h-216.875v394.25zM286.875 620.625v-245.437h450.25v245.437h-450.25z" />
<glyph unicode="&#xe646;" d="M0 871.625v-676h371.812v-97.438h-90.625v-73.812h461.625v73.812h-90.625v97.438h371.812v676h-1024zM125.938 744h772.125v-420.812h-772.125v420.812z" />
<glyph unicode="&#xe647;" d="M440.991 893.096c-76.405 0-138.35-61.945-138.35-138.35 6.548-93.321 69.495-119.898 139.049-172.151 51.719-32.723 45.385-69.2 55.812-127.869-46.038-11.66-101.219-25.495-133.983 2.358l-78.084 55.55c-0.112 0.093-0.237 0.17-0.349 0.262-23.866 19.571-54.421 31.356-87.692 31.356-58.49 0-108.422-36.301-128.655-87.604-2.664-10.305-4.366-10.246-13.363-10.219-30.6 0-55.375-24.774-55.375-55.375 0-30.6 24.774-55.375 55.375-55.375 26.443 2.945 16.988 6.113 31.967-13.625 25.284-33.118 65.174-54.502 110.051-54.502 56.443 0 104.955 33.809 126.472 82.276 24.443-14 45.585-19.263 73.455-23.058h626.68c-77.651 141.523-270.504 119.657-397.32 131.8-26.041 64.687-31.915 150.135-92.321 193.55h-0.611c28.004 25.318 45.593 61.905 45.593 102.627 0 76.405-61.945 138.35-138.35 138.35zM440.991 823.921c38.202 0 69.175-30.973 69.175-69.175s-30.973-69.175-69.175-69.175c-38.202 0-69.175 30.973-69.175 69.175 0 38.202 30.973 69.175 69.175 69.175zM197.394 475.076c38.202 0 69.175-30.973 69.175-69.175s-30.973-69.175-69.175-69.175c-38.202 0-69.175 30.973-69.175 69.175 0 38.202 30.973 69.175 69.175 69.175zM566.676 446.078c21.707 0 39.304-17.597 39.304-39.304s-17.597-39.304-39.304-39.304c-21.707 0-39.304 17.597-39.304 39.304 0 21.707 17.597 39.304 39.304 39.304zM569.646 256.633c53.326-107.778 90.229-240.056 224.819-253.729l-94.854 253.729zM153.548 180.034v-61.838h134.769v61.838zM396.097 180.034v-61.838h148.744l-28.474 61.838zM818.921 180.034l18.342-61.838h134.769v61.838z" />
<glyph unicode="&#xe648;" d="M1024-64c0 565.54-458.46 1024-1024 1024v-204.812c452.432 0 819.188-366.756 819.188-819.188h204.812zM614.375-64c0 339.324-275.051 614.375-614.375 614.375v-204.75c226.216 0 409.625-183.409 409.625-409.625h204.75zM204.813-64c0 113.108-91.705 204.812-204.812 204.812v-204.812h204.812z" />
<glyph unicode="&#xe649;" d="M1024-64c0 0-206.726 1024-206.726 1024s-255.19 0-255.19 0c0 0 7.82-236.096 7.82-236.096 0 0-115.808 0-115.808 0 0 0 7.82 236.096 7.82 236.096 0 0-255.19 0-255.19 0 0 0-206.725-1024-206.725-1024 0 0 428 0 428 0 0 0 9.763 294.78 9.763 294.78 0 0 148.473 0 148.473 0 0 0 9.763-294.78 9.763-294.78 0 0 428 0 428 0 0 0 0 0 0 0M583.316 318.949c0 0-142.633 0-142.633 0s11.502 347.276 11.502 347.276c0 0 119.628 0 119.628 0 0 0 11.502-347.276 11.502-347.276 0 0 0 0 0 0" />
<glyph unicode="&#xe64a;" d="M512-64c-282.752 0-512 229.248-512 512s229.248 512 512 512c282.752 0 512-229.248 512-512 0-282.752-229.248-512-512-512zM448 639.68l-256-191.68 256-191.68v383.36zM768 639.68l-256-191.68 256-191.68v383.36z" />
<glyph unicode="&#xe64b;" d="M256 768l-256-256h192v-320h384l-128 128h-128v192h192l-256 256zM448 704l128-128h128v-192h-192l256-256 256 256h-192v320h-384z" />
<glyph unicode="&#xe64c;" d="M690.32 845.714v-219.357h114.323v-228.608h-447.965v128.107l-356.678-237.785 356.678-237.785v128.107h667.322v667.322h-333.68z" />
<glyph unicode="&#xe64d;" d="M771.5 700.5l-259.5 259.5-259.5-259.5h173.688v-505h-173.688l259.5-259.5 259.5 259.5h-173.687v505h173.687z" />
<glyph unicode="&#xe64e;" d="M874.542 960l-205.875-205.875-151.25 151.292v-452h452l-151.292 151.25 205.875 205.875-149.458 149.458zM54.583 442.583l151.292-151.25-205.875-205.875 149.458-149.458 205.875 205.875 151.25-151.292v452h-452z" />
<glyph unicode="&#xe64f;" d="M259.5 707.5l-259.5-259.5 259.5-259.5v173.688h505v-173.688l259.5 259.5-259.5 259.5v-173.688h-505z" />
<glyph unicode="&#xe650;" d="M572 960l151.25-151.292-205.833-205.833 149.458-149.458 205.833 205.833 151.292-151.25v452h-452zM357.125 442.583l-205.833-205.833-151.292 151.25v-452h452l-151.25 151.292 205.833 205.833-149.458 149.458z" />
<glyph unicode="&#xe651;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 744.562c82.32 0 156.771-33.586 210.5-87.75l86.062 61.25v-276.25l-264.375 88.125 77.875 55.437c-30.148 24.252-68.354 38.813-110.062 38.813-97.306 0-176.188-78.882-176.188-176.188 0-97.306 78.882-176.188 176.188-176.188 65.304 0 122.193 35.592 152.625 88.375l104.375-60c-51.22-88.856-147.072-148.75-257-148.75-163.782 0-296.562 132.78-296.562 296.562 0 163.782 132.78 296.562 296.562 296.562z" />
<glyph unicode="&#xe652;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c189.791 0 355.319 103.341 443.75 256.75l-180.25 103.688c-52.541-91.13-150.752-152.625-263.5-152.625-167.998 0-304.188 136.189-304.188 304.188 0 167.998 136.189 304.188 304.188 304.188 72.010 0 138.011-25.192 190.062-67.063l-134.437-95.625 456.375-152.188v476.938l-148.625-105.75c-92.762 93.514-221.25 151.5-363.375 151.5z" />
<glyph unicode="&#xe653;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM351.125 736l160.875-160.875 160.875 160.875 127.125-127.125-160.875-160.875 160.875-160.875-127.125-127.125-160.875 160.875-160.875-160.875-127.125 127.125 160.875 160.875-160.875 160.875 127.125 127.125z" />
<glyph unicode="&#xe654;" d="M512 960c-282.769 0-512-229.231-512-512s229.231-512 512-512c282.769 0 512 229.231 512 512 0 282.769-229.231 512-512 512zM512 848.75c221.329 0 400.688-179.477 400.688-400.75s-179.359-400.688-400.688-400.688c-221.329 0-400.688 179.414-400.688 400.688 0 221.273 179.359 400.75 400.688 400.75zM371.562 699.438l-111-111 140.438-140.438-140.438-140.438 111-111 140.438 140.438 140.438-140.438 111 111-140.438 140.438 140.438 140.438-111 111-140.438-140.438-140.438 140.438z" />
<glyph unicode="&#xe655;" d="M0 734.003l286.003-286.003-286.003-286.003 225.997-225.997 286.003 286.003 286.003-286.003 225.997 225.997-286.003 286.003 286.003 286.003-225.997 225.997-286.003-286.003-286.003 286.003-225.997-225.997z" />
<glyph unicode="&#xe656;" d="M512 960c-248.541 0-455.673-177.114-502.188-412h142.125c43.791 157.914 188.204 274 360.063 274 103.312 0 196.671-41.98 264.25-109.75l-164.25-164.25h412v412l-150-150c-92.642 92.672-220.604 150-362 150zM0 348v-412l150 150c92.642-92.672 220.604-150 362-150 248.541 0 455.673 177.114 502.188 412h-142.125c-43.791-157.914-188.204-274-360.063-274-103.312 0-196.671 41.98-264.25 109.75l164.25 164.25z" />
<glyph unicode="&#xe657;" d="M681.939 209.459c11.601-18.786-0.762-26.623-11.294-35.496-45.309-33.728-108.721-46.057-160.807-46.252-48.727 0.957-119.874 12.441-156.504 46.252-12.51 9.88-19.98 25.778-8.067 36.571 12.617 10.582 24.051-0.622 33.882-9.143 42.402-29.545 80.674-30.947 130.689-36.034 54.116 2.634 90.366 10.687 136.605 37.109 10.985 9.547 23.506 18.643 35.496 6.992zM868.896 880.146c-40.732 0-75.551-25.31-89.613-61.050l-198.452 48.665-82.837-234.505c-58.801-1.434-114.011-9.679-165.641-24.738-51.63-15.059-97.505-35.141-137.662-60.239-21.513 19.361-47.337 29.050-77.455 29.050-16.493 0-31.731-3.047-45.714-9.143-13.983-6.096-26.366-14.532-37.123-25.289-10.756-10.756-19.161-23.3-25.256-37.641-6.095-14.341-9.143-29.387-9.143-45.163 0-20.795 4.844-39.819 14.525-57.029 9.681-17.21 22.737-31.197 39.23-41.953-0.717-5.736-1.423-11.639-2.14-17.735-0.717-6.096-1.070-12.383-1.070-18.837 0-42.308 11.998-82.28 36.020-119.927 24.022-37.647 57.033-70.433 98.983-98.399 41.95-27.966 90.711-50.038 146.286-66.172 55.575-16.134 115.243-24.186 179.064-24.186 63.104 0 122.645 8.052 178.578 24.186 55.933 16.134 104.855 38.206 146.804 66.172 41.95 27.966 74.961 60.752 98.983 98.399 24.022 37.647 36.020 77.619 36.020 119.927 0 11.474-1.091 23.311-3.242 35.502 17.21 10.756 30.845 24.936 40.883 42.505 10.039 17.568 15.076 36.753 15.076 57.548 0 15.776-3.047 30.822-9.143 45.163-6.096 14.341-14.532 26.885-25.289 37.641-10.756 10.756-23.3 19.193-37.641 25.289-14.341 6.096-29.773 9.143-46.265 9.143-28.684 0-54.476-9.688-77.422-29.050-38.723 24.381-82.833 44.11-132.312 59.169-49.479 15.059-102.539 23.656-159.189 25.808l67.761 190.379 168.138-39.425c0-0.119 0-0.238 0-0.357 0-53.168 43.091-96.259 96.259-96.259 53.168 0 96.292 43.091 96.292 96.259 0 53.168-43.124 96.292-96.292 96.292zM510.898 596.685c58.084 0 112.941-7.154 164.571-21.495 51.63-14.341 96.639-33.718 135.003-58.099 38.365-24.381 68.68-53.253 90.91-86.598 22.23-33.345 33.329-68.665 33.329-105.953 0-37.289-11.099-72.416-33.329-105.402-22.228-32.986-52.544-61.666-90.91-86.047-38.364-24.381-83.373-43.758-135.003-58.099-51.63-14.342-106.487-21.495-164.571-21.495-58.084 0-112.941 7.154-164.571 21.495-51.63 14.342-96.447 33.718-134.452 58.099-38.005 24.381-68.096 53.061-90.326 86.047-22.23 32.986-33.362 68.113-33.362 105.402 0 37.289 11.132 72.609 33.362 105.953 22.23 33.345 52.321 62.216 90.326 86.598 38.005 24.381 82.822 43.758 134.452 58.099 51.63 14.341 106.487 21.495 164.571 21.495zM667.007 452.312c-40.099 0-72.624-32.271-72.624-72.073 0-39.801 32.526-72.073 72.624-72.073 40.099 0 72.592 32.271 72.592 72.073 0 39.801-32.493 72.073-72.592 72.073zM365.52 451.177c-40.099 0-72.592-32.271-72.592-72.073 0-39.801 32.493-72.073 72.592-72.073 40.099 0 72.624 32.271 72.624 72.073 0 39.801-32.526 72.073-72.624 72.073zM965.901 358.419c-0.344-0.179-0.682-0.386-1.038-0.648 0.351 0.262 0.686 0.473 1.038 0.648z" />
<glyph unicode="&#xe658;" d="M512-64c-282.752 0-512 229.248-512 512s229.248 512 512 512c282.752 0 512-229.248 512-512 0-282.752-229.248-512-512-512zM512 704c-141.376 0-256-114.624-256-256s114.624-256 256-256c141.376 0 256 114.624 256 256 0 141.376-114.624 256-256 256z" />
<glyph unicode="&#xe659;" d="M798.657 923.987v-158.772h-146.746c-46.428 0-97.694-22.663-140.568-65.98-42.875-43.317-89.465-107.576-163.438-213.251-74.305-106.15-115.684-170.297-141.488-199.122-25.804-28.825-21.654-26.352-59.211-26.352h-147.206v-126.176h147.206c56.387 0 113.101 23.568 153.186 68.346s77.919 106.807 150.82 210.951c73.233 104.618 119.791 166.536 149.769 196.822 29.977 30.286 31.267 28.587 50.931 28.587h146.746v-165.672l225.343 225.277-225.343 225.343zM0 765.215v-126.176h147.206c37.557 0 33.407 2.538 59.211-26.287 16.602-18.546 43.953-57.878 78.072-107.447 4.625 6.634 6.803 9.832 11.698 16.824 18.586 26.551 35.468 50.507 51.062 72.354 5.427 7.604 9.972 13.603 15.115 20.701-23.057 33.314-42.262 59.735-61.971 81.752-40.085 44.778-96.799 68.28-153.186 68.28h-147.206zM798.657 422.633v-162.123h-146.746c-19.664 0-20.953-1.634-50.931 28.653-19.829 20.033-47.91 55.546-85.169 106.461-4.506-6.391-8.153-11.45-12.88-18.204-26.088-37.269-44.074-64.156-62.957-92.004 26.789-35.481 49.595-63.040 71.369-85.038 42.875-43.317 94.14-66.045 140.568-66.045h146.746v-162.321l225.343 225.277-225.343 225.343z" />
<glyph unicode="&#xe65a;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM472.812 719l22-101.312c-64.461-14.269-123.738-32.826-118.937-104.813h75.75v-269.625h-228.187v252c0.081 200.27 147.116 216.564 249.375 223.75zM778.5 719l22.062-101.312c-64.461-14.269-123.738-32.826-118.937-104.813h75.75v-269.625h-228.187v252c0.081 200.27 147.053 216.564 249.312 223.75z" />
<glyph unicode="&#xe65b;" d="M442.43 780.214c-181.455-12.751-442.287-41.722-442.43-397.093v-447.121h404.91v478.388h-134.449c-8.518 127.738 96.669 160.721 211.053 186.040l-39.084 179.786zM984.916 780.214c-181.455-12.751-442.287-41.722-442.431-397.093v-447.121h404.91v478.388h-134.449c-8.518 127.738 96.669 160.721 211.053 186.040l-39.084 179.786z" />
<glyph unicode="&#xe65c;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM502.75 831.688c62.131-0.15 112.049-19.797 146.875-55.75s50.795-80.113 51.125-124.313c-0.431-46.578-3.988-68.023-41.438-124.313-37.449-56.29-131.604-137.744-113.812-229.187l-71.875 1.25c-31.835 64.060-23.747 141.119 0.5 192.125s42.42 67.396 62.125 114.562c19.705 47.167-26.983 100.454-69.562 100.813-42.579 0.359-58.799-17.221-72.125-47.313h-58.312c-5.036 2.908-15.898 6.149-12.312 59.313 3.585 53.163 116.682 112.963 178.812 112.813zM506.375 238.5c48.075 0 86.937-38.925 86.937-87s-38.862-87.188-86.937-87.188c-48.075 0-87 39.112-87 87.188 0 48.075 38.925 87 87 87z" />
<glyph unicode="&#xe65d;" d="M499.676 960c-82.904 0.2-233.808-79.59-238.592-150.528-4.784-70.938 9.664-75.309 16.384-79.189h77.824c17.782 40.153 39.441 63.625 96.256 63.147 56.815-0.479 119.136-71.549 92.843-134.485-26.293-62.937-50.59-84.858-82.944-152.917-32.354-68.059-43.161-170.864-0.683-256.341l95.915-1.707c-23.74 122.016 101.923 230.725 151.893 305.835 49.97 75.11 54.72 103.737 55.296 165.888-0.44 58.978-21.797 117.914-68.267 165.888-46.469 47.974-113.022 74.211-195.925 74.411zM504.455 168.448c-64.149 0-116.053-51.905-116.053-116.053 0-64.149 51.904-116.395 116.053-116.395 64.149 0 116.053 52.246 116.053 116.395 0 64.149-51.904 116.053-116.053 116.053z" />
<glyph unicode="&#xe65e;" d="M0 960v-465.333h465.333v465.333h-465.333zM558.667 960v-465.333h465.333v465.333h-465.333zM92.667 867.333h280v-280h-280v280zM651.333 867.333h280v-280h-280v280zM186 772.667v-92.667h94v92.667h-94zM744 772.667v-92.667h92.667v92.667h-92.667zM0 401.333v-465.333h465.333v465.333h-465.333zM558.667 401.333v-465.333h92.667v278.667h92.667v-92.667h280v279.333h-92.667v-92.667h-94.667v92.667h-278zM92.667 308.667h280v-280h-280v280zM186 216v-94h94v94h-94zM744 28.667v-92.667h92.667v92.667h-92.667zM931.333 28.667v-92.667h92.667v92.667h-92.667z" />
<glyph unicode="&#xe65f;" d="M402.558 960c-80.252 0-145.3-65.113-145.3-145.443 0-39.723 15.892-75.748 41.679-101.997h-298.936v-242.405c26.644 30.812 66.038 50.351 109.945 50.351 80.252 0 145.3-65.113 145.3-145.443 0-80.33-65.049-145.443-145.3-145.443-43.907 0-83.301 19.539-109.945 50.351v-343.971h314.027c-33.207 26.657-54.47 67.583-54.47 113.506 0 80.33 65.049 145.443 145.3 145.443 80.252 0 145.3-65.113 145.3-145.443 0-45.923-21.263-86.849-54.47-113.506h280.109v303.834c26.307-26.407 62.704-42.727 102.903-42.727 80.251 0 145.3 65.113 145.3 145.443 0 80.33-65.049 145.443-145.3 145.443-40.199 0-76.596-16.32-102.903-42.727v267.293h-269.617c25.793 26.251 41.679 62.268 41.679 101.997 0 80.33-65.049 145.443-145.3 145.443z" />
<glyph unicode="&#xe660;" d="M313.562 834.437v-154.625h-40.437l-238.813-101.625h955.375l-238.813 101.625h-40.437v154.625h-396.875zM0 518.812v-310.938h158.5l-55.688-271.875h818.375l-55.688 271.875h158.5v310.938h-1024zM248.688 401.625h526.562l80-390.625h-686.562l80 390.625z" />
<glyph unicode="&#xe661;" d="M512 929.872c-282.759 0-512-229.241-512-512 0-216.949 135.020-402.185 325.552-476.707v45.106c-166.911 72.175-283.718 238.155-283.718 431.602 0 259.709 210.457 470.338 470.165 470.338 259.709 0 470.165-210.629 470.165-470.338 0-193.447-116.806-359.427-283.718-431.602v-45.106c190.611 74.484 325.552 259.701 325.552 476.707 0 282.759-229.241 512-512 512zM511.828 828.299c-192.86 0-349.138-156.45-349.138-349.31 0-130.378 71.462-243.899 177.323-303.86v37.358c-87.377 56.463-145.302 154.69-145.302 266.502 0 175.187 141.929 317.288 317.116 317.288 175.187 0 317.288-142.101 317.288-317.288 0-111.812-58.046-210.039-145.474-266.502v-37.358c105.912 59.961 177.496 173.482 177.496 303.86 0 192.86-156.45 349.31-349.31 349.31zM512 715.19c-115.254 0-208.656-93.402-208.656-208.656 0-58.726 24.321-111.692 63.354-149.606v49.065c-19.765 28.557-31.333 63.194-31.333 100.541 0 97.583 79.052 176.635 176.635 176.635 97.583 0 176.807-79.052 176.807-176.635 0-37.347-11.536-71.984-31.333-100.541v-48.893c38.931 37.902 63.182 90.796 63.182 149.434 0 115.254-93.402 208.656-208.656 208.656zM512 606.386c-55.13 0-99.852-44.722-99.852-99.852s44.722-99.68 99.852-99.68c55.13 0 99.852 44.55 99.852 99.68 0 55.13-44.722 99.852-99.852 99.852zM512 381.030c-119.697 0-121.2-44.073-121.2-44.073s-0.461-128.667 10.33-195.917c10.791-67.249 55.779-205.041 55.779-205.041h110.182c0 0 45.006 138.305 55.779 205.558 10.773 67.252 10.33 195.4 10.33 195.4 0 0-1.502 44.073-121.2 44.073z" />
<glyph unicode="&#xe662;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM430.25 736.562h163.5v-206.812h206.812v-163.5h-206.812v-206.812h-163.5v206.812h-206.812v163.5h206.812v206.812z" />
<glyph unicode="&#xe663;" d="M367 960v-367h-367v-290h367v-367h290v367h367v290h-367v367h-290z" />
<glyph unicode="&#xe664;" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512c282.752 0 512 229.248 512 512 0 282.752-229.248 512-512 512zM512 841.25c217.172 0 393.25-176.078 393.25-393.25s-176.078-393.25-393.25-393.25c-217.172 0-393.25 176.078-393.25 393.25 0 217.172 176.078 393.25 393.25 393.25zM384 703.625v-511.25l384 255.625-384 255.625z" />
<glyph unicode="&#xe665;" d="M512-64c-282.752 0-512 229.248-512 512s229.248 512 512 512c282.752 0 512-229.248 512-512 0-282.752-229.248-512-512-512zM384 703.616v-511.232l384 255.616-384 255.616z" />
<glyph unicode="&#xe666;" d="M85.333 960l853.333-512-853.333-512z" />
<glyph unicode="&#xe667;" d="M273.92-33.28h102.4l229.786 409.651h264.294c0 0 153.6 0 153.6 71.629 0 71.68-153.6 71.68-153.6 71.68h-264.294l-229.786 409.6h-102.4l127.386-409.6h-183.654l-115.251 102.451h-102.4l81.971-174.080-81.971-174.131h102.4l115.251 102.451h183.654l-127.386-409.651z" />
<glyph unicode="&#xe668;" d="M512 960c304.174-5.688 510.014-238.955 512-512-5.44-290.921-238.955-510.014-512-512-50.51 0.196-99.824 8.057-144.864 21.011 9.584 15.482 19.167 32.622 28.752 51.421 20.212 41.089 29.442 85.094 39.81 127.171 4.423 18.062 10.69 41.837 18.799 71.326 8.847-16.956 24.881-31.701 48.104-44.233 60.617-29.493 135.713-19.749 189.65 7.741 75.671 42.981 120.012 109.741 143.758 184.674 45.724 173.774-13.234 340.854-170.851 408.052-190.050 57.245-402.149-14.199-476.060-184.121-32.27-113.556-30.36-259.351 81.832-306.868 5.901-2.212 11.245-2.212 16.035 0 10.53 6.016 22.742 58.159 20.458 69.114-0.738 3.317-3.317 7.925-7.741 13.823-62.005 83.941-24.217 208.863 33.728 271.482 98.532 84.632 251.884 98.375 342.255 17.693 80.157-93.511 61.952-239.043 10.505-331.749-28.427-45.334-66.56-79.593-117.771-80.173-53.905 1.194-94.563 46.808-80.726 98.419 11.759 60.569 44.386 124.804 45.339 181.356-2.605 47.038-26.16 76.871-69.667 77.408-69.451-8.757-97.488-73.691-98.419-132.7 2.219-28.357 3.94-57.218 16.587-80.726-14.744-59.715-26.172-107.819-34.281-144.311-12.431-64.746-36.806-132.463-40.363-195.179-1.106-20.642-1.29-39.81-0.553-57.503-189.718 89.969-305.194 265.709-306.315 468.872 5.526 295.504 238.955 510.014 512 512z" />
<glyph unicode="&#xe669;" d="M0 875.312v-854.625h1024v854.625h-1024zM78.562 795.438h866.875v-694.875h-866.875v694.875zM257.25 695.125c-24.448 0-45.018-8.331-61.688-25-16.669-16.669-25-37.239-25-61.687 0-23.337 8.331-43.331 25-60 16.669-16.669 37.239-25 61.688-25 23.337 0 43.331 8.331 60 25 16.669 16.669 25 36.663 25 60 0 24.448-8.331 45.018-25 61.687-16.669 16.669-36.663 25-60 25zM625.625 652.875l-196.687-298.375-104.438 86.688-153.938-200v-58.375h682.875v234.5l-227.813 235.563z" />
<glyph unicode="&#xe66a;" d="M777.24 873.042c151.951-94.77 245.894-258.639 246.76-431.558 0-57.976-9.783-113.415-29.35-166.318h-217.41zM971.822 221.9c-80.966-162.677-240.113-266.987-413.079-284.807-88.667-5.677-184.947 11.099-256.544 42.395v242.412zM0 441.484c2.263 193.968 113.416 365.17 278.285 450.038l194.582-173.928-454.386-407.643c-12.32 44.931-18.48 88.776-18.48 131.533zM247.847 8.838c-96.688 60.592-170.525 148.523-210.887 245.673l210.887 190.234zM722.888 564.32l-390.251 351.117c59.591 20.032 121.038 32.399 179.363 32.611 73.919 0 144.215-15.219 210.887-45.656z" />
<glyph unicode="&#xe66b;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM237.25 708.562h549.5v-521.125h-549.5v521.125zM305.062 642.812v-285.75h413.875v285.75h-413.875z" />
<glyph unicode="&#xe66c;" d="M0 907.125v-971.125h1024v971.125h-1024zM126.375 784.625h771.25v-532.562h-771.25v532.562z" />
<glyph unicode="&#xe66d;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM328 756.625c10.549 0.622 20.084-5.683 27.312-16.875l70-132.75c7.37-15.729 3.183-32.574-7.812-43.812l-32.062-32.063c-1.98-2.712-3.281-5.766-3.313-9.125 12.296-47.596 49.594-91.497 82.5-121.688 32.906-30.191 68.274-71.067 114.187-80.75 5.675-1.583 12.627-2.149 16.688 1.625l37.25 37.937c12.859 9.746 31.459 14.469 45.188 6.5h0.625l126.313-74.563c18.54-11.622 20.462-34.085 7.187-47.75l-87-86.312c-12.847-13.176-29.916-17.605-46.5-17.625-73.343 2.198-142.642 38.194-199.562 75.187-93.431 67.971-179.134 152.275-232.938 254.125-20.635 42.709-44.876 97.203-42.562 144.875 0.206 17.933 5.058 35.503 17.688 47.063l87 87c6.777 5.765 13.483 8.627 19.812 9z" />
<glyph unicode="&#xe66e;" d="M1009.772 108.508l-144.372-143.214c-21.311-21.856-49.56-29.261-77.071-29.294-121.661 3.645-236.658 63.406-331.078 124.77-154.984 112.751-297.188 252.556-386.438 421.506-34.231 70.847-74.395 161.24-70.558 240.318 0.342 29.747 8.359 58.942 29.309 78.117l144.372 144.299c29.979 25.5 58.971 16.684 78.156-13.020l116.149-220.247c12.225-26.092 5.213-54.049-13.026-72.692l-53.19-53.163c-3.284-4.499-5.375-9.617-5.428-15.189 20.397-78.953 82.188-151.722 136.773-201.802 54.585-50.080 113.258-117.93 189.42-133.992 9.414-2.626 20.944-3.548 27.68 2.712l61.874 62.928c21.33 16.167 52.127 24.069 74.9 10.85h1.086l209.502-123.685c30.754-19.278 33.96-56.535 11.941-79.202z" />
<glyph unicode="&#xe66f;" d="M614.034 727.864c15.753 0 30.252-3.043 43.498-9.129 39.321-19.791 62.536-57.405 62.831-99.348v-288.916c-7.375-45.931-59.947-33.439-61.22 0v272.806c-4.686 15.557-34.725 9.106-35.443 0v-626.164c-7.639-63.938-90.26-45.17-92.367 1.074 0 127.81 0 255.621 0 383.431-5.283 24.731-40.051 13.494-40.813-1.074 1.474-127.448 1.074-254.904 1.074-382.357-8.24-63.61-90.459-47.334-92.367-1.074l-1.074 626.164c-4.815 15.221-32.651 9.383-33.295 0v-272.806c-7.375-45.931-59.947-33.439-61.22 0v288.916c0.743 40.154 15.46 80.382 50.48 99.348 11.457 6.087 25.419 9.129 41.887 9.129 72.677 0 145.353 0 218.030 0zM612.95 859.070c0-55.742-45.188-100.93-100.93-100.93-55.742 0-100.93 45.188-100.93 100.93 0 55.742 45.188 100.93 100.93 100.93 55.742 0 100.93-45.188 100.93-100.93z" />
<glyph unicode="&#xe670;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM684.255 800.065c15.009-0.119 29.582-5.655 40.592-16.665l85.204-85.171c23.552-23.552 21.938-63.234-3.534-88.77-25.536-25.536-65.282-27.054-88.77-3.566l-85.171 85.171c-23.552 23.488-21.906 63.298 3.566 88.77 13.532 13.566 31.103 20.365 48.113 20.231zM543.87 687.53l170.375-170.342-276.879-276.815-170.375 170.375 276.879 276.782zM222.768 378.488l179.712-179.712-224.713-45.001 45.001 224.713z" />
<glyph unicode="&#xe671;" d="M997.688 797.225l-134.419 134.419c-37.064 37.064-99.779 34.64-139.973-5.656-40.194-40.194-42.82-103.011-5.656-140.074l134.419-134.419c37.064-37.064 99.779-34.64 140.074 5.655 40.194 40.295 42.719 102.91 5.554 140.074zM140.781 343.574l268.838-268.838 436.886 436.785-268.838 268.838-436.886-436.785zM0-61.904l354.579 70.997-283.582 283.582-70.997-354.579z" />
<glyph unicode="&#xe672;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM282.312 713.062h155.063v-530.125h-155.063v530.125zM586.625 713.062h155.063v-530.125h-155.063v530.125z" />
<glyph unicode="&#xe673;" d="M0 960h426.667v-1024h-426.667zM597.333 960h426.667v-1024h-426.667z" />
<glyph unicode="&#xe674;" d="M987.136 566.784c-1.486-109.207-49.143-208.251-126.293-271.701-100.32-76.356-226.291-101.797-339.285-103.765v-61.44c-3.027-78.873-49.128-147.327-114.688-177.493-24.106-11.443-50.728-16.288-75.093-16.384-34.357 0.416-67.781 10.805-95.573 24.576v177.493c23.444-16.519 50.308-27.635 77.141-19.797 23.735 8.809 34.6 27.371 34.816 49.835v492.885h173.397v-307.2c39.842 0.552 79.145 4.924 115.371 12.971 47.49 11.527 92.72 29.714 126.976 60.075 42.038 40.049 60.399 87.737 60.757 139.947-0.651 77.308-39.553 141.596-98.987 178.859-67.365 38.542-142.063 51.59-213.675 51.883-77.221-1.692-153.224-16.877-215.040-55.296-63.134-40.871-97.052-108.451-97.621-175.445 4.010-48.28 16.372-115.5 49.152-146.091l-110.592-118.784c-35.885 35.89-59.533 79.83-75.093 124.245-15.273 46.979-25.748 93.748-25.941 140.629 1.887 114.012 52.552 216.931 132.437 283.989 100.798 78.801 227.355 108.624 342.699 109.227 126.288-2.147 251.1-33.95 344.064-108.544 87.176-74.103 130.299-181.36 131.072-284.672z" />
<glyph unicode="&#xe675;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM634.5 768.688c40.225-0.371 78.097-18.409 113.688-54 39.519-40.455 62.202-92.112 47.437-151.813-8.436-31.636-28.426-63.958-60.063-97-95.825-93.982-181.991-181.54-292.125-291.063-21.066-20.697-58.703-45.967-97-47.5-31.852 0.25-57.529 13.346-81.25 36.938-25.236 25.559-43.897 58.793-41.125 100.188 3.515 29.527 17.941 56.941 43.25 82.25l245.75 245.687c36.319 36 87.439 63.868 136 22.187 43.908-45.484 15.864-94.722-23.187-135l-226.75-225.687-43.25 44.313 225.687 225.687c10.309 10.351 31.369 28.453 23.188 47.437-10.666 9.628-36.213-11.943-47.438-23.187l-245.687-245.75c-12.288-12.376-22.972-25.384-25.313-44.25-2.109-16.169 5.252-32.69 22.125-49.563 32.711-30.338 55.478-21.673 90.687 10.5 93.685 93.685 168.869 168.053 265.25 264.188 31.684 31.684 54.582 51.654 71.187 95.438 13.096 49.349-37.583 119.511-94.937 127.562-37.643 3.512-70.469-21.203-98.063-47.438l-268.937-268.875-44.25 43.187 268.875 270c42.182 41.478 84.889 63.266 128.125 65.375 2.702 0.132 5.443 0.212 8.125 0.188z" />
<glyph unicode="&#xe676;" d="M402.519 11.77c175.849 174.873 313.402 314.661 466.405 464.721 50.513 52.758 82.505 104.394 95.975 154.907 23.574 95.323-12.67 177.869-75.77 242.463-60.616 60.616-125.441 89.24-194.476 85.872-69.035-3.368-137.228-38.166-204.578-104.394l-429.362-431.046 70.718-69.035 429.362 429.362c44.058 41.888 96.486 81.378 156.591 75.77 91.577-12.856 172.45-124.942 151.54-203.737-26.514-69.908-63.066-101.793-113.655-152.381-153.891-153.498-273.883-272.199-423.469-421.785-56.218-51.37-92.575-65.278-144.804-16.838-26.94 26.94-38.727 53.32-35.359 79.137 3.737 30.123 20.791 50.958 40.411 70.718l392.319 392.319c17.923 17.955 58.74 52.416 75.77 37.043 13.064-30.312-20.582-59.243-37.043-75.77l-360.327-360.327 69.035-70.718 362.011 360.327c62.353 64.312 107.15 142.899 37.043 215.523-77.537 66.55-159.217 22.121-217.207-35.359l-392.319-392.319c-40.411-40.411-63.423-84.189-69.035-131.334-4.426-66.095 25.373-119.149 65.667-159.958 37.875-37.669 78.794-58.534 129.651-58.932 61.148 2.448 121.271 42.724 154.907 75.77z" />
<glyph unicode="&#xe677;" d="M512.062 960c-282.748 0-512.062-229.19-512.062-511.938 0-222.286 141.753-411.454 339.751-482.198l126.204 333.753c-63.376 19.638-109.46 78.623-109.46 148.446 0 85.884 69.684 155.568 155.568 155.568 85.884 0 155.443-69.684 155.443-155.568 0-69.877-46.039-128.979-109.46-148.571l126.204-333.753c198.043 70.703 339.751 259.981 339.751 482.323 0 282.748-229.19 511.938-511.938 511.938z" />
<glyph unicode="&#xe678;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM731.688 720.188l106.375-106.375-438-438-214.125 214.188 105.687 105.688 107.75-107.813 332.313 332.313z" />
<glyph unicode="&#xe679;" d="M512 960c-282.769 0-512-229.231-512-512s229.231-512 512-512c282.769 0 512 229.231 512 512 0 282.769-229.231 512-512 512zM512 848.75c221.329 0 400.688-179.477 400.688-400.75s-179.359-400.688-400.688-400.688c-221.329 0-400.688 179.414-400.688 400.688 0 221.273 179.359 400.75 400.688 400.75zM708.188 691.125l-296.75-296.813-96.25 96.25-94.438-94.375 191.312-191.313 391.188 391.187-95.062 95.063z" />
<glyph unicode="&#xe67a;" d="M856.949 875.39l-521.763-521.763-169.22 169.22-165.966-165.966 336.271-336.271 687.729 687.729-167.051 167.051z" />
<glyph unicode="&#xe67b;" d="M438.562 960v-592.188h146.875v592.188h-146.875zM149.938 810.062c-92.654-92.654-149.938-220.677-149.938-362.062 0-282.77 229.23-512 512-512 282.77 0 512 229.23 512 512 0 141.385-57.284 269.409-149.938 362.062l-103.125-103.125c66.269-66.269 107.25-157.826 107.25-258.938 0-202.224-163.963-366.188-366.188-366.188-202.224 0-366.188 163.963-366.188 366.188 0 101.112 40.981 192.669 107.25 258.938l-103.125 103.125z" />
<glyph unicode="&#xe67c;" d="M1.213 422.089c-1.555 8.522-1.172 15.759-1.172 24.625v2.345c139.368 11.956 291.192 47.062 404.194 127.818 32.423-14.856 64.31-12.829 94.898 2.345 64.088-64.73 126.981-109.717 210.884-136.026 8.591-21.89 22.26-38.697 41.005-50.424-22.65-56.287-54.283-105.928-94.898-148.925-60.028 43.242-139.291 11.93-166.364-50.424-187.743 2.034-376.968 84.174-488.548 228.665zM488.589 119.547c-95.841-49.497-196.998-76.183-299.924-70.359-79.613 66.803-136.981 154.126-166.364 245.082 129.299-111.129 301.151-174.548 466.288-174.723zM700.645 133.619c109.062 22.749 209.276 66.602 290.551 133.681-106.677-278.133-427.928-405.282-691.23-287.297 85.472 12.315 165.761 41.836 234.315 80.912 68.509-39.259 150.042 2.037 166.364 72.704zM902.156 419.743c41.98 3.098 82.915 6.187 121.844 12.899-0.076-10.482-1.158-20.799-1.172-30.489-73.191-93.667-183.208-157.662-292.894-187.623 40.93 49.694 71.292 104.894 92.555 160.652 33.429 4.337 60.734 19.693 79.667 44.56zM920.901 494.792c-4.621 34.76-22.007 62.973-49.206 80.912 8.595 79.59 10.012 157.249 3.515 232.183 82.054-84.705 131.74-192.823 145.276-300.196-29.681-6.254-62.875-10.554-99.584-12.899zM350.343 629.646c-103.495-65.209-224.679-96.885-344.444-106.71 29.909 186.915 157.223 341.396 328.042 404.561 4.639-60.701 18.696-119.304 41.005-170.033-35.816-36.371-44.323-82.999-24.603-127.818zM551.854 716.422c53.943 66.977 98.79 135.42 124.187 215.766 43.738-14.854 83.182-34.007 118.329-57.459 12.276-96.583 13.982-192.782 4.686-282.606-42.435-7.243-75.797-33.063-90.211-70.358-62.648 22.68-113.932 64.912-159.334 110.228 11.403 29.421 11.834 56.998 2.343 84.43zM442.898 785.607c-21.798 53.887-36.025 106.104-36.319 162.997 65.365 15.038 135.933 14.537 197.997 2.345-23.71-66.377-61.173-127.898-100.756-178.241-13.928 5.949-47.851 19.2-60.922 12.899z" />
<glyph unicode="&#xe67d;" d="M282.358 196.998l-0.788-63.729h-281.57v63.729c0 77.248 65.051 139.123 142.299 139.123s141.054-61.881 140.059-139.123zM270.247 486.9c0-70.798-57.151-128.191-127.948-128.191-70.798 0-128.433 57.393-128.433 128.191 0 70.798 57.636 128.191 128.433 128.191 70.798 0 127.948-57.393 127.948-128.191zM631.541 206.762l-0.908-73.492h-324.709v73.493c0 89.083 75.017 160.438 164.1 160.438s162.665-71.362 161.517-160.438zM617.575 541.080c0-81.645-65.907-147.831-147.551-147.831-81.645 0-148.111 66.186-148.111 147.831 0 81.645 66.466 147.831 148.111 147.831 81.645 0 147.551-66.186 147.551-147.831zM1023.985 216.526l-1.029-83.256h-367.849v83.256c0 100.918 84.984 181.753 185.902 181.753s184.276-80.843 182.976-181.753zM1008.164 595.26c0-92.492-74.663-167.471-167.154-167.471-92.492 0-167.788 74.979-167.788 167.471 0 92.492 75.296 167.471 167.788 167.471 92.492 0 167.154-74.979 167.154-167.471z" />
<glyph unicode="&#xe67e;" d="M311.294 891.453l-25.957-674.798c-34.931 17.925-78.756 25.681-124.74 19.157-99.151-14.042-170.547-88.839-159.463-167.039 11.086-78.206 100.449-130.206 199.596-116.159 87.995 12.47 154.047 72.792 160.049 140.864l0.020-0.038c0.012 0.154 0.022 0.386 0.036 0.56 0.146 1.73 0.23 3.482 0.294 5.222 3.692 70.288 26.297 604.182 26.297 604.182l556.727 57.36-25.145-480.835c-35.727 19.885-81.646 28.743-129.932 21.901-99.151-14.056-170.541-88.837-159.457-167.047 11.082-78.198 100.445-130.208 199.596-116.146 89.869 12.72 156.825 75.366 160.337 145.212l0.043 0.042c1.884 31.388 33.295 756.173 34.405 781.786z" />
<glyph unicode="&#xe67f;" d="M0 448l176.562-176.562-0.531 123.531h282.937v-283.438l-121.969-0.531 175-175 176.562 176.562-123.531-0.531v282.937h283.438l0.531-121.969 175 175-176.562 176.562 0.531-123.531h-282.938v283.437l121.969 0.531-175 175-176.562-176.562 123.531 0.531v-282.937h-283.438l-0.531 121.969-175-175z" />
<glyph unicode="&#xe680;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM218 531.25h588.062v-166.5h-588.062v166.5z" />
<glyph unicode="&#xe681;" d="M0 593h1024v-290h-1024z" />
<glyph unicode="&#xe682;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM494.062 781v-98.75h36.563v98.75c16.87-1.379 33.576-4.742 49.813-9.688v-89.062h36.562v74.5c15.914-7.922 31.106-17.491 45-29 0.073-0.061 0.113-0.126 0.188-0.188v-364.812c-0.073-0.061-0.113-0.126-0.188-0.188-41.604-34.338-94.868-54.042-150-54.062-53.883 0.104-107.556 18.905-150 54.062-0.074 0.061-0.114 0.126-0.188 0.188v364.812c0.074 0.061 0.114 0.126 0.188 0.188 13.988 11.545 29.373 21.267 45.625 29.312v-74.812h36.625v89.312c16.134 4.882 32.814 8.112 49.812 9.438zM289.938 489.5h43.125v-165.312c48.831-39.877 111.080-63.813 178.938-63.813s130.106 23.936 178.938 63.813v165.312h43.125v-186.812c-13.385-12.353-27.831-23.557-43.125-33.563-35.234-23.052-75.092-39.519-117.938-47.625v-60.75h72.125v-45.75h-266.25v45.75h72.125v60.75c-42.845 8.106-82.703 24.573-117.938 47.625-15.293 10.006-29.74 21.21-43.125 33.563v186.812zM451 221.5c19.752-3.737 40.164-5.688 61-5.688s41.248 1.951 61 5.688v21.562h-122v-21.562z" />
<glyph unicode="&#xe683;" d="M484.375 960c-26.134-2.038-51.757-7.057-76.563-14.562v-137.313h-56.25v115.063c-24.987-12.369-48.681-27.312-70.187-45.063-0.113-0.094-0.199-0.218-0.313-0.313v-560.875c0.114-0.094 0.199-0.219 0.313-0.313 65.256-54.054 147.781-82.965 230.625-83.125 84.764 0.031 166.66 30.331 230.625 83.125 0.114 0.094 0.2 0.218 0.313 0.313v560.875c-0.114 0.094-0.2 0.219-0.313 0.313-21.361 17.694-44.72 32.383-69.187 44.563v-114.563h-56.25v136.937c-24.963 7.604-50.625 12.817-76.563 14.938v-151.875h-56.25v151.875zM170.625 511.812v-287.187c20.58-18.992 42.737-36.241 66.25-51.625 54.172-35.443 115.502-60.787 181.375-73.25v33.125h187.5v-33.125c65.873 12.463 127.203 37.807 181.375 73.25 23.513 15.384 45.67 32.633 66.25 51.625v287.187h-66.25v-254.187c-75.077-61.31-170.795-98.125-275.125-98.125-104.33 0-200.048 36.815-275.125 98.125v254.187h-66.25zM605.75 99.75c-30.369-5.746-61.716-8.75-93.75-8.75s-63.381 3.004-93.75 8.75v-93.438h-110.938v-70.312h409.375v70.312h-110.938v93.438z" />
<glyph unicode="&#xe684;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 786.562c140.957 0 255.25-114.293 255.25-255.25 0-42.698-11.7-99.064-35.75-130.937l-219.5-290.937-219.5 290.937c-26.478 35.092-35.75 83.798-35.75 130.937 0 140.957 114.293 255.25 255.25 255.25zM512 638.688c-59.309 0-107.375-48.066-107.375-107.375s48.066-107.375 107.375-107.375c59.309 0 107.375 48.065 107.375 107.375 0 59.31-48.066 107.375-107.375 107.375z" />
<glyph unicode="&#xe685;" d="M512 960c-213.182 0-386-172.818-386-386 0-71.293 13.954-144.928 54-198l332-440 332 440c36.373 48.205 54 133.424 54 198 0 213.182-172.818 386-386 386zM512 736.438c89.699 0 162.438-72.739 162.438-162.438 0-89.699-72.739-162.438-162.438-162.438-89.699 0-162.438 72.739-162.438 162.438 0 89.699 72.739 162.438 162.438 162.438z" />
<glyph unicode="&#xe686;" d="M620.799 960v-142.576h155.602l-205.105-203.741c-57.551 37.244-126.151 58.857-199.808 58.857-203.388 0-368.286-164.866-368.286-368.254 0-203.388 164.899-368.286 368.286-368.286 203.388 0 368.254 164.899 368.254 368.286 0 77.308-23.811 149.052-64.512 208.29l201.661 201.661v-154.237h142.576c0 124.992 1.354 275.333 1.332 400zM371.487 524.309c121.525 0 220.023-98.498 220.023-220.023s-98.498-220.055-220.023-220.055c-121.525 0-220.055 98.53-220.055 220.055 0 121.525 98.53 220.023 220.055 220.023z" />
<glyph unicode="&#xe687;" d="M512 960c-261.823 0-474.86-200.309-474.86-446.554 0-12.915 0.583-25.972 1.742-38.944l9.332-196.277 300.046 24.636-9.332 196.152c-0.404 4.691-0.684 9.627-0.684 14.433 0 90.112 77.969 163.305 173.757 163.305 95.787 0 173.757-73.251 173.757-163.305 0-4.807-0.221-9.684-0.684-14.433l-9.27-196.152 299.984-24.636 9.332 196.277c1.158 12.972 1.742 26.030 1.742 38.944 0 246.245-213.037 446.554-474.86 446.554zM358.089 186.961l-299.797-26.253 19.597-223.588 299.797 26.253-19.597 223.588zM665.538 185.841l-19.534-223.65 299.797-26.191 19.534 223.588-299.797 26.253z" />
<glyph unicode="&#xe688;" d="M288.949 960l-50.517-237.822-237.307-56.56 238.753-50.3 56.782-236.442 50.457 237.882 237.347 56.48-238.733 50.32-56.782 236.442zM915.456 949.188l-186.488-185.751 101.717-101.319 186.468 185.757-101.697 101.313zM661.143 695.886l-661.143-658.565 101.709-101.321 661.143 658.565-101.717 101.321zM866.143 577.945l-26.985-127.061-126.815-30.26 127.558-26.86 30.318-126.321 26.965 127.061 126.815 30.26-127.558 26.86-30.298 126.321zM658.131 347.063l-29.736-140.121-139.806-33.26 140.629-29.62 33.431-139.301 29.736 140.121 139.806 33.3-140.609 29.64-33.451 139.241z" />
<glyph unicode="&#xe689;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM508.312 725.625c69.143-0.329 132.342-44.421 159.188-105.937 9.183-21.427 14.062-43.437 14.062-67.313v-60.875h83.875v-321.125h-506.875v321.125h77.125c-0.699 43.013-1.585 92.22 13.5 128.188 29.329 64.777 89.982 106.267 159.125 105.937zM504.562 623.375c-38.298-0.806-63.557-29.93-67.25-71v-60.875h142.625v61.5c-1.758 38.946-31.234 69.303-71.625 70.375-1.262 0.034-2.514 0.026-3.75 0z" />
<glyph unicode="&#xe68a;" d="M505.25 959.996c-127.513 0.608-239.472-75.849-293.561-195.312-27.819-66.331-26.165-157.173-24.875-236.499h-142.187v-592.186h934.747v592.186h-154.625v112.312c0 44.031-9.065 84.672-26 124.187-49.509 113.449-165.986 194.704-293.499 195.312zM505.25 771.435c74.489-1.977 128.82-57.987 132.062-129.812v-113.437h-263.061v112.312c7.031 78.185 56.511 132.914 131 130.937z" />
<glyph unicode="&#xe68b;" d="M264.886-55.075c-89.119 22.95-154.484 104.367-164.887 194.673-19.694 136.708 38.159 270.523 115.351 380.299-14.429 32.027-34.178 49.4-62.868 6.483-52.232-72.184-90.346-154.013-115.989-239.032-16.273 109.985 63.515 215.375 114.246 292.995-9.801 44.769-64.271 104.866-62.148 103.996-28.806 35.757-60.56 108.209-30.196 150.48 41.264 69.604 117.989 127.4 201.574 125.116 52.067-12.53 77.22-66.026 109.019-104.464 11.468-15.418 22.936-30.837 34.405-46.255 115.814 61.803 246.492 115.504 380.064 90.942 98.74-15.312 180.753-96.534 197.812-194.858 33.668-165.924-38.545-332.808-135.655-464.145-100.698-132.994-235.672-250.713-400.090-293.683-58.866-12.185-121.801-17.054-180.638-2.546zM496.261 10.75c126.045 40.976 221.307 140.605 305.663 238.362 92.18 117.144 154.295 271.969 123.924 422.197-22.125 96.434-111.341 170.87-210.365 174.696-96.31 6.23-192.196-23.677-276.958-67.413-1.751-13.704 20.278-57.891 41.3-34.673 89.828 46.674 199.681 67.515 297.619 35.505 63.34-23.531 109.17-84.91 110.988-152.866 11.88-143.978-75.975-274.348-177.676-367.897-33.238-39.241-70.742-54.406-123.789-27.903-74.925 34.332-152.932 62.814-225.941 100.835-48.501 45.488-82.513 104.018-123.548 156.106-14.173-17.211-28.081-47.305-40.474-69.574-49.819-98.454-83.578-223.865-22.738-325.43 52.235-90.789 169.115-116.351 265.507-96.119 19.121 3.439 37.998 8.213 56.488 14.174zM631.295 235.107c-16.157 93.054-26.308 187.457-38.094 280.928-42.132 68.358-95.937 131.489-137.377 198.77-43.939 58.739-89.202 123.404-136.139 173.518-24.672 42.311-75.075 66.81-121.168 42.449-61.516-25.832-123.395-75.579-136.502-144.163 15.267-53.844 57.316-97.502 87.269-144.564 75.097-98.903 141.397-203.605 215.644-292.408 89.462-39.078 183.487-78.332 268.533-119.1zM382.602 384.21c-39.445 19.479-56.090 70.466-86.156 102.972-41.193 57.88-87.101 113.121-121.425 175.409 11.235 41.791 25.057 49.771 49.337 78.396 35.735 25.406 106.892 90.99 152.057 26.519 59.721-75.828 119.199-152.465 169.412-234.994l48.491-199.884-42.694-33.953c-43.022 24.57-169.021 85.535-169.021 85.535zM341.304 574.574c-34.984 47.216-67.643 96.733-107.169 140.205-50.612-33.699-18.681-77.665 8.527-119.504 45.084-58.63 85.359-121.186 133.728-177.148 68.010 62.375-22.158 127.215-35.087 156.447zM519.611 527.144c-12.358 43.513-49.435 78.74-74.008 117.152-34.391 46.217-67.91 93.111-103.654 138.302-23.252-12.529-49.167-13.673-67.664-33.062 35.084-55.027 75.010-112.156 113.799-165.356 37.744-46.978 85.359-75.513 131.527-57.036zM131.85 705.192c-38.736 46.631 21.011 97.038 54.080 126.45 30.384 25.566 69.050 44.659 107.732 38.356 24.416-3.978 54.391-35.008 33.652-48.668-50.815-33.471-115.432-56.852-149.818-114.85-16.055-30.149-26.848-30.467-45.647-1.287zM173.975 737.876c29.601 46.255 83.79 64.551 127.591 93.032-7.074 52.012-74.214 8.767-98.651-11.157-24.358-23.384-94.557-75.182-47.373-103.414 8.34 5.116 12.788 14.002 18.433 21.538zM90.786 771.464c-9.429 52.056 35.935 96.663 76.844 122.017 23.477 14.294 103.718 42.15 95.742-2.429-61.584-19.614-116.177-61.845-150.196-117.209-5.185-9.029-18.8-18.551-22.39-2.379zM750.912 351.435c60.421 80.231 111.801 185.219 80.517 287.205-30.099 90.633-139.595 120.87-225.026 103.452-34.575-12.124-114.055-13.106-109.863-54.093 36.304-52.398 75.502-102.7 113.565-153.816 12.92-94.856 23.512-191.223 38.38-284.876 39.147 27.814 71.68 65.335 102.427 102.128z" />
<glyph unicode="&#xe68c;" d="M512 960c-55.61 0-98.438-46.397-98.438-101.875 0-53.435-0.375-100.187-0.375-100.187h-98.875c-1.861 0-3.661-0.205-5.437-0.5h-27.5v-96.063h461.25v96.063h-27.5c-1.776 0.295-3.577 0.5-5.437 0.5h-98.875c0 0 1.125 42.322 1.125 99.875 0 53.435-44.328 102.188-99.938 102.188zM149.5 862.562v-926.562h725v926.562h-229.688v-67.125h163.313v-792.188h-592.187v792.188h163.25v67.125h-229.688zM512 861.312c18.218 0 32.938-14.66 32.938-32.812 0-18.185-14.72-32.875-32.938-32.875-18.218 0-32.938 14.69-32.938 32.875 0 18.152 14.72 32.812 32.938 32.812zM281.375 596.25v-32.875h32.937v32.875h-32.937zM380.25 595.625v-32.875h362.375v32.875h-362.375zM281.375 472.25v-32.875h32.937v32.875h-32.937zM380.25 471.625v-32.937h362.375v32.937h-362.375zM281.375 348.25v-32.875h32.937v32.875h-32.937zM380.25 347.562v-32.875h362.375v32.875h-362.375zM281.375 224.188v-32.875h32.937v32.875h-32.937zM380.25 223.5v-32.875h362.375v32.875h-362.375zM281.375 100.188v-32.875h32.937v32.875h-32.937zM380.25 99.5v-32.875h362.375v32.875h-362.375z" />
<glyph unicode="&#xe68d;" d="M0 120.404h184.404v-184.404h-184.404zM0 120.404h184.404v-184.404h-184.404zM0 400.269h184.404v-184.404h-184.404zM0 680.135h184.404v-184.404h-184.404zM0 960h184.404v-184.404h-184.404zM271.015 120.404h752.985v-184.404h-752.985zM271.015 120.404h752.985v-184.404h-752.985zM271.015 400.269h752.985v-184.404h-752.985zM271.015 680.135h752.985v-184.404h-752.985zM271.015 960h752.985v-184.404h-752.985z" />
<glyph unicode="&#xe68e;" d="M0 960v-1024h1024v1024h-1024zM251.125 758.688c40.559-0.457 80.511-28.438 82.25-76.875 0.867-43.071-36.668-75.879-83.313-76.875h-1.125c-40.156 0.463-79.371 29.146-81.188 76.875 0.572 42.593 36.375 75.865 83.375 76.875zM686.25 555.188c44.591-0.276 86.675-13.505 121.25-48.75 35.932-40.073 47.466-95.326 48.75-151.5v-255.5h-147.25v238.125c-0.327 44.631-15.615 98.882-74.688 100.688-34.621-0.368-59.033-20.486-75.75-54.125-4.563-10.826-5.221-23.273-5.437-35.687v-249h-147.187c0.563 124.481 1.337 248.954 1.062 373.437 0 35.36-0.341 59.17-1.062 71.437h147.187v-62.75c12.493 17.77 26.35 34.621 44.937 48.188 25.211 17.992 55.496 24.89 88.188 25.438zM176.438 544.312h147.187v-444.875h-147.187v444.875z" />
<glyph unicode="&#xe68f;" d="M273.82-64l341.88 341.9-103.5 103.48 66.42 66.42 103.48-103.5 341.9 341.88-273.82 273.82-341.88-341.9 103.5-103.48-66.42-66.42-103.48 103.5-341.9-341.88 273.82-273.82zM273.82 69.648l-140.164 140.164 208.24 208.24 36.67-36.67-67.034-67.034 66.824-66.824 67.034 67.034 36.67-36.67-208.24-208.24zM682.12 477.948l-36.67 36.67 67.034 67.034-66.824 66.824-67.034-67.034-36.68 36.68 208.24 208.26 140.18-140.172-208.26-208.24z" />
<glyph unicode="&#xe690;" d="M0 960v-204.8h1024v204.8h-1024zM0 550.4v-204.8h1024v204.8h-1024zM0 140.8v-204.8h1024v204.8h-1024z" />
<glyph unicode="&#xe691;" d="M112.343 243.611c-6.366 15.345-14.29 30.598-16.609 47.149-30.538 213.433 143.598 386.479 301.648 452.204 158.050 65.725 340.028-38.825 447.918 73.403 26.955 30.436 54.389 59.259 95.37 59.472 17.081-0.848 31.308-8.876 38.577-23.039 134.856-276.213-57.816-603.727-275.394-720.097-138.079-68.251-280.959-83.265-414.699-36.969-37.19 8.821-67 47.716-105.55 48.221-26.585-14.917-48.664-63.516-66.705-90.28-21.014-36.47-62.855-46.112-92.959-14.198-87.808 86.533 94.671 163.334 88.405 204.135zM229.68 278.972c18.858-15.235 46.062-10.917 60.544 4.286 115.791 140.295 272.578 201.843 443.095 197.169 25.127-1.458 43.39 18.889 45.006 40.72 0.504 25.925-19.445 43.457-41.791 45.006-206.091 11.456-384.892-79.416-511.14-226.102-15.992-19.969-13.088-46.537 4.286-61.080z" />
<glyph unicode="&#xe692;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM332.933 685.013c34.429-0.089 52.803-3.215 82.827-13.627 52.838-18.323 97.836-56.218 128.747-108.4 48.101-91.757 89.716-200.191 123.547-271.6 45.298-62.424 137.817-59.536 171.947-21.707 78.467 86.972-40.678 135.416-82.56 149.44-46.9 14.66-101.953 39.981-122.827 83.12-38.262 108.973 32.084 180.403 122.827 177.947 28.153 4.046 81.667-12.267 116.747-68.987l-45.68-24.773c-19.367 20.502-46.971 37.523-73.493 37.76-59.064 8.318-91.405-67.022-55.707-108.88 12.044-12.401 26.76-19.218 82.373-38.053 79.453-26.699 137.388-53.038 141.76-134.933 5.395-110.556-104.415-176.85-215.68-151.2-44.809 12.165-81.842 44.004-105.387 90.56-41.392 80.699-70.35 179.91-112.987 251.12-35.785 56.865-92.866 88.087-160.96 88-83.459 1.123-156.526-64.815-180.187-131.307-17.631-70.834-0.331-142.701 49.013-191.253 115.775-102.629 243.516-35.416 294.32 36.88 2.147 0 28.747-57.201 28.747-61.813-34.568-41.604-99.462-77.62-147.12-86.507-25.421-4.433-66.304-4.478-90.4-0.107-93.233 16.917-170.954 88.983-197.173 182.8-38.916 156.653 63.449 281.673 181.307 309.013 19.72 5.206 29.419 6.239 58.88 6.48 2.446 0.020 4.825 0.033 7.12 0.027z" />
<glyph unicode="&#xe693;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM247.438 683.625h529.125v-346.313h-529.125v346.313zM313.062 620.5v-220.125h397.875v220.125h-397.875zM181.125 305.812h661.75v-58.562l-33.625-34.875h-594.5l-33.625 34.875v58.562zM450.625 286.625v-53.063h122.75v53.063h-122.75z" />
<glyph unicode="&#xe694;" d="M102.625 812.625v-535.937h818.75v535.937h-818.75zM204.188 714.938h615.625v-340.625h-615.625v340.625zM0 227.938v-90.625l52-53.937h920l52 53.937v90.625h-1024zM417.062 198.25h189.875v-82.062h-189.875v82.062z" />
<glyph unicode="&#xe695;" d="M280.116 728.1c-154.696 0-280.116-125.388-280.116-280.084s125.42-280.116 280.116-280.116c138.001 0 252.658 99.805 275.802 231.171 0.261-0.014 0.517-0.055 0.778-0.065h107.849v-155.699h119.072v155.699h56.146v-225.339h119.072v225.34h65.164v119.071h-471.812c-0.276-0.022-0.537-0.041-0.811-0.065-31.082 120.818-140.737 210.087-271.261 210.087zM280.116 598.519c83.127 0 150.502-67.375 150.502-150.502s-67.375-150.535-150.502-150.535c-83.127 0-150.535 67.408-150.535 150.535 0 83.127 67.408 150.502 150.535 150.502z" />
<glyph unicode="&#xe696;" d="M493.481 8.702h130.315l-14.403-72.702h-399.861l14.403 72.702h130.315l175.582 877.91h-130.315l15.089 73.388h399.861l-15.089-73.388h-130.315l-175.582-877.91" />
<glyph unicode="&#xe697;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM334.688 667.438h354.562c23.864-1.616 41.871-18.98 42.188-41v-355.75c-1.692-24.797-19.731-41.823-42.188-42.125h-354.562c-24.781 1.69-41.824 19.69-42.125 42.125v355.75c1.367 23.748 21.138 40.718 42.125 41zM394.375 586.688c-12.724-0.316-20.929-10.109-21.063-21.125v-234c0.33-12.702 10.076-20.992 21.063-21.125h235.187c12.73 0.33 20.994 10.114 21.125 21.125v234c-0.312 12.753-10.083 20.993-21.125 21.125h-235.187z" />
<glyph unicode="&#xe698;" d="M0 960v-292.062h303.125c46.632 59.808 119.661 98.375 201.813 98.375 82.156 0 155.243-38.561 201.875-98.375h317.188v292.062h-1024zM819.438 916.562h95.75c34.087 0 61.5-27.475 61.5-61.562v-80.188c0-34.087-27.413-61.562-61.5-61.562h-95.75c-34.088 0-61.5 27.475-61.5 61.562v80.188c0 34.088 27.412 61.562 61.5 61.562zM112.438 915.625h34.937v-202.437h-34.937v202.437zM172.5 915.625h36v-202.437h-36v202.437zM233.625 915.625h34.937v-202.437h-34.937v202.437zM86.25 910.188v-197h-36.062v141.812c0 12.262 3.461 23.453 10.375 33.562 6.914 10.103 15.499 17.295 25.688 21.625zM504.562 737.312c-124.213 0-224.937-100.272-224.937-223.875s100.725-223.813 224.937-223.813c124.213 0 224.938 100.21 224.938 223.813 0 123.602-100.725 223.875-224.938 223.875zM504.562 691.875c99.042 0 179.313-79.882 179.313-178.437 0-98.556-80.27-178.438-179.313-178.438-99.042 0-179.312 79.882-179.312 178.438 0 98.556 80.27 178.437 179.312 178.437zM0 626.562v-690.562h1024v690.562h-290.875c17.176-34.008 26.813-72.441 26.813-113.062 0-139.601-114.179-252.75-255-252.75-140.821 0-254.938 113.149-254.938 252.75 0 40.631 9.691 79.048 26.875 113.062h-276.875z" />
<glyph unicode="&#xe699;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM495.938 784.312c23.461-0.001 42.565-6.327 57.312-19.062 14.747-12.737 22.125-29.533 22.125-50.312 0-20.781-7.378-37.514-22.125-50.25-14.747-12.737-33.851-19.126-57.312-19.125-23.462 0-42.566 6.388-57.313 19.125-14.077 12.736-21.125 29.469-21.125 50.25 0 20.779 7.048 37.576 21.125 50.312 14.747 12.736 33.851 19.062 57.313 19.062zM569.312 560.125l20.125-23.125c-10.726-28.154-16.125-59.314-16.125-93.5v-246.375c0-8.714 0.722-14.711 2.063-18.063 2.011-3.352 6.359-6.711 13.063-10.062 12.066-7.374 29.788-14.422 53.25-21.125l-7-36.187c-57.648 6.033-98.226 9-121.688 9s-63.647-2.967-120.625-9l-8.063 36.187c24.132 5.363 41.917 12.081 53.313 20.125 10.055 6.033 15.062 15.718 15.063 29.125v251.375c0 23.461-9.089 35.187-27.188 35.188l-35.188-7-8 40.187c24.132 10.054 55.951 19.803 95.5 29.187s70.049 14.062 91.5 14.063z" />
<glyph unicode="&#xe69a;" d="M0 874.469v-150.312h1024v150.25l-1024 0.062zM1024 640.219l-288.375-192.25 288.375-192.25v384.5zM0 639.094v-149.813h592v149.813h-592zM0 405.531v-149.812h592v149.812h-592zM1024 171.781l-1024-0.062v-150.188h1024v150.25z" />
<glyph unicode="&#xe69b;" d="M1024 874.469v-150.312h-1024v150.25l1024 0.062zM0 640.219l288.375-192.25-288.375-192.25v384.5zM1024 639.094v-149.812h-592v149.812h592zM1024 405.531v-149.812h-592v149.812h592zM0 171.781l1024-0.062v-150.188h-1024v150.25z" />
<glyph unicode="&#xe69c;" d="M80 416l237.088 320h389.824l237.088-320h-176l-128-128h-256l-128 128h-176zM280.992 800l-280.992-384v-320h1024v320l-280.992 384h-462.016z" />
<glyph unicode="&#xe69d;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM449.5 775.625h125v-143.563h72.938l-135.438-203.187-135.438 203.187h72.938v143.563zM204.375 456.875h202.125c0-58.253 47.247-105.563 105.5-105.563 58.253 0 105.5 47.309 105.5 105.563h202.125v-296.5h-615.25v296.5z" />
<glyph unicode="&#xe69e;" d="M408 960v-238.938h-121.438l225.438-338.187 225.438 338.187h-121.438v238.938h-208zM0 429.438v-493.438h1024v493.438h-336.375c0-96.962-78.663-175.625-175.625-175.625s-175.625 78.663-175.625 175.625h-336.375z" />
<glyph unicode="&#xe69f;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM494.625 770.75h34.75v-102.438h-34.75v102.438zM352.5 740l58.75-83.875-28.5-20-58.75 83.875 28.5 20zM671.5 740l28.5-20-58.75-83.875-28.5 20 58.75 83.875zM512 640.312c85.123 0 154.125-51.669 154.125-115.437l-87.562-265.187h-133.125l-87.562 265.187c0 63.77 69.007 115.437 154.125 115.437zM235.187 609.562l96.25-35.062-11.937-32.688-96.188 35.062 11.875 32.688zM788.813 609.562l11.875-32.688-96.25-35.062-11.875 32.688 96.25 35.062zM326.813 460l9-33.625-98.938-26.5-9 33.625 98.938 26.5zM697.187 460l98.938-26.5-9-33.625-98.938 26.5 9 33.625zM443.5 240.313h137v-46.063h-137v46.063zM443.5 171.312h137v-46.062h-137v46.062z" />
<glyph unicode="&#xe6a0;" d="M484.406 960v-162.494h55.193v162.494h-55.198zM259.032 911.168l-45.22-31.661 93.186-133.074 45.195 31.661-93.162 133.074zM764.962 911.168l-93.16-133.074 45.202-31.661 93.186 133.074-45.22 31.661zM511.991 753.046c-135.020 0-244.474-81.991-244.474-183.146l138.899-420.65h211.175l138.887 420.65c0 101.154-109.447 183.146-244.474 183.146zM72.93 704.279l-18.858-51.895 152.618-55.564 18.928 51.87-152.692 55.589zM951.064 704.279l-152.692-55.593 18.864-51.876 152.691 55.573-18.864 51.896zM218.245 467.046l-156.928-42.092 14.238-53.274 156.928 42.031-14.236 53.336zM805.749 467.046l-14.229-53.334 156.928-42.024 14.229 53.275-156.928 42.085zM403.337 118.586v-73.118h217.332v73.107h-217.332zM403.337 9.118v-73.118h217.332v73.107h-217.332z" />
<glyph unicode="&#xe6a1;" d="M93.198 960v-44.857c-2.579-343.956-47.524-228.157 190.992-467.143-242.858-239.32-190.992-127.42-190.992-467.143v-44.857h837.563v44.857c2.552 343.869 47.77 228.731-190.642 467.143 242.707 238.624 190.642 127.642 190.642 467.143v44.857h-837.563zM182.912 870.286h658.136c12.252-252.955-15.699-209.495-196.6-390.396l-31.54-31.89 31.54-31.89c202.032-199.766 196.6-130.793 196.6-390.396h-658.136c-12.288 252.939 15.869 209.694 196.6 390.746l31.54 31.54-31.54 31.54c-201.898 199.967-196.6 131.121-196.6 390.746zM274.028 685.952c77.468-66.215 186.101-95.562 208.865-226.738h43.455c-1.822 117.949 130.923 161.085 223.233 226.738-182.972-19.722-257.599-30.303-475.554 0zM510.228 311.326c-119.486 0.753-238.154-60.506-235.849-186.086h475.554c0.087 122.568-120.218 185.333-239.704 186.086z" />
<glyph unicode="&#xe6a2;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 724.062l250-194.312v-357.812h-172v216h-156v-216h-172v357.812l250 194.312z" />
<glyph unicode="&#xe6a3;" d="M512 960l-463.663-360.382v-663.618h319v400.605h289.326v-400.605h319v663.618l-463.663 360.382z" />
<glyph unicode="&#xe6a4;" d="M710.388 920.602c-41.23-0.424-83.518-8.475-124.891-24.99l-1.879-0.797-1.878-0.968c-26.227-13.356-50.132-30.065-71.383-49.865-114.366 98.915-296.442 106.094-421.009-6.205l-1.252-1.138-1.138-1.195c-109.273-114.138-106.715-289.918-41.213-428.808l0.569-1.082 0.569-1.138c77.144-142.854 221.197-264.236 352.473-364.028l0.342-0.285 0.285-0.228c8.446-6.192 22.967-18.993 39.733-31.593 16.766-12.6 35.703-26.409 63.413-31.707l6.205-1.195 6.262 0.512c29.084 2.508 40.492 13.247 59.599 25.274 19.107 12.027 40.258 27.295 61.99 44.002 42.839 32.934 87.166 70.894 116.352 97.966 0.376 0.349 0.995 0.85 1.366 1.195 0.060 0.051 0.11 0.119 0.171 0.171 61.484 52.466 122.388 112.949 174.016 184.092 0.016 0.022 0.041 0.035 0.056 0.057 0.097 0.131 0.187 0.268 0.285 0.398 81.882 110.245 121.602 258.813 74.229 405.184l-0.854 2.619-1.138 2.448c-53.189 114.99-167.589 182.574-291.279 181.303zM711.868 830.548c89.117 2.050 167.23-45.669 206.008-127.282 35.832-114.259 4.859-230.673-61.876-320.311l-0.341-0.456c-46.49-64.154-102.792-120.311-161.152-169.975l-1.48-1.366c-26.279-24.462-70.762-62.569-111.4-93.811-20.319-15.621-39.799-29.581-54.932-39.107-5.69-3.582-11.099-6.023-15.54-7.912-4.667 2.55-10.59 6.14-16.736 10.759-12.373 9.299-25.549 21.169-39.904 31.764-0.224 0.17-0.459 0.342-0.683 0.512-127.398 96.899-261.589 214.558-326.117 333.176-52.386 111.917-50.101 245.873 23.908 324.58 100.63 89.474 250.131 70.022 324.694-21.802l36.317-44.685 35.122 45.596c20.209 26.217 44.326 46.259 73.603 61.478 30.688 11.988 61.179 18.167 90.509 18.842z" />
<glyph unicode="&#xe6a5;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM625.313 666.877c60.839 0.951 115.859-32.125 141.941-88.511 24.126-74.544 3.935-150.378-38.614-207.53-28.086-38.756-61.651-72.179-95.968-101.382-31.571-29.388-102.236-87.544-120.964-89.159-16.553 3.165-35.134 21.912-48.276 31.546-73.843 56.133-153.316 124.367-193.621 199.003-33.793 71.654-33.854 160.311 18.74 215.246 68.197 61.48 171 49.447 223.157-14.784 14.007 18.171 31.237 32.483 51.68 42.894 20.718 8.27 41.645 12.36 61.925 12.677z" />
<glyph unicode="&#xe6a6;" d="M1004.057 746.37c46.509-143.702 7.586-289.93-74.438-400.103-54.141-74.712-118.847-139.104-185-195.399-60.861-56.653-197.062-168.75-233.165-171.864-31.909 6.1-67.714 42.182-93.047 60.755-142.35 108.21-295.586 239.804-373.284 383.683-65.143 138.13-65.263 308.98 36.124 414.881 131.465 118.518 329.661 95.359 430.207-28.462 27.002 35.030 60.207 62.579 99.615 82.648 159.755 63.768 325.949-1.21 392.988-146.139z" />
<glyph unicode="&#xe6a7;" d="M989.718 944.567c22.366-25.929 21.632-59.188 0-81.409l-140.204-141.335c-25.704-22.47-58.2-21.493-80.278 0-21.933 25.222-22.095 60.158 0 81.409l140.204 141.335c24.451 20.76 59.276 20.393 80.278 0zM289.826 320.431c24.452 20.759 59.276 20.395 80.278 0 21.519-24.51 22.518-61.221 0-81.409l-255.534-257.795c-25.704-22.47-58.2-21.493-80.278 0-21.933 25.222-22.094 60.157 0 81.409zM536.315 508.124c-2.046 41.543-35.473 71.865-72.364 72.364-40.97-2.262-71.848-35.56-72.364-72.364-1.751-26.353-18.838-43.778-42.966-44.097-26.676 1.959-42.67 20.293-42.966 44.097 1.489 44.309 17.361 83.631 46.358 113.068 32.31 30.256 71.127 46.062 111.937 46.358 44.245-1.437 82.646-17.49 111.937-46.358 30.297-32.508 46.060-72.053 46.358-113.068-1.751-26.353-18.838-43.778-42.966-44.097-26.677 1.959-42.67 20.293-42.966 44.097zM463.951 834.891c86.799-1.861 167.172-36.67 223.875-93.281 59.729-63.302 92.137-145.733 92.716-225.571-1.793-72.593-14.645-107.007-48.619-162.818-18.544-44.209-61.311-76.996-84.236-117.025-12.996-41.371-3.428-86.441-5.088-132.29-0.619-51.132-20.639-108.299-55.969-136.247-39.577-23.069-80.889-31.659-117.025-31.659-30.058 2.34-49.139 24.089-50.881 50.881-0.978 13.944 4.508 26.976 13.568 36.182 22.774 23.222 45.114 14.431 72.929 21.483 10.044 3.191 24.549 6.998 28.267 17.526 6.402 19.741 6.196 43.904 6.219 60.491 1.876 42.128-6.024 80.899 2.827 120.418 6.067 25.46 16.046 49.549 31.094 68.972 10.168 13.377 21.801 25.139 30.528 36.747 12.557 15.536 22.732 32.344 32.79 48.054 10.85 16.6 19.347 33.062 29.398 49.185 8.068 23.203 11.243 47.527 11.307 70.102-2.046 59.627-23.731 112.466-62.753 152.077-43.49 40.674-95.968 62.348-150.946 62.753-59.564-1.994-111.481-23.86-150.946-62.753-40.715-43.688-62.347-96.895-62.753-152.077-2.184-30.455-23.030-51.631-50.881-52.011-30.601 2.295-51.632 24.187-52.011 52.011 1.977 87.111 36.571 167.855 92.716 225.571 62.302 60.443 144.44 92.705 223.875 93.281z" />
<glyph unicode="&#xe6a8;" d="M896 128c0 85.333 0 170.667 0 256 0 212.064-171.936 384-384 384-212.064 0-384-171.936-384-384 0-85.333 0-170.667 0-256-9.428-91.226-125.95-67.367-128 0 0 85.333 0 170.667 0 256 0 282.784 229.248 512 512 512 282.752 0 512-229.216 512-512 0-85.333 0-170.667 0-256-9.428-91.226-125.95-67.367-128 0zM224 320h64c17.664 0 32-14.304 32-32v-320c0-17.696-14.336-32-32-32h-64c-17.664 0-32 14.304-32 32v320c0 17.696 14.336 32 32 32zM736 320h64c17.696 0 32-14.304 32-32v-320c0-17.696-14.304-32-32-32h-64c-17.696 0-32 14.304-32 32v320c0 17.696 14.304 32 32 32z" />
<glyph unicode="&#xe6a9;" d="M204.812 883.438l-204.812-550.25 81.938-320.625h860.125l81.937 320.625-204.812 550.25h-614.375zM80 282.5h864.062l-56-219.25h-752.062l-56 219.25zM791.875 213.812c-22.62 0-40.938-18.317-40.938-40.938 0-22.62 18.317-41 40.938-41 22.62 0 41 18.38 41 41 0 22.62-18.38 40.938-41 40.938z" />
<glyph unicode="&#xe6aa;" d="M194.443-64h354.568c37.523 1.871 64.618 32.246 65.068 65.62v158.811c34.862 45.394 83.245 77.566 118.281 121.314 12.315 15.44 26.009 27.388 41.081 35.843 54 27.489 116.868 10.833 159.914 49.904 33.692 78.513-13.441 172.571-87.401 199.065-60.399 20.825-120.632 6.87-173.975-19.024 0.154 93.744-0.604 187.486-1.103 281.228-5.699 76.316-57.081 130.732-130.137 131.24-73.622-0.208-127.161-63.678-128.482-131.24v-110.285c-21.689-3.676-41.357-10.845-59.003-21.506-45.35 6.178-89.811-7.959-121.865-35.291-261.761-14.998-106.463-357.925-102.565-486.359v-173.699c1.789-37.787 32.077-65.169 65.62-65.62zM194.443 172.562c-2.211 102.763-157.575 453.895 65.068 420.187 20.028 37.159 73.63 51.456 107.528 28.674 34.138 34.616 77.026 44.474 110.837 11.029 0 33.086 0.184 65.804 0.551 98.154 0.368 32.35 0.551 65.068 0.551 98.154 0.796 37.863 28.576 64.104 61.76 64.517 39.232-0.865 64.116-30.646 64.517-64.517 0.007-128.328 1.089-254.833 1.103-373.868 85.984 10.713 202.739 113.296 270.475 8.547 8.236-16.77 11.732-30.18 8.547-47.698-1.47-2.941-2.941-4.595-4.411-4.963-1.47-0.368-3.86-0.919-7.169-1.654-68.156-11.131-136.303-21.522-181.419-74.443-44.666-58.251-114.986-92.599-143.371-159.362v-2.757z" />
<glyph unicode="&#xe6ab;" d="M0 130.443v354.568c1.871 37.523 32.246 64.617 65.62 65.068h158.811c45.394 34.862 77.566 83.245 121.314 118.281 15.44 12.315 27.388 26.009 35.843 41.081 27.489 54 10.833 116.868 49.904 159.914 78.513 33.692 172.571-13.441 199.065-87.401 20.825-60.399 6.87-120.632-19.024-173.975 93.744 0.154 187.486-0.604 281.228-1.103 76.316-5.699 130.732-57.081 131.24-130.137-0.208-73.622-63.678-127.161-131.24-128.482h-110.285c-3.676-21.689-10.845-41.357-21.506-59.003 6.178-45.35-7.959-89.811-35.291-121.865-14.998-261.761-357.925-106.463-486.359-102.565h-173.7c-37.787 1.789-65.169 32.077-65.62 65.62zM236.562 130.443c102.763-2.211 453.895-157.575 420.187 65.068 37.159 20.028 51.456 73.63 28.674 107.528 34.616 34.138 44.474 77.026 11.029 110.837 33.086 0 65.804 0.184 98.154 0.551 32.35 0.368 65.068 0.551 98.154 0.551 37.863 0.796 64.104 28.576 64.517 61.76-0.865 39.232-30.646 64.116-64.517 64.517-128.328 0.007-254.833 1.089-373.868 1.103 10.713 85.984 113.296 202.739 8.547 270.475-16.77 8.236-30.18 11.732-47.698 8.547-2.941-1.47-4.595-2.941-4.963-4.411-0.368-1.47-0.919-3.86-1.654-7.169-11.131-68.156-21.522-136.303-74.443-181.419-58.251-44.666-92.599-114.986-159.362-143.371h-2.757z" />
<glyph unicode="&#xe6ac;" d="M1024 130.443v354.568c-1.871 37.523-32.246 64.618-65.62 65.068h-158.811c-45.394 34.862-77.566 83.245-121.314 118.281-15.44 12.315-27.388 26.009-35.843 41.081-27.489 54-10.833 116.868-49.904 159.914-78.513 33.692-172.571-13.441-199.065-87.401-20.825-60.399-6.87-120.632 19.024-173.975-93.744 0.154-187.486-0.604-281.228-1.103-76.316-5.699-130.732-57.081-131.24-130.137 0.208-73.622 63.678-127.161 131.24-128.482h110.285c3.676-21.689 10.845-41.357 21.506-59.003-6.178-45.35 7.959-89.811 35.291-121.865 14.998-261.761 357.925-106.463 486.359-102.565h173.7c37.787 1.789 65.169 32.077 65.62 65.62zM787.438 130.443c-102.763-2.211-453.895-157.575-420.187 65.068-37.159 20.028-51.456 73.63-28.674 107.528-34.616 34.138-44.474 77.026-11.029 110.837-33.086 0-65.804 0.184-98.154 0.551-32.35 0.368-65.068 0.551-98.154 0.551-37.863 0.796-64.104 28.576-64.517 61.76 0.865 39.232 30.646 64.116 64.517 64.517 128.328 0.007 254.833 1.089 373.868 1.103-10.713 85.984-113.296 202.739-8.547 270.475 16.77 8.236 30.18 11.732 47.698 8.547 2.941-1.47 4.595-2.941 4.963-4.411 0.368-1.47 0.919-3.86 1.654-7.169 11.131-68.156 21.522-136.303 74.443-181.419 58.251-44.666 92.599-114.986 159.362-143.371h2.757z" />
<glyph unicode="&#xe6ad;" d="M194.443 960h354.568c37.523-1.871 64.618-32.246 65.068-65.62v-158.811c34.862-45.394 83.245-77.566 118.281-121.314 12.315-15.44 26.009-27.388 41.081-35.843 54-27.489 116.868-10.833 159.914-49.904 33.692-78.513-13.441-172.571-87.401-199.065-60.399-20.825-120.632-6.87-173.975 19.024 0.154-93.744-0.604-187.486-1.103-281.228-5.699-76.317-57.081-130.732-130.137-131.24-73.622 0.208-127.161 63.678-128.482 131.24v110.285c-21.689 3.676-41.357 10.845-59.003 21.506-45.35-6.178-89.811 7.959-121.865 35.291-261.761 14.998-106.463 357.925-102.566 486.359v173.7c1.789 37.787 32.077 65.169 65.62 65.62zM194.443 723.438c-2.211-102.763-157.575-453.895 65.068-420.187 20.028-37.159 73.63-51.456 107.528-28.674 34.138-34.616 77.026-44.474 110.837-11.029 0-33.086 0.184-65.804 0.551-98.154 0.368-32.35 0.551-65.068 0.551-98.154 0.796-37.863 28.576-64.104 61.76-64.517 39.232 0.865 64.116 30.646 64.517 64.517 0.007 128.328 1.089 254.833 1.103 373.868 85.984-10.713 202.739-113.296 270.475-8.547 8.236 16.77 11.732 30.18 8.547 47.698-1.47 2.941-2.941 4.595-4.411 4.963-1.47 0.368-3.86 0.919-7.169 1.654-68.156 11.131-136.303 21.522-181.419 74.443-44.666 58.251-114.986 92.599-143.371 159.362v2.757z" />
<glyph unicode="&#xe6ae;" d="M532.458 529.4l-116.052 181.743c-6.794 13.029-3.721 28.765 7.664 36.13 13.017 6.836 27.718 3.641 35.035-7.664l116.053-182.837c6.793-13.029 3.723-28.77-7.664-36.13-12.983-6.259-28.892-2.013-35.035 8.759zM1019.66 495.461c18.668-33.842-27.603-61.586-49.268-73.354-18.977 1.466-37.042 3.473-54.194 6.022-17.153 2.554-32.298 4.927-45.436 7.116-15.328 2.92-29.561 5.839-42.699 8.759-1.486-7.299-3.494-14.963-6.022-22.992-2.567-8.028-5.67-16.423-9.306-25.181-74.632 16.146-162.527 59.821-203.639 127.001l140.139 143.423 25.181 90.871 53.647-65.69c37.009-10.404 88.354-11.134 104.009-49.268 13.557-22.842 12.459-71.284 27.371-89.776 8.028-8.028 16.787-15.328 26.276-21.897 9.489-6.569 20.802-18.248 33.94-35.035zM494.139 191.097c-33.168 0.235-67.78 11.741-100.725 12.043-18.977 2.19-25.911-6.204-20.802-25.181l45.983-185.027c-0.618-29.721-16.764-52.481-40.509-56.384-23.107-2.22-46.344 18.624-51.457 34.487l-59.121 232.105c-1.459 8.028-6.022 11.86-13.685 11.496-7.664-0.365-12.591-4.196-14.78-11.496l-54.742-231.010c-7.218-21.678-24.71-35.868-45.983-36.129-31.403 0.553-53.086 29.721-47.078 56.931l66.785 273.709 5.474 165.32c-57.886 14.684-131.038 54.286-159.846 109.483-8.127 17.842-2.236 35.148 13.138 43.793 18.173 8.306 38.728 0.31 45.983-12.043 28.345-44.366 90.918-72.638 133.57-73.354h326.261c-20.186-101.252-31.482-202.509-28.466-308.743zM574.062 481.228c55.266-71.87 134.912-116.908 220.062-134.665-7.925-23.724-18.511-46.806-25.729-68.427-3.285-9.854-2.373-24.269 2.737-43.246 20.98-80.378 44.049-166.19 64.595-240.864 8.002-62.549-78.865-61.217-91.966-22.992l-47.078 179.553c-12.991 22.051-45.479 27.197-52.552 0l-42.699-178.458c-22.096-55.101-100.933-18.054-91.966 20.802l40.509 166.415c0.73 5.839 0.365 11.679-1.095 17.517 0.706 101.396 3.942 205.136 25.181 304.364z" />
<glyph unicode="&#xe6af;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM510.963 675.307c47.226-0.621 86.343-39.067 99.339-88.057 4.955-19.989 5.514-40.268 0.519-61.439-7.532-29.806-22.612-58.921-50.707-76.806l40.948-19.453 97.297-47.108c9.557-4.096 14.33-12.287 14.33-24.575v-94.184c0-19.424 1.542-36.175-22.533-43.023h-358.387c-23.154 0.334-24.113 23.786-23.57 43.023v94.184c0 12.288 5.128 20.834 15.368 25.613l100.344 46.071 38.938 18.448c-17.749 11.605-31.746 27.633-41.986 48.113-12.296 27.036-17.172 62.134-8.203 94.217 11.339 43.488 46.852 82.559 98.302 84.977zM344.057 632.316c15.019 0 28.66-4.45 40.948-13.325-3.408-9.556-6.294-19.634-8.689-30.217-2.389-10.58-3.599-21.657-3.599-33.264 0-17.067 2.386-33.45 7.165-49.151 4.777-15.701 11.614-30.052 20.49-43.023-4.096-5.461-9.546-10.234-16.373-14.33l-75.801-34.821c-10.24-5.461-18.431-13.12-24.575-23.019s-9.208-21.009-9.208-33.297v-94.184h-74.731c-10.842 0.169-18.163 11.095-18.448 22.5v89.094c0 10.24 3.741 17.077 11.25 20.49l113.67 52.231c-29.369 18.054-43.538 50.683-45.033 87.019 0.518 44.767 29.86 93.577 82.934 97.297zM679.911 632.316c47.181-0.746 81.262-47.524 82.967-97.297-0.259-32.935-13.115-64.736-43.023-86.014l111.627-53.236c7.509-4.096 11.25-10.933 11.25-20.49v-89.094c-0.113-10.574-5.82-21.421-18.415-22.5h-76.806v94.184c0 12.288-3.064 23.398-9.208 33.297s-14.335 17.558-24.575 23.019c-31.833 14.795-68.392 25.416-92.174 50.188 17.749 27.306 26.618 57.686 26.618 91.137 0 21.163-3.741 41.996-11.25 62.476 12.332 8.143 26.929 14.101 42.991 14.33z" />
<glyph unicode="&#xe6b0;" d="M509.309 799.157c-88.186 0-159.676-83.465-159.676-186.423 0-71.406 34.386-133.421 84.879-164.734l-214.371-99.404c-15.053-7.527-22.565-20.291-22.565-38.355 0-57.202 0-114.405 0-171.607 1.238-21.455 14.111-41.452 34.983-41.791h554.342c23.828 2.072 35.882 21.265 36.118 41.791 0 57.202 0 114.405 0 171.607 0 18.064-7.512 30.828-22.565 38.355l-150.176 72.267-62.411 29.568c48.422 32.019 81.119 92.693 81.119 162.302 0 102.959-71.489 186.423-159.676 186.423zM251.753 733.601c-37.95-1.442-68.027-17.863-90.877-44.028-25.275-31.503-37.597-68.907-37.836-106.115 1.552-55.021 26.171-107.109 69.998-134.355l-174.979-81.313c-12.043-4.516-18.059-15.052-18.059-31.611v-137.726c0.94-18.266 10.424-33.616 28.207-33.88h116.296v145.67c1.924 38.945 20.213 70.425 53.074 85.787l116.263 55.311c9.032 5.269 17.691 12.431 25.97 21.463-47.937 73.963-54.594 162.553-23.7 240.47-20.093 12.297-42.674 20.199-64.357 20.328zM771.080 733.601c-24.818-0.519-47.752-9.659-66.594-22.565 30.052-78.624 21.763-167.267-22.598-235.964 9.785-11.29 19.972-19.949 30.509-25.97l111.757-53.074c34.046-18.671 51.601-50.43 51.939-85.787v-145.67h119.668c19.681 1.699 28.068 17.397 28.239 33.88v137.726c0 15.053-6.016 25.589-18.059 31.611l-172.742 82.448c44.799 33.031 67.294 82.534 67.728 133.22-1.19 40.117-13.445 77.367-37.836 106.115-25.486 27.647-57.096 43.735-92.012 44.028z" />
<glyph unicode="&#xe6b1;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM214.312 673.438h595.375v-450.875h-595.375v450.875zM287.5 600.875v-305.75h449v305.75h-449zM669.5 576.688l50.312-29.063-131.562-228.313-23.875 49.75-37.187 77.688-74.688-116.438-25.562 26.813-32.563 34.25-53-44.25-37.25 44.625 94.75 79.125 18.813-19.687 25.812-27.188 91 141.812 22.562-47 35.875-74.875 76.562 132.75z" />
<glyph unicode="&#xe6b2;" d="M0 835.812v-775.625h1024v775.625h-1024zM125.875 710.938h772.25v-525.875h-772.25v525.875zM782.875 669.312l-131.625-228.25-100.5 209.625-48.375-75.438-108.187-168.5-76.75 80.625-35.938-30.063-127.062-106.062 64.062-76.75 91.125 76.062 100-105 128.5 200.25 105-219.125 47.375 82.25 179 310.437-86.625 49.937z" />
<glyph unicode="&#xe6b3;" d="M0 960v-180.062c63.723 61.661 170.195 90.89 265.25 91.687h315.5l-84-67.75h-90.625c21.903-20.153 42.215-41.806 58.375-68.75 20.898-35.534 31.868-77.299 32.25-121.187-0.192-42.243-10.361-89.388-36.625-128.813-21.444-31.529-52.238-58.855-84.625-84.063-21.297-21.391-39.879-39.221-41.438-73.125 0.254-25.278 16.802-48.074 39.313-64.438 37.678-29.219 69.925-53.637 105.313-84.062 33.944-29.292 65.483-65.552 85.687-109.75 17.263-40.076 17.445-88.788 5.5-133.688h454.125v667.062h-188.875v-191.062h-81.813v191.062h-188.937v78.625h188.937v189.937h81.813v-189.937h188.875v278.312h-1024zM187 819.25c-18.434-0.405-37.168-4.458-54.938-12.562-35.71-17.48-61.936-45.685-71.5-88.5-7.379-44.287-5.745-91.158 5.5-138.625 13.328-54.143 39.855-105.514 87.813-143.062 36.169-25.546 90.954-29.358 137.063-16.875 36.047 10.728 61.869 44.791 75.875 81.875 12.718 40.212 8.32 85.905-2.75 132.062-14.385 58.946-43 115.857-93.375 158.875-23.106 17.944-52.964 27.487-83.688 26.812zM0 408.688v-259.813c51.364 37.949 122.674 42.577 187.25 44.75 20.014 0 37.256 0.335 51.812 1.063-10.189 13.828-20.175 28.404-30 43.687-22.106 35.407-16.654 78.61-0.562 116.875-75.542-9.69-142.818 4.237-208.5 53.438zM253.062 153.375c-35.861-0.131-70.748-6.733-106.25-11.625-55.096-10.684-107.31-32.658-146.812-76.875v-128.875h482.562c1.655 5.025 2.125 10.72 2.125 16.375-0.373 37.513-25.288 71.678-55.688 97.687-42.695 36.275-92.178 65.693-139.688 101-12.236 1.688-24.296 2.356-36.25 2.313z" />
<glyph unicode="&#xe6b4;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM507.875 828.938c28.672 0 56.154-2.885 82.437-8.688 26.283-5.798 51.42-14.197 75.313-25.125-3.413 0.683-7.851 1.697-13.313 3.063-27.358 5.426-52.619 7.811-77.875-9.188-15.539-9.686-32.584-17.144-52.188-16.375-23.211 0-46.573 3.899-70.125 11.75-23.552 7.851-44.568 16.568-63 26.125 37.546 12.288 77.107 18.438 118.75 18.438zM286.438 750.812c6.507-0.027 12.714-0.757 18.687-2.25 9.557-2.389 16.087-7.366 19.5-14.875 4.779-9.557 11.404-18.433 19.937-26.625 8.533-8.192 17.568-15.356 27.125-21.5 5.461-1.365 9.899-2.697 13.312-4.062 10.14-3.568 15.596-13.138 26.625-13.312 8.192 2.731 14.721 0.639 19.5-6.188 15.083-7.565 28.445-18.064 37.875-32.75-9.248-15.392-19.827-32.238-36.875-40.938 0.683 0 1-0.221 1-0.562 0-0.341 0.38-0.5 1.063-0.5 2.734-4.779 1.34-8.519-4.125-11.25-3.413-1.365-6.615-2.38-9.687-3.062-3.072-0.683-6.337-1.38-9.75-2.063-8.875-1.365-14.707-3.077-17.437-5.125 0-1.365-1.015-2.062-3.063-2.062 0-0.683-2.188-2.87-6.625-6.625-4.437-3.755-8.019-11.457-10.75-23.062-0.683-2.731-2.077-5.457-4.125-8.188 2.048-19.115 2.587-33.981 1.563-44.562-1.024-10.581-5.304-16.889-12.813-18.938-3.411-0.683-7.848 0.014-13.313 2.063-4.779 1.365-10.769 3.933-17.937 7.687-7.168 3.755-15.505 9.746-25.063 17.938 1.399-12.397 5.052-25.161 9.188-37.875 8.782 1.724 23.901 0.726 17.438-12.313-4.627-4.687-3.362-7.867 3.062-10.25 2.726-0.683 5.451-3.091 8.188-7.187 10.594-0.936 21.476-1.178 33.312 1.063 9.899 1.365 20.423 1.683 31.688 1 11.264-0.683 22.389-3.251 33.312-7.688 31.133-13.015 56.396-54.047 90.625-69.125 8.529-5.461 15.535-10.914 21-16.375 5.461-5.461 8.187-11.61 8.187-18.438-0.056-23.68-2.14-47.78-8.187-71.687-2.048-6.144-8.356-14.64-18.937-25.563-10.579-10.923-22.72-21.193-36.375-30.75-5.461-4.096-10.216-8.851-14.312-14.312-3.413-4.779-6.678-10.928-9.75-18.438-3.072-7.509-4.625-16.385-4.625-26.625-5.461-10.24-10.058-19.654-13.813-28.188-3.755-8.533-6.956-15.476-9.687-20.938-2.731-7.509-5.519-13.659-8.25-18.437-27.173 1.58-52.549 11.756-77.813 26.625 2.949 48.538 12.616 96.648 17.438 144.375 1.365 4.779 0.986 9.216-1.062 13.313-21.953 43.63-47.707 65.433-41.938 125.937 1.365 6.827 2 11.962 2 15.375-9.026 8.893-21.605 15.805-30.688 26.625-62.040 29.079-126.662 31.304-172.062 96.25 7.509 49.834 24.088 95.545 49.688 137.187 25.6 41.643 57.521 77.145 95.75 106.5 4.096 0.512 8.096 0.766 12 0.75zM754.688 739.812c42.325-35.499 75.799-78.483 100.375-129s36.813-105.8 36.813-165.875v-7.188l-32.75-10.25c-13.858 3.818-28.622-6.221-34.813-19.438l17.438-6.125c2.731-1.365 4.442-2.76 5.125-4.125 3.794-9.717-0.215-21.525-3.125-31.75-5.477-7.221-14.465-14.003-21.5-21.5-0.683-3.413-1-8.548-1-15.375 0-10.923-4.438-24.237-13.312-39.938 1.365-4.779 1.365-9.216 0-13.312-2.048-8.875-5.092-17.371-9.188-25.563-4.767-8.192-7.556-15.736-8.25-22.563-2.731-18.432-10.909-35.486-24.562-51.187-18.432-19.115-34.472-27.611-48.125-25.563-6.144 1.365-10.74 5.265-13.812 11.75-10.086 21.365-16.37 43.731-27.125 67.063-7.272 19.381-1.99 41.706-0.5 62.5 0.553 15.416-9.697 29.434-12.813 44.5-0.685 5.12 0.647 12.125 4.063 21-0.673 0.683-3.874 1.918-9.687 3.625-30.981 8.681-53.502-7.9-79.875 15.875-10.581 9.557-17.587 23.187-21 40.937-4.096 24.576 0.66 46.766 14.313 66.563 0.683 2.048 1.063 4.077 1.063 6.125 0 4.779 0.317 8.202 1 10.25 3.395 0.683 6.28 2.077 8.687 4.125 2.372 2.048 4.242 4.077 5.625 6.125 2.048 2.728 3.442 5.454 4.125 8.188 72.89 6.647 88.459 20.245 153.625-18.438l29.688 20.5c-6.827 11.605-12.818 20.101-17.938 25.562-17.286 18.156-39.111 21.282-56.812 0l-71.688 6.188c-9.385-9.207-25.769-9.491-38.938-10.25 0 6.144-1.712 12.293-5.125 18.438-4.096 8.192-6.125 14.658-6.125 19.437 0 4.775 1.015 8.516 3.063 11.25 21.713 28.613 17.418 30.619 26.125 68.625 3.072 8.875 8.683 19.779 16.875 32.75 19.137 27.154 92.001 42.094 130.063 46.062z" />
<glyph unicode="&#xe6b5;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM385.070 821.236c18.644-10.039 40.683-19.535 66.14-28.498 25.457-8.963 50.736-13.455 75.834-13.455 18.523 0.035 37.001 4.633 52.717 16.146 15.219 9.12 29.948 16.398 49.475 14.525 20.064-2.192 41.194-9.1 62.379-10.245 26.533-14.341 52.357-32.242 77.455-53.755-12.19-0.716-25.119-2-38.744-3.793-13.625-1.793-26.874-4.455-39.781-8.041-12.908-3.585-24.745-8.27-35.502-14.006-10.756-5.736-18.648-12.89-23.668-21.495-7.888-12.908-13.438-23.847-16.665-32.811-6.641-18.585-5.071-48.238-20.426-61.86-3.227-2.151-5.922-4.653-8.073-7.522-2.151-2.869-3.049-6.622-2.691-11.283 0.358-4.661 2.701-11.302 7.003-19.907 2.151-5.020 3.916-11.114 5.35-18.286 13.623 0.043 27.752 2.094 39.814 10.764l71.003-6.452c18.328 20.645 39.687 20.988 58.067 0 5.736-5.736 11.832-14.366 18.286-25.84l-30.12-20.426c-7.171 2.151-15.769 6.45-25.808 12.904-5.008 2.869-10.045 6.109-15.076 9.694-28.616 13.889-84.649-2.285-116.166-4.312-4.109-8.219-7.42-16.267-17.183-18.286-1.697-5.319-0.058-11.024-2.172-16.146-13.625-21.513-18.276-44.097-13.974-67.761 7.888-37.289 27.232-55.927 58.067-55.927h11.834c15.059 0 25.645-0.706 31.741-2.14s9.143-2.525 9.143-3.242c-3.585-8.605-4.836-15.406-3.761-20.426 3.551-16.106 15.172-28.294 13.974-45.714-1.114-22.158-8.080-41.262-0.519-63.481 8.622-21.553 19.453-44.958 27.429-67.21 3.227-6.454 8.071-10.4 14.525-11.834 12.908-2.151 29.044 6.446 48.405 25.808 14.341 15.776 22.586 33.003 24.738 51.647 2.839 16.503 14.473 31.163 18.286 48.405v13.974c3.579 7.171 6.627 14.165 9.143 20.977 3.589 9.902 3.981 22.519 4.831 33.88 11.274 11.274 22.273 21.338 30.12 35.502 5.020 8.605 6.463 16.112 4.312 22.565-0.689 1.434-2.486 2.878-5.382 4.312l-16.146 6.452c0.276 9.016 16.854 7.674 24.738 6.452l38.711 23.668c-1.434-48.762-10.93-95.92-28.498-141.455-17.568-45.535-43.554-86.565-77.974-123.137-45.893-50.196-100.943-86.062-165.123-107.574-64.18-21.513-130.329-25.811-198.452-12.904 11.728 20.719 18.499 44.066 32.292 64.551 0 10.756 1.604 19.899 4.831 27.429 13.69 31.672 36.027 39.914 61.86 64.519 26.066 27.169 25.822 59.273 26.877 98.432-0.356 24.785-39.985 40-58.099 53.787-41.986 28.295-68.648 69.922-128.519 57.548-21.397-2.181-26.576-6.34-42.505 6.971l-6.452 3.242 0.551 2.14 2.691 5.382c6.426 6.721-2.696 15.171-11.315 12.385-1.793-0.358-3.749-0.551-5.901-0.551-1.967 9.606-8.412 18.544-9.694 29.050 10.039-7.888 18.669-13.823 25.84-17.767 7.169-3.944 13.265-6.639 18.286-8.073 5.020-2.151 9.319-2.857 12.904-2.14 7.888 1.434 12.347 9.326 13.422 23.668 1.076 14.341 0.563 30.831-1.589 49.475 2.151 2.867 3.562 5.754 4.28 8.624 7.579 39.192 27.649 30.598 58.099 41.921 5.020 2.869 6.078 6.461 3.21 10.764 0 0.717-0.161 1.070-0.519 1.070-0.358 0-0.551 0.385-0.551 1.102 16.553 8.313 26.303 25.335 36.571 40.851-8.749 13.864-22.331 25.44-37.641 33.362-8.211 10.127-40.447 3.918-47.335 20.426-5.736 0.717-10.035 1.808-12.904 3.242-29.041 18.82-41.307 51.73-72.592 65.070-12.549 1.076-24.932 0.883-37.123-0.551 36.571 29.399 76.383 51.278 119.408 65.621zM123.688 517.901c6.454-10.756 14.345-20.445 23.668-29.050 48.383-44.446 93.862-53.865 155.947-76.353 2.865-2.151 6.812-5.744 11.834-10.764 6.765-5.134 12.488-11.282 19.388-16.146 0-3.585-0.545-8.59-1.621-15.044-1.076-6.454-1.269-16.848-0.551-31.189 2.072-39.907 34.984-71.499 44.093-109.714-8.080-49.526-8.195-98.204-13.974-147.356-48.762 20.078-91.588 48.758-128.519 86.047-36.93 37.289-65.449 80.661-85.528 130.14-14.341 35.854-23.484 72.266-27.429 109.196-3.949 36.93-3.050 73.662 2.691 110.233z" />
<glyph unicode="&#xe6b6;" d="M954.836 454.065h-329.795l42.589-194.382h266.457zM397.898 454.065h-329.795l20.749-194.382h266.457zM1014.898 510.851c7.284-8.008 10.196-16.744 8.736-26.209l-28.393-262.089c-3.895-17.136-16.109-30.345-32.761-30.577h-321.058c-17.265 1.148-28.705 11.977-31.669 27.301l-51.326 228.235c-27.773 17.298-64.294 14.778-93.915 2.184l-51.326-230.419c-4.072-16.599-15.918-27.109-31.669-27.301h-321.058c-18.061 1.427-30.123 14.456-31.669 30.577l-28.393 262.089c-1.456 10.192 1.092 18.928 7.644 26.209l369.108 190.014c17.705 7.898 35.24 0.313 42.589-15.289 6.163-17.82 2.161-38.117-14.196-45.865l-233.696-105.927h675.97l-233.696 105.927c-17.336 9.827-21.82 29.619-15.288 45.865 9.269 16.622 28.044 22.14 43.681 15.289z" />
<glyph unicode="&#xe6b7;" d="M0 878.888l430.019-430v-421.137h-158.124v-91.751h480.229v91.751h-158.124v421.137l430 430z" />
<glyph unicode="&#xe6b8;" d="M873.422 705.981h97.504v-108.714c-3.734 0-10.645 0.371-20.734 1.12-10.086 0.746-19.612 1.122-28.58 1.122h-48.19v-208.464c0-50.064 16.436-75.093 49.313-75.093 23.164 0 44.081 6.345 62.767 19.051v-112.074c-27.647-14.95-60.899-22.419-99.755-22.419-54.544 0-92.273 19.425-113.195 58.276-15.69 29.145-23.54 75.090-23.54 137.862v200.619h1.122v2.242l-16.812 1.117c-9.714 0-22.416-1.117-38.105-3.359v108.714h54.918v43.71c0 20.922-1.122 37.735-3.362 50.436h130.009c-2.239-14.198-3.36-30.263-3.36-48.192v-45.955zM514.86 208.356c1.493 14.938 2.236 40.34 2.236 76.209v348.568c0 35.113-0.743 59.4-2.236 72.848h126.649c-1.498-14.198-2.245-37.735-2.245-70.612v-344.077c0-38.11 0.747-65.755 2.245-82.937h-126.649zM233.498 711.562c-50.809 0-94.51-16.813-131.125-50.438-38.102-35.866-57.188-80.701-57.188-134.5 0-35.866 10.516-69.433 31.438-100.812 18.679-29.137 39.965-47.845 63.875-56.062v-2.25c-23.91-10.451-35.875-36.594-35.875-78.438 0-32.133 12.662-56.060 38.062-71.75v-2.25c-69.483-23.16-104.187-66.113-104.187-128.875 0-54.55 23.17-94.534 69.5-119.938 36.606-20.177 83.275-30.25 140.062-30.25 138.228 0 207.375 57.929 207.375 173.75 0 72.476-53.46 116.941-160.312 133.375-24.656 3.734-43.298 12.674-56 26.875-9.714 9.71-14.562 19.411-14.562 29.125 0 27.644 14.931 43.702 44.812 48.188 45.579 6.717 82.732 27.885 111.5 63.375 28.767 35.493 43.188 77.117 43.188 124.938 0 14.944-3.024 31.005-9 48.188 19.429 4.487 34.35 8.579 44.812 12.312v115.438c-47.078-17.933-88.512-26.875-124.375-26.875-31.385 17.932-65.388 26.875-102 26.875zM237.998 608.5c22.417 0 39.986-8.63 52.688-25.812 10.46-15.695 15.688-34.394 15.688-56.062 0-52.302-22.796-78.438-68.375-78.438-47.069 0-70.625 25.816-70.625 77.375 0 55.29 23.556 82.938 70.625 82.938zM245.81 152.313c62.767 0 94.188-19.079 94.188-57.188 0-40.352-28.778-60.5-86.312-60.5-65.75 0-98.625 19.464-98.625 58.313 0 39.603 30.227 59.375 90.75 59.375zM656.376 876.503c0-46.114-34.874-83.497-77.894-83.497s-77.894 37.383-77.894 83.497c0 46.114 34.874 83.497 77.894 83.497 43.020 0 77.894-37.383 77.894-83.497z" />
<glyph unicode="&#xe6b9;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 904.25c251.98 0 456.25-204.27 456.25-456.25s-204.27-456.25-456.25-456.25c-251.98 0-456.25 204.27-456.25 456.25 0 251.98 204.27 456.25 456.25 456.25zM285.562 770.625c-12.994-37.768-17.499-78.761-5.875-114.563-14.044-15.584-24.948-33.487-32.75-53.75-20.797-65.729-15.717-149.696 29.812-200.5 15.994-17.534 37.694-31.95 65-43.25 27.306-11.299 62.402-18.507 105.312-21.625-28.8-13.458-49.103-21.681-56.187-51.438-32.125-21.467-71.191-16.344-99.5 7-22.372 16.335-32.507 45.366-57.313 56.125-1.56 1.558-6.433 2.72-14.625 3.5-8.192 0.78-14.631-1.544-19.313-7-2.341-2.338-2.168-4.835 0.563-7.563 18.779-15.273 36.852-31.46 47.437-50.875 10.143-21.041 20.64-36.447 31.563-46.188 30.299-20.474 70.935-31.126 106.5-18.125-4.147-25.028 7.041-64.111-1.188-86.5-3.121-6.234-7.586-11.699-13.438-16.375-5.215-5.087-21.384-11.452-18.125-19.25 1.56-3.507 7.013-5.658 16.375-6.438 20.609 0.526 41.125 8.858 53.25 25.125 4.292 5.845 6.438 13.461 6.438 22.812v95.812c0 10.91 2.319 18.699 7 23.375s9.788 7.817 15.25 9.375v-126.25c0-10.91-0.987-20.269-2.938-28.062-1.951-7.793-3.69-13.258-5.25-16.375-3.581-6.007-10.428-11.55-10.562-18.687 0-2.338 1.395-3.673 4.125-4.063 20.497 0.889 44.278 12.913 52.625 29.813 6.632 14.027 9.938 28.789 9.938 44.375v123.938h25.75v-123.938c0-15.586 3.541-30.348 10.562-44.375 7.022-14.027 18.741-23.041 35.125-26.938 8.582-2.338 14.379-3.265 17.5-2.875 3.121 0.39 4.515 1.725 4.125 4.063-1.879 7.081-5.795 13.139-9.938 18.687-5.462 7.014-8.187 21.838-8.187 44.437v126.25c5.462-1.558 10.742-4.699 15.813-9.375s7.562-12.465 7.562-23.375v-95.812c0-9.352 2.146-16.968 6.438-22.812 13.042-16.586 32.696-25 53.25-25.125 9.362 0.779 14.815 2.931 16.375 6.438 1.56 3.507 0.401 6.412-3.5 8.75-3.9 2.338-8.773 5.824-14.625 10.5-5.852 4.676-10.316 10.141-13.438 16.375-3.502 40.2-0.089 83.293-2.938 123.937-5.623 44.356-22.695 58.948-56.75 75.938 40.57 3.118 73.927 10.561 100.063 22.25 78.129 37.961 99.734 96.646 100.063 175.312-1.232 50.628-15.847 94.793-49.188 128.625 4.681 17.923 6.076 36.58 4.125 56.062-1.951 19.483-6.071 37.039-12.313 52.625-28.864-1.558-53.055-7.369-72.562-17.5-19.505-10.131-33.543-18.736-42.125-25.75-69.133 15.695-143.14 15.79-209.437-2.313-33.924 27.746-75.968 43.203-115.875 45.563z" />
<glyph unicode="&#xe6ba;" d="M640.502 642.761l196.769 124.486-192.753 192.753-124.486-277.082-72.282 216.847-192.753-128.502 160.627-128.502h-365.427v-257.004h64.251v-449.757h795.106v449.757h64.251v257.004zM660.773 875.596l100.86-100.86-205.738-130.466zM421.984 824.673l56.951-170.851-142.376 113.901zM447.749 0.251h-269.051v405.631h269.051zM447.749 450.008h-333.302v128.502h333.302zM845.302 0.251h-269.051v405.631h269.051zM909.553 450.008h-333.302v128.502h333.302z" />
<glyph unicode="&#xe6bb;" d="M576.906 960c89.763-0.001 179.527-18.874 269.292-56.62l-64.216-158.813c-72.272 29.46-134.877 44.191-187.814 44.192-35.906-0.001-63.526-10.358-82.859-31.072-19.334-20.255-29.001-49.486-29.001-87.693v-133.265h258.935v-151.218h-258.935v-98.74c0-78.256-34.755-135.337-104.264-171.242h495.773v-179.528h-723.636v171.242c47.414 20.254 79.867 43.501 97.359 69.74 17.953 26.238 26.929 62.374 26.929 108.407v100.121h-122.908v151.218h122.908v134.646c0 92.525 26.238 163.646 78.716 213.362 52.937 50.175 127.511 75.263 223.719 75.264" />
<glyph unicode="&#xe6bc;" d="M0 960v-353.125l123 124.063 282.938-282.938-283.438-283.438-122.5 121.438v-350h353.125l-124.063 123 282.938 282.938 283.438-283.438-121.438-122.5h350v353.125l-123-124.063-282.938 282.938 283.438 283.438 122.5-121.438v350h-353.125l124.063-123-282.938-282.938-283.438 283.438 121.438 122.5h-350z" />
<glyph unicode="&#xe6bd;" d="M0 960v-1024h1024v1024h-1024zM690.625 819.312c35.398 0.063 67.92-6.063 95.313-10.062 59.782-15.856 83.645-40.181 82.75-83l2.187-68.25c-9.517-62.091-35.989-64.765-61.625-70.438 9.523-7.316 18.802-3.286 24.25-37.437v-83.625c-18.844-44.475-45.729-48.971-72.688-52.875l-33 2.25-2.187-279.625c-4.354-51.581-35.51-54.065-63.875-61.625h-125.5c-38.327 0.778-58.69 26.19-63.812 72.625-14.577-57.122-41.954-82.207-81.438-77.062l-107.875 2.25c-72.056 7.807-66.179 43.099-70.5 74.813l-2.187 268.625c-30.58 10.142-59.26 25.009-57.25 116.625 2.1 80.893 31.070 89.012 61.687 92.5 8.524 104.637 63.926 177.979 209.125 191.5 64.2 4.759 110.394-8.478 154.125-24.188 38.868 20.716 77.102 26.937 112.5 27zM440.688 753.812c-13.424-0.15-22.894-2.138-37.625-1.125-119.548-14.985-114.655-111.15-117.375-166.938l1.562-23.375-60.75 3.125 1.562-85.625h56.063l-3.125-339.313h115.188v339.313l149.437 3.125v-342.438l115.187-3.125-1.562 345.562h104.312v76.312h-104.312c3.757 51.594-14.182 121.475 63.875 110.5 28.062-3.57 54.832-8.994 74.687-24.875l1.563 85.562c-38.401 16.429-89.107 23.531-144.313 16.188-126.46-16.829-105.954-114.167-109.437-190.5l-144.75 1.562v57.562c3.628 29.859 8.916 58.714 65.375 56.063 18.244 2.47 40.98-8.026 66.938-17.125l-1.563 80.938c-49.885 15.99-73.678 18.818-90.937 18.625z" />
<glyph unicode="&#xe6be;" d="M755.957 959.999c-48.345-0.086-100.581-8.618-153.664-36.91-59.725 21.455-122.792 39.565-210.471 33.065-198.304-18.466-273.995-118.668-285.637-261.575-41.816-4.763-81.333-15.792-84.201-126.27-2.744-125.124 36.413-145.516 78.178-159.367l3.012-366.827c5.902-43.312-2.194-91.546 96.216-102.208l147.32-3.012c53.924-7.026 91.335 27.206 111.243 105.219 6.996-63.418 34.868-98.133 87.213-99.196h171.382c38.74 10.324 81.235 13.723 87.181 84.169l3.012 381.853 45.080-3.012c36.818 5.332 73.492 11.413 99.228 72.154v114.255c-7.441 46.642-20.059 41.144-33.065 51.136 35.012 7.747 71.172 11.417 84.169 96.216l-2.98 93.205c1.223 58.479-31.358 91.702-113.005 113.358-37.411 5.462-81.866 13.831-130.211 13.745zM414.635 870.512c23.572 0.264 56.058-3.57 124.187-25.408l2.115-110.57c-35.451 12.427-66.493 26.763-91.41 23.389-77.108 3.622-84.341-35.764-89.296-76.544v-78.658l197.719-2.115c4.758 104.251-23.277 237.15 149.435 260.133 75.396 10.029 144.665 0.426 197.111-22.012l-2.115-116.946c-27.117 21.689-63.722 29.151-102.048 34.027-106.606 14.989-82.050-80.509-87.181-150.973h142.45v-104.162h-142.45l2.115-471.982-157.317 4.261v467.721l-204.095-4.261v-463.46h-157.317l4.229 463.46h-76.544l-2.115 116.946 82.92-4.261-2.115 31.88c3.715 76.191-2.943 207.564 160.328 228.029 20.119-1.384 33.059 1.301 51.392 1.506z" />
<glyph unicode="&#xe6bf;" d="M0 960v-1024h1024v730.625l-229.5-193.75c18.221-18.711 18.698-45.937-1.062-67.125l-234.938-235.938c-19.627-19.149-46.279-20.086-69.25 0l-208.938 208.938c-53.656 3.248-102.571 28.921-141.75 71.438-34.589 40.51-51.619 92.133-48.75 149.875 4.782 53.504 28.933 101.996 71.438 141.25 36.875 30.808 82.234 48.46 134.25 49.813 59.073-0.471 113.879-25.296 156.938-72.5 3.608-4.33 7.065-8.872 10.312-13.563 3.247-4.69 6.301-9.17 9.188-13.5l17.312 17.313c19.628 19.149 46.278 20.086 69.25 0l69.312-69.313 233.813 320.438h-861.625zM911.438 960l-378.875-520.625c-3.608-4.33-7.948-6.563-13-6.563s-8.648 1.83-10.812 5.438c-1.443 0.722-7.954 8.658-19.5 23.812-11.546 15.154-25.59 33.942-42.188 56.313 0.15 0.939 0.244 1.833 0.375 2.75 8.104 19.516 12.562 40.864 12.562 63.313 0 91.319-73.993 165.375-165.312 165.375-91.319 0-165.375-74.056-165.375-165.375 0-91.319 74.056-165.313 165.375-165.313 19.94 0 39.049 3.532 56.75 10 0.032 0.012 0.030-0.012 0.062 0 0.812 0.159 1.616 0.273 2.438 0.437l157-126.625c2.165-2.165 4.273-3.25 6.437-3.25h3.25c3.608 0 6.523 1.085 8.687 3.25l494.688 416.75v240.312h-112.562z" />
<glyph unicode="&#xe6c0;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM256 639.688l256-191.688-256-191.688v383.375zM576 639.688l256-191.688-256-191.688v383.375z" />
<glyph unicode="&#xe6c1;" d="M488.727-64v465.455l-465.454-465.455v1024l465.454-465.455v465.455l512-512z" />
<glyph unicode="&#xe6c2;" d="M36.013 161.343h158.772v146.746c0 46.428 22.663 97.694 65.98 140.568 43.317 42.875 107.576 89.465 213.251 163.438 106.15 74.305 170.297 115.684 199.122 141.488 28.825 25.804 26.352 21.654 26.352 59.211v147.206h126.176v-147.206c0-56.387-23.568-113.101-68.346-153.186s-106.807-77.919-210.951-150.82c-104.618-73.233-166.536-119.791-196.822-149.769-30.286-29.977-28.587-31.267-28.587-50.931v-146.746h165.672l-225.277-225.343zM537.367 161.343h162.123v146.746c0 19.664 1.634 20.953-28.653 50.931-20.033 19.829-55.546 47.91-106.461 85.169 6.391 4.506 11.45 8.153 18.204 12.88 37.269 26.088 64.156 44.074 92.004 62.957 35.481-26.789 63.040-49.595 85.038-71.369 43.317-42.875 66.045-94.14 66.045-140.568v-146.746h162.321l-225.277-225.343z" />
<glyph unicode="&#xe6c3;" d="M888.561 283.070c-10.194 16.748-22.937 27.488-38.229 32.222-31.715 10.15-67.114 9.461-88.472-13.653-23.875-31.625-24.473-79.020 0-106.494 37.328-35.237 103.259-17.823 126.701 16.929v70.996zM972.664 565.963c34.223-31.311 51.336-75.729 51.336-133.255v-332.044c-0.557-9.175-8.087-16.264-16.384-16.383h-102.671c-9.175 0.555-16.264 8.087-16.384 16.383v9.83c-34.275-26.010-73.934-37.993-113.594-38.229-45.005 1.318-84.128 17.242-114.686 45.328-37.63 37.658-52.131 83.958-52.428 131.616 1.481 52.141 16.541 99.069 52.974 132.708 33.609 28.431 73.359 41.788 114.14 42.051 45.146 0 83.011-12.014 113.594-36.044v31.676c0 50.243-26.214 75.365-78.642 75.365-40.777 0-77.913-17.112-111.409-51.336-8.893-7.87-21.431-4.784-26.214 4.369l-40.413 69.904c-3.64 7.281-2.548 13.835 3.277 19.66 24.758 24.759 53.52 43.508 86.288 56.251 81.205 28.173 189.585 26.62 251.217-27.852zM300.931 620.576l-72.088-257.771h145.269zM601.299 112.679c1.456-4.369 2.184-7.281 2.184-8.738-0.306-9.713-7.761-16.273-16.384-16.383h-128.885c-8.009 0-13.107 4.005-15.291 12.014l-36.044 126.701h-210.804l-36.044-126.701c-2.184-8.009-7.646-12.014-16.384-12.014h-126.701c-13.619 1.134-18.768 9.492-16.384 20.752l214.081 703.409c2.913 8.009 8.374 12.015 16.384 12.015h140.9c8.009 0 13.471-4.005 16.384-12.015l212.989-699.040z" />
<glyph unicode="&#xe6c4;" d="M285.996 308.734h371.377l-185.69 481.166-185.69-481.166M0.003-57.9v71.836h88.779l360.534 939.965h113.851l361.211-939.965h99.622v-71.836h-367.991v71.836h112.498l-84.712 222.283h-425.593l-84.712-222.283h111.141v-71.836h-284.632" />
<glyph unicode="&#xe6c5;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM333.25 693.75h131.812l42.687-55h310v-436.5h-611.5v436.5h84.312l42.687 55z" />
<glyph unicode="&#xe6c6;" d="M212.625 859.563l-71.438-92.187h-141.187v-520.509l105.448 397.072h742.552v123.438h-343.125l-71.438 92.187zM0 92.491v-56.053h848l176 573.125h-874.552z" />
<glyph unicode="&#xe6c7;" d="M212.199 868.518l-71.438-92.188h-141.188v-123.438h1024v123.438h-519.125l-71.438 92.188h-220.812zM-0.426 618.518v-573.125h1024v573.125h-1024z" />
<glyph unicode="&#xe6c8;" d="M212.625 859.562l-71.437-92.187h-141.188v-730.938h1024v730.938h-519.125l-71.438 92.188z" />
<glyph unicode="&#xe6c9;" d="M0 960v-1024h1024v1024h-1024zM302.875 641c106.607 0 193-86.393 193-193s-86.393-193.062-193-193.062c-106.607 0-193 86.456-193 193.062 0 106.607 86.393 193 193 193zM721.125 641c106.607 0 193-86.393 193-193s-86.393-193.062-193-193.062c-106.607 0-193 86.456-193 193.062 0 106.607 86.393 193 193 193z" />
<glyph unicode="&#xe6ca;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM350.188 737c154.457-0.692 268.477-154.807 451.437-36.438v-309.75c-147.816-147.816-286.419 91.4-502.375 32.625v-264.438h-76.875v541.562c46.442 26.814 88.441 36.614 127.813 36.438z" />
<glyph unicode="&#xe6cb;" d="M0 895.462v-959.462h135.937v468.521c381.785 104.121 626.741-319.663 888.063-57.806v548.747c-405.902-263.143-619.792 233.848-1024 0z" />
<glyph unicode="&#xe6cc;" d="M325.666-64c-209.801 118.243-265.038 230.162-233.457 383.020 23.314 112.872 99.654 204.702 106.974 317.358 32.61-59.344 46.236-102.137 49.88-164.15 103.717 127.073 172.255 302.987 176.313 487.773 0 0 270.144-158.729 287.871-398.49 23.256 49.419 34.962 127.908 11.706 178.777 69.766-50.871 478.117-502.475-55.312-804.287 100.29 195.275 25.873 458.762-148.257 580.452 11.629-52.326-8.76-247.484-85.796-333.239 21.345 143.288-20.31 203.877-20.31 203.877 0 0-14.296-80.26-69.766-161.336-50.653-74.037-85.751-152.616-19.845-289.754z" />
<glyph unicode="&#xe6cd;" d="M0 960l354.875-354.875v-669.125l314.25 257.125v412l354.875 354.875h-1024z" />
<glyph unicode="&#xe6ce;" d="M60.438 960v-1024h903.125v1024h-903.125zM106.5 898.5h110.938v-84.375h-110.938v84.375zM806.5 898.5h110.938v-84.375h-110.938v84.375zM265.125 892.25h493.75v-446.875h-493.75v446.875zM106.5 709.438h110.938v-84.375h-110.938v84.375zM806.562 709.438h110.938v-84.375h-110.938v84.375zM106.5 520.375h110.938v-84.375h-110.938v84.375zM806.562 520.375h110.938v-84.375h-110.938v84.375zM265.125 414.125h493.75v-446.875h-493.75v446.875zM106.5 331.312h110.938v-84.375h-110.938v84.375zM806.562 331.312h110.938v-84.375h-110.938v84.375zM106.5 142.25h110.938v-84.375h-110.938v84.375zM806.562 142.25h110.938v-84.375h-110.938v84.375z" />
<glyph unicode="&#xe6cf;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM383.125 770.625h312v-208.563h-52.437v156.438h-221.313v-93.938h-98.75v-401.562h250.375v-52.125h-302.875v490.687l113 109.063zM619.375 516.375h96.437v-124.5h124.563v-96.5h-124.563v-124.5h-96.437v124.5h-124.5v96.5h124.5v124.5z" />
<glyph unicode="&#xe6d0;" d="M218.097 960l-192.913-186.239v-837.761h517.1v89.027h-427.506v685.647h168.61v160.299h377.893v-267.081h89.594v356.108h-532.777zM621.489 525.883v-212.557h-212.62v-164.769h212.62v-212.557h164.706v212.557h212.62v164.769h-212.62v212.557h-164.706z" />
<glyph unicode="&#xe6d1;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM389.875 771.5h336.625v-146.812l21.062 21 104.438-104.375-246.625-246.687-154.625-50.25 50.188 154.687 169 169v147.188h-238.813v-101.312h-106.5v-433.188h345.313v93.375l56.562 56.625v-206.25h-458.5v529.312l121.875 117.688zM527.062 373l-25.125-77.375 77.312 25.125-52.188 52.25z" />
<glyph unicode="&#xe6d2;" d="M242.778 960l-192.913-186.239v-837.761h725.69v326.391l-89.594-89.594v-147.77h-546.503v685.647h168.61v160.299h377.893v-232.956l-267.459-267.459-79.457-244.793 244.73 79.52 390.359 390.359-165.273 165.273-33.306-33.306v232.39h-532.777zM459.868 329.255l82.605-82.668-122.396-39.728 39.791 122.396z" />
<glyph unicode="&#xe6d3;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM423.875 713.562h33.875v-129.312h-133.938v32.688l100.063 96.625zM503.188 713.562h197v-531.125h-376.375v357.937h179.375v173.187z" />
<glyph unicode="&#xe6d4;" d="M342.068 960l-192.913-186.239v-63.087h258.204v249.326h-65.291zM495.001 960v-333.883h-345.846v-690.117h725.69v1024h-379.844z" />
<glyph unicode="&#xe6d5;" d="M512 960c-181.644 0-328.928-147.283-328.928-328.928 0-160.214 114.611-293.701 266.287-322.968v-105.881h-141.069v-125.218h141.069v-141.005h125.218v141.005h141.069v125.218h-141.069v105.881c151.706 29.243 266.35 162.733 266.35 322.968 0 181.644-147.283 328.928-328.928 328.928zM512 829.202c109.424 0 198.13-88.706 198.13-198.13s-88.706-198.13-198.13-198.13c-109.424 0-198.13 88.706-198.13 198.13 0 109.424 88.706 198.13 198.13 198.13z" />
<glyph unicode="&#xe6d6;" d="M1024 960v-1024h-170.667v469.333l-426.667-426.667v426.667l-426.667-426.667v938.667l426.667-426.667v426.667l426.667-426.667v469.333z" />
<glyph unicode="&#xe6d7;" d="M0-64v1024h170.667v-469.333l426.667 426.667v-426.667l426.667 426.667v-938.667l-426.667 426.667v-426.667l-426.667 426.667v-469.333z" />
<glyph unicode="&#xe6d8;" d="M0 844.962v-793.925h793.925v333.871l230.075-333.871v793.925l-230.075-333.871v333.871h-793.925z" />
<glyph unicode="&#xe6d9;" d="M0 960v-1024h1024v1024h-1024zM736.625 826.375c7.437 0.158 15.182-0.084 23.187-0.625 29.419-0.040 60.146-2.692 90.625-5.375l-3.313-121.25h-81.875c-38.39 0.85-52.254-14.057-53.5-57.375v-95.25h138.688l-5.5-129.875h-133.188v-361.563h-135.312v361.563h-93.938v129.875h93.938v111.5c0 80.392 33.987 131.562 100.937 157.5 17.194 6.765 36.939 10.401 59.25 10.875z" />
<glyph unicode="&#xe6da;" d="M665.466 448.064c0-81.349-68.833-147.296-153.744-147.296-84.91 0-153.744 65.947-153.744 147.296 0 81.349 68.833 147.296 153.744 147.296 84.91 0 153.744-65.947 153.744-147.296zM512 754.756c-87.915-0.39-179.042-21.793-265.305-62.768-64.049-31.678-126.469-76.371-180.652-131.534-26.611-28.159-60.555-68.934-66.043-112.438 0.648-37.684 41.071-84.198 66.043-112.438 50.81-52.998 111.604-96.442 180.652-131.566 80.445-39.040 169.486-61.518 265.305-62.768 87.998 0.396 179.104 22.045 265.273 62.768 64.049 31.678 126.501 76.403 180.685 131.566 26.611 28.159 60.554 68.934 66.043 112.438-0.648 37.684-41.071 84.198-66.043 112.438-50.81 52.998-111.636 96.409-180.685 131.534-80.403 39.012-169.664 61.335-265.273 62.768zM511.935 678.598c133.222 0 241.216-103.248 241.216-230.614s-107.994-230.614-241.216-230.614c-133.222 0-241.216 103.248-241.216 230.614 0 127.366 107.994 230.614 241.216 230.614z" />
<glyph unicode="&#xe6db;" d="M571.5 726.6c-19.533 2.112-39.381 3.323-59.5 3.625-87.915-0.39-179.049-21.775-265.312-62.75-64.049-31.678-126.441-76.399-180.625-131.562-26.611-28.16-60.574-68.934-66.062-112.438 0.648-37.684 41.091-84.198 66.062-112.438 50.81-52.998 111.577-96.438 180.625-131.562 2.346-1.139 4.701-2.265 7.062-3.375l-64.061-111.873 87.044-51.444 470.541 819.228-83.785 51.207zM770.188 670.725l-63.938-110.812c29.414-38.214 46.875-85.338 46.875-136.438 0-127.366-107.966-230.625-241.187-230.625-5.76 0-11.341 0.621-17 1l-42.313-73.25c19.514-2.090 39.245-3.612 59.375-3.875 87.998 0.396 179.082 22.027 265.25 62.75 64.049 31.678 126.504 76.399 180.688 131.562 26.611 28.159 60.574 68.934 66.062 112.438-0.648 37.684-41.091 84.198-66.062 112.438-50.81 52.998-111.639 96.438-180.688 131.562-2.331 1.131-4.717 2.147-7.062 3.25zM511.938 654.1c5.841 0 11.637-0.235 17.375-0.625l-49.562-85.812c-69.559-14.102-121.75-73.284-121.75-144.125 0-17.795 3.277-34.833 9.312-50.625 0.007-0.018-0.007-0.045 0-0.063l-49.687-86.063c-29.483 38.249-46.875 85.529-46.875 136.688 0 127.366 107.966 230.625 241.188 230.625zM656.125 473.162l-111.687-193.5c69.185 14.368 121 73.28 121 143.875 0 17.471-3.486 34.081-9.313 49.625z" />
<glyph unicode="&#xe6dc;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM325.938 859.125h372.125l-80-563.687h-212.125l-80 563.687zM514 257.062c60.81 0 110.125-49.314 110.125-110.125s-49.315-110.062-110.125-110.062c-60.81 0-110.125 49.252-110.125 110.062 0 60.81 49.315 110.125 110.125 110.125z" />
<glyph unicode="&#xe6dd;" d="M644.029 789.905c-55.784-0.001-101.737-16.233-137.859-48.697-36.123-32.008-59.442-78.647-69.958-139.917h276.405v-120.713h-286.693l-1.372-24.005v-32.236l1.372-22.634h243.483v-122.084h-231.823c23.319-111.111 96.707-166.666 220.163-166.666 65.385 0 128.257 13.031 188.614 39.094v-175.582c-53.041-26.977-120.027-40.466-200.959-40.466-112.025 0-204.16 30.407-276.405 91.22-72.245 60.813-117.741 144.946-136.488 252.399h-93.964v122.084h80.932c-1.829 10.516-2.744 24.691-2.743 42.524l1.372 36.351h-79.561v120.713h91.22c16.918 110.653 62.414 197.986 136.488 262.001 74.073 64.471 166.665 96.706 277.776 96.707 85.961-0.001 166.436-18.748 241.425-56.241l-67.215-159.121c-31.551 14.174-61.043 25.148-88.477 32.922-27.435 8.23-56.013 12.345-85.733 12.346" />
<glyph unicode="&#xe6de;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM168.375 585h687.25v-274h-687.25v274z" />
<glyph unicode="&#xe6df;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 820c205.45 0 372-166.55 372-372s-166.55-372-372-372c-205.45 0-372 166.55-372 372 0 205.45 166.55 372 372 372zM240.188 548.562v-201.125h543.625v201.125h-543.625z" />
<glyph unicode="&#xe6e0;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM250 646.062h524v-73.687l-262-149.375-262 149.375v73.687zM250 525.25l133.438-76.062-133.438-139.875v215.938zM774 525.25v-215.938l-133.438 139.875 133.438 76.062zM420.125 428.25l91.875-52.375 91.875 52.375 170.125-178.312h-524l170.125 178.312z" />
<glyph unicode="&#xe6e1;" d="M0 835v-143.938l512-291.938 512 291.938v143.938zM0 599v-422.062l260.812 273.375zM1024 599l-260.812-148.688 260.812-273.375zM332.438 409.438l-332.438-348.438h1024l-332.438 348.438-179.562-102.375z" />
<glyph unicode="&#xe6e2;" d="M512 849.063l-512-551.75h1024l-512 551.75zM0 200v-264h1024v264h-1024z" />
<glyph unicode="&#xe6e3;" d="M0 960v-1024h1024v661.938l-168-168v-325.938h-688v688h325.938l168 168h-661.938zM896 960l-65.562-65.562 128-128 65.562 65.562-128 128zM799.5 863.5l-375.25-375.25 128-128 375.25 375.25-128 128zM377.125 428.938c-1.898-0.029-3.834-0.167-5.75-0.313v-121.25h121.25c0 33.031-15.78 66.593-40.375 90.063-20.345 19.414-46.656 31.938-75.125 31.5z" />
<glyph unicode="&#xe6e4;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM512 885.82c111.546 0 213.347-41.715 290.659-110.395-56.8-74.931-143.124-124.814-229.577-158.606-47.143 86.224-105.172 177.131-164.247 256.778 33.079 7.989 67.631 12.223 103.165 12.223zM325.739 844.32c57.083-85.354 112.347-164.547 162.918-254.184-127.785-33.103-272.123-52.959-405.463-53.301 28.114 136.431 119.718 249.655 242.545 307.485zM851.226 724.815c61.064-74.744 97.892-170.043 98.561-273.929-101.259 19.946-201.973 25.207-304.535 14.881-11.553 28.75-25.492 56.050-38.873 85.495 88.412 35.658 182.906 96.692 244.847 173.552zM524.191 522.407c10.974-23.327 23.666-48.035 35.566-73.305-142.593-62.876-294.242-146.92-373.009-294.193-69.972 77.602-112.567 180.373-112.567 293.090 0 4.281 0.072 8.555 0.195 12.806 152.735 0.741 302.611 19.857 449.816 61.601zM948.328 411.558c-0.141-1.709-0.293-3.419-0.454-5.123 0.161 1.702 0.312 3.415 0.454 5.123zM755.55 403.032c63.662 0.198 129.385-8.696 188.823-24.316-19.44-122.291-89.527-227.707-188.077-294.095-23.511 106.886-45.91 209.151-85.495 312.284 27.301 4.070 55.813 6.038 84.75 6.128zM946.643 395.088c-0.299-2.478-0.6-4.959-0.94-7.425 0.341 2.472 0.64 4.94 0.94 7.425zM589.747 376.9c40.379-104.245 72.070-219.697 93.277-332.061-52.544-22.32-110.336-34.659-171.023-34.659-101.26 0-194.476 34.39-268.644 92.109 79.287 128.669 202.094 225.988 346.391 274.61z" />
<glyph unicode="&#xe6e5;" d="M0 74.653h1024v-138.653h-1024zM700.404 960h-376.807v-423.793h-235.505l423.908-394.78 423.908 394.78h-235.504z" />
<glyph unicode="&#xe6e6;" d="M512 960c-282.769 0-512-229.231-512-512s229.231-512 512-512c282.769 0 512 229.231 512 512 0 282.769-229.231 512-512 512zM512 47.304c-221.329 0-400.696 179.423-400.696 400.696s179.367 400.696 400.696 400.696c221.329 0 400.696-179.423 400.696-400.696 0-221.273-179.367-400.696-400.696-400.696zM612.174 662.261h-200.348v-227.617h-125.217l225.391-212.035 225.391 212.035h-125.217v227.617z" />
<glyph unicode="&#xe6e7;" d="M958.464 572.635h-64.366v-127.561h-381.513v127.561h-65.536v-195.438h65.536v-376.832h190.757v187.246h65.536v-187.246h124.050v376.832h65.536zM578.121 759.881v-250.441h250.441v250.441zM1024 633.49v-321.829h-65.536v-375.662h-511.415v375.662h-190.757v-124.050h60.855v-64.366h65.536v-187.246h-318.318v187.246h65.536v-122.88h187.246v122.88h-187.246v64.366h60.855v124.050h-126.391v65.536h317.147v256.293h131.072v191.927h381.513v-191.927zM317.148 633.49v60.855h64.366v-60.855zM64.366 633.49v-256.293h-64.366v256.293zM129.902 633.49h-65.536v60.855h65.536zM317.148 694.345h-187.246v65.536h187.246z" />
<glyph unicode="&#xe6e8;" d="M372.125 659.966h115.993v-423.626l-485.622-0.306c4.241 118.083 68.204 283.685 369.629 323.069l1.477-45.389c-137.027-20.193-184.618-101.21-208.247-201.727h211.813l-5.043 347.979zM541.793 472.391l-1.783-235.468 481.418 0.108c4.631 235.557-204.81 342.217-534.018 336.993v-47.25c145.966 3.778 328.717-1.634 378.894-213.072l-215.747 1.783v147.992c-38.632 11.279-71.916 11.475-108.765 8.915z" />
<glyph unicode="&#xe6e9;" d="M0 960v-512h512v512h-512zM512 448v-512h512v512h-512z" />
<glyph unicode="&#xe6ea;" d="M512 793.281c-282.77 0-512-229.23-512-512 0-62.8 11.312-122.969 32-178.562h140c-28.072 53.346-44 114.094-44 178.562 0 212.078 171.922 384 384 384 212.078 0 384-171.922 384-384 0-64.469-15.928-125.216-44-178.562h140c20.688 55.594 32 115.763 32 178.562 0 282.77-229.23 512-512 512zM512 592.219c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64zM320.062 529.531c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64zM703.937 529.531c-35.347 0-64-28.654-64-64 0-35.346 28.653-64 64-64 35.346 0 64 28.654 64 64 0 35.346-28.654 64-64 64zM512 403.906l-50.188-251v-50.188h100.375v50.188l-50.187 251z" />
<glyph unicode="&#xe6eb;" d="M0 919.75v-791.125l512-192.625 512 192.625v791.125zM245.188 605.688c73.071-1.139 123.908-37.881 124.375-111h-79.25c0.054 19.515-8.329 38.093-25.875 45.5-19.797 7.081-44.536 3.573-57.25-13.188-13.615-20.352-11.188-43.135-11.188-67.125-0.75-31.966 15.612-59.6 48.062-59.812 32.878 1.655 48.5 17.696 48.812 47.312h76.688c-1.841-78.533-54.963-108.995-124.375-109.312-87.666-0.532-133.351 61.206-134.062 133.875-0.516 87.635 61.441 133.037 134.062 133.75zM522.5 605.688c52.631 0.555 112.817-22.352 114.312-79.812v-4.375h-77.812v1.438c-0.481 18.869-17.61 26.177-33.375 26.25-11.426-0.292-33.976-2.75-34.312-16.875 2.877-22.327 58.333-26.396 75.562-30.625 40.025-8.504 75.91-31.198 77.062-73.375-1.297-68.279-56.702-90.030-113.875-90.25-67.925 0.486-127.182 16.813-127.688 92.062h78.5c-0.733-26.915 20.276-32.575 41.625-32.625 12.792 0.002 36.31 0.463 36.5 17.25-2.585 20.693-59.92 26.067-76.312 30.25-42.338 10.613-75.827 32.658-76.125 77.938 2.926 65.882 62.061 82.546 115.938 82.75zM794 605.688c56.403-0.473 114.25-21.812 114.25-84.188h-77.75c0.694 19.629-17.385 27.613-33.375 27.688-11.426-0.292-33.976-2.75-34.312-16.875 2.444-22.043 58.541-26.447 75.562-30.625 27.876-6.73 56.338-18.019 69.875-43.125 4.524-8.193 6.88-18.266 7.125-30.25-1.249-68.298-56.68-90.030-113.875-90.25-67.886 0.468-127.173 16.854-127.688 92.062h78.5c-0.424-17.19 8.758-28.79 24.438-31.5 14.188-1.332 53.487-6.067 53.75 16.125-3.090 21.025-59.644 25.996-76.312 30.25-42.379 10.621-75.827 32.615-76.125 77.938 2.937 65.927 61.993 82.546 115.938 82.75z" />
<glyph unicode="&#xe6ec;" d="M-1.733 787.053v-213.067h1027.467v213.067h-1027.467zM-1.733 476.627v-367.68h1027.467v367.68h-1027.467zM110.533 315.133h387.147v-116.853h-387.147v116.853z" />
<glyph unicode="&#xe6ed;" d="M149.961 85.961c199.948-199.948 524.129-199.948 724.077 0 199.948 199.948 199.948 524.129 0 724.077-199.948 199.948-524.129 199.948-724.077 0-199.948-199.948-199.948-524.129 0-724.077zM230.969 141.955l-24.97 24.97 222.827 364.248 364.248 222.827 24.97-24.97-222.827-364.248-364.248-222.827z" />
<glyph unicode="&#xe6ee;" d="M149.961 85.961c199.948-199.948 524.129-199.948 724.077 0 199.948 199.948 199.948 524.129 0 724.077-199.948 199.948-524.129 199.948-724.077 0-199.948-199.948-199.948-524.129 0-724.077zM199.945 135.945c-172.345 172.345-172.345 451.765 0 624.11s451.765 172.345 624.11 0c172.345-172.345 172.345-451.766 0-624.11-172.345-172.345-451.765-172.345-624.11 0zM249.884 162.638l339.721 207.757 207.757 339.721-23.246 23.246-339.721-207.757-207.757-339.721 23.246-23.246z" />
<glyph unicode="&#xe6ef;" d="M0 856.731v-622.304h180.108v-180.047l280.685 180.047h413.075v622.304h-873.869zM914.981 719.937v-78.308h30.711v-443.786h-151.049v-118.624l-184.88 118.624h-132.084l-122.050-78.308h231.070l286.253-183.534v183.534h151.049v600.402h-109.019z" />
<glyph unicode="&#xe6f0;" d="M0 876.187v-729.187h211v-211l328.938 211h484.062v729.187h-1024z" />
<glyph unicode="&#xe6f1;" d="M776.654 804.49l-14.433-69.165c-14.796-2.325-29.047-6.605-42.406-12.581l-49.686 50.197-56.584-45.791 38.702-59.138c-8.622-11.829-15.664-24.835-21.011-38.829l-70.698 0.319-7.6-72.422 69.165-14.433c2.323-14.788 6.61-28.926 12.581-42.278l-50.197-49.814 45.791-56.584 59.138 38.766c11.82-8.615 24.847-15.729 38.829-21.075l-0.319-70.634 72.422-7.6 14.369 69.165c14.8 2.322 29.043 6.542 42.406 12.517l49.75-50.197 56.584 45.855-38.766 59.074c8.622 11.825 15.727 24.839 21.075 38.829l70.634-0.255 7.6 72.422-69.165 14.306c-2.324 14.809-6.536 29.101-12.517 42.47l50.197 49.686-45.855 56.584-59.074-38.702c-11.835 8.628-24.891 15.725-38.893 21.075l0.319 70.634-72.358 7.6zM788.66 636.272c2.276-0.008 4.585-0.076 6.897-0.319 36.998-3.887 63.791-37.021 59.905-74.019-3.886-36.998-37.021-63.855-74.019-59.969-36.998 3.886-63.855 37.021-59.969 74.019 3.644 34.685 33.045 60.406 67.185 60.288zM268.996 630.332l-9.707-96.18c-19.802-5.278-38.558-13.077-55.881-23.119l-74.849 61.182-70.442-70.442 61.182-74.913c-10.042-17.329-17.843-36.074-23.119-55.881l-96.18-9.643v-99.628l96.18-9.707c5.275-19.791 13.085-38.502 23.119-55.817l-61.182-74.913 70.442-70.442 74.913 61.182c17.316-10.034 36.027-17.843 55.817-23.119l9.707-96.18h99.628l9.643 96.18c19.808 5.276 38.552 13.077 55.881 23.119l74.913-61.182 70.442 70.442-61.182 74.849c10.042 17.324 17.84 36.080 23.119 55.881l96.18 9.707v99.628l-96.18 9.643c-5.279 19.819-13.069 38.608-23.119 55.945l61.182 74.849-70.442 70.442-74.849-61.182c-17.337 10.050-36.126 17.84-55.945 23.119l-9.643 96.18h-99.628zM318.811 403.678c50.9 0 92.156-41.256 92.156-92.156 0-50.9-41.256-92.156-92.156-92.156-50.9 0-92.156 41.256-92.156 92.156 0 50.9 41.256 92.156 92.156 92.156zM741.784 280.612l-10.154-50.581c-10.399-1.701-20.372-4.824-29.761-9.196l-34.998 36.722-39.724-33.529 27.206-43.236c-6.060-8.654-11.058-18.181-14.817-28.42l-49.623 0.255-5.365-53.007 48.601-10.538c1.633-10.819 4.617-21.206 8.813-30.974l-35.253-36.403 32.188-41.384 41.576 28.356c8.307-6.303 17.443-11.48 27.27-15.391l-0.192-51.73 50.9-5.556 10.091 50.644c10.402 1.699 20.369 4.761 29.761 9.132l34.998-36.722 39.787 33.529-27.27 43.236c6.060 8.651 11.057 18.185 14.817 28.42l49.686-0.192 5.301 52.943-48.601 10.538c-1.633 10.834-4.61 21.257-8.813 31.038l35.253 36.339-32.188 41.448-41.512-28.356c-8.318 6.312-17.493 11.477-27.334 15.391l0.255 51.666-50.9 5.556zM750.214 157.609c1.6-0.007 3.228-0.078 4.854-0.255 26.003-2.843 44.818-27.090 42.087-54.157-2.732-27.067-25.983-46.718-51.986-43.875-26.003 2.843-44.882 27.090-42.15 54.157 2.561 25.375 23.201 44.217 47.196 44.13z" />
<glyph unicode="&#xe6f2;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512c282.77 0 512 229.23 512 512 0 282.77-229.23 512-512 512zM463.25 760h97.5l9.438-94.125c19.395-5.166 37.783-12.79 54.75-22.625l73.25 59.875 68.937-68.937-59.875-73.25c9.835-16.967 17.459-35.355 22.625-54.75l94.125-9.438v-97.5l-94.125-9.5c-5.166-19.379-12.798-37.734-22.625-54.688l59.875-73.25-68.937-68.937-73.313 59.875c-16.959-9.827-35.303-17.462-54.687-22.625l-9.438-94.125h-97.5l-9.5 94.125c-19.368 5.163-37.679 12.806-54.625 22.625l-73.313-59.875-68.937 68.937 59.875 73.313c-9.819 16.946-17.462 35.257-22.625 54.625l-94.125 9.5v97.5l94.125 9.438c5.163 19.384 12.798 37.728 22.625 54.687l-59.875 73.313 68.937 68.937 73.25-59.875c16.954 9.827 35.309 17.459 54.688 22.625l9.5 94.125zM512 538.188c-49.813 0-90.188-40.375-90.188-90.188s40.375-90.188 90.188-90.188c49.813 0 90.188 40.375 90.188 90.188 0 49.813-40.375 90.188-90.188 90.188z" />
<glyph unicode="&#xe6f3;" d="M432.021 960l-15.563-154.507c-31.799-8.476-61.939-20.993-89.758-37.118l-120.218 98.247-113.103-113.103 98.247-120.26c-16.125-27.828-28.73-57.95-37.202-89.758l-154.424-15.521v-160l154.507-15.521c8.472-31.781 21.006-61.91 37.118-89.717l-98.247-120.26 113.103-113.103 120.26 98.247c27.806-16.113 57.936-28.647 89.717-37.118l15.521-154.507h160l15.521 154.424c31.808 8.472 61.93 21.076 89.758 37.202l120.26-98.247 113.103 113.103-98.247 120.218c16.126 27.819 28.642 57.96 37.118 89.758l154.507 15.521v160l-154.424 15.521c-8.476 31.826-21.063 61.959-37.202 89.8l98.247 120.218-113.103 113.103-120.218-98.247c-27.841 16.138-57.974 28.725-89.8 37.202l-15.521 154.424h-159.958zM512 596.016c81.738 0 148.016-66.277 148.016-148.016 0-81.738-66.277-148.016-148.016-148.016-81.738 0-148.016 66.277-148.016 148.016 0 81.738 66.277 148.016 148.016 148.016z" />
<glyph unicode="&#xe6f4;" d="M512 960c-282.765 0-512-229.235-512-512s229.235-512 512-512c282.765 0 512 229.235 512 512 0 282.765-229.235 512-512 512zM516.562 693.813c96.12 2.097 191.324-76.622 218.875-180.006 109.378 10.772 170.565-134.824 86.499-208.688h-630.193c-81.058 137.754 18.949 321.075 165.185 285.508 43.967 71.56 101.953 101.929 159.619 103.187z" />
<glyph unicode="&#xe6f5;" d="M839.584 469.011c160.363 15.793 250.099-197.669 126.853-305.959h-923.976c-118.859 201.959 27.78 470.738 242.179 418.578 171.899 279.779 490.298 129.879 554.938-112.619z" />
<glyph unicode="&#xe6f6;" d="M1024 448c0-282.76-229.24-512-512-512s-512 229.24-512 512c0 282.76 229.24 512 512 512 282.76 0 512-229.24 512-512zM770.44 391.14l-258.44 387.68-258.44-387.68h139.25v-273.94h238.38v273.94h139.25z" />
<glyph unicode="&#xe6f7;" d="M512 960c-282.765 0-512-229.235-512-512s229.235-512 512-512c282.765 0 512 229.235 512 512 0 282.765-229.235 512-512 512zM455.127 706.437l387.682-258.437-387.682-258.437v139.245h-273.937v238.37h273.937v139.245z" />
<glyph unicode="&#xe6f8;" d="M512-64c282.76 0 512 229.24 512 512s-229.24 512-512 512c-282.76 0-512-229.24-512-512 0-282.76 229.24-512 512-512zM568.88 189.56l-387.7 258.44 387.7 258.44v-139.25h273.94v-238.38h-273.94v-139.25z" />
<glyph unicode="&#xe6f9;" d="M1024 448c0 282.76-229.24 512-512 512s-512-229.24-512-512c0-282.76 229.24-512 512-512 282.76 0 512 229.24 512 512zM770.44 504.88l-258.44-387.68-258.44 387.68h139.25v273.94h238.38v-273.94h139.25z" />
<glyph unicode="&#xe6fa;" d="M516.036 960c-115.52 0-209.179-94.137-209.179-210.286 0-116.151 93.665-210.321 209.179-210.321 115.52 0 209.143 94.165 209.143 210.321 0 116.151-93.624 210.286-209.143 210.286zM396.25 714.75h238.393c0-65.83-53.384-119.214-119.214-119.214-65.83 0-119.179 53.384-119.179 119.214zM351.643 506.25c-108.938-2.237-180.597-73.003-176.536-201.143l-0.214-369.107h125.393v331.643c1.085 29.035 43.726 39.206 49.214 0v-331.643h329.5v331.643c1.085 29.035 43.726 39.206 49.214 0v-331.643h120.893v369.107c-0.732 101.308-42.301 202.082-175.429 201.143h-322.036z" />
<glyph unicode="&#xe6fb;" d="M512.002 600.567l-512.002-511.96 152.508-152.607 359.494 359.545 359.494-359.545 152.505 152.607-511.998 511.96z" />
<glyph unicode="&#xe6fc;" d="M844.261 447.991l-512.001 512.009-152.52-152.508 359.481-359.501-359.481-359.481 152.51-152.51 511.991 511.991z" />
<glyph unicode="&#xe6fd;" d="M179.739 448.009l512.001-512.009 152.52 152.508-359.481 359.501 359.481 359.481-152.51 152.51-511.991-511.991z" />
<glyph unicode="&#xe6fe;" d="M512.005-64l511.995 511.995-152.519 152.499-359.476-359.476-359.496 359.476-152.509-152.509 511.985-511.985z" />
<glyph unicode="&#xe6ff;" d="M0 960v-1024h1024v1024h-1024zM168 792h688v-688h-688v688z" />
<glyph unicode="&#xe700;" d="M0 960v-1024h1024v661.94l-168-168v-325.94h-688v688h325.94l168 168zM878.94 947.062l-370.5-370.56-132.376 132.376-135.75-135.812 268.12-268.060 506.25 506.31-135.75 135.75z" />
<glyph unicode="&#xe701;" d="M834.756 49.712l-221.997 108.628-116.701-217.861-100.234 225.911-229.437-91.878 68.429 237.487-234.817 77.097 205.073 137.941-130.323 209.997 245.762-26.15 35.15 244.637 171.456-178.005 184.176 164.809 16.923-246.569 247.024 7.865-145.527-199.761 194.287-152.759-239.884-59.483z" />
<glyph unicode="&#xe702;" d="M512 875.067l-512-100v-654.133l512-100 512 100v654.133l-512 100zM325.84 647.6c79.393 0 148.005-46.376 180.16-113.493h-96.96c-21.545 20.826-50.866 33.68-83.2 33.68-66.138 0-119.733-53.622-119.733-119.76 0-66.138 53.596-119.733 119.733-119.733 32.312 0 61.632 12.771 83.173 33.573h96.96c-32.165-67.102-100.76-113.44-180.133-113.44-110.229 0-199.573 89.371-199.573 199.6 0 110.229 89.344 199.573 199.573 199.573zM717.6 647.6c79.393 0 147.978-46.376 180.133-113.493h-96.933c-21.545 20.826-50.866 33.68-83.2 33.68-66.138 0-119.76-53.622-119.76-119.76 0-66.138 53.622-119.733 119.76-119.733 32.312 0 61.579 12.771 83.12 33.573h96.987c-32.165-67.102-100.733-113.44-180.107-113.44-110.229 0-199.573 89.371-199.573 199.6 0 110.229 89.344 199.573 199.573 199.573z" />
<glyph unicode="&#xe703;" d="M0-64l512 853.327 512-853.327z" />
<glyph unicode="&#xe704;" d="M85.333 960l853.333-512-853.333-512z" />
<glyph unicode="&#xe705;" d="M938.673-64l-853.345 512 853.345 512z" />
<glyph unicode="&#xe706;" d="M0 745.972l512-809.972 512 809.972h-1024z" />
<glyph unicode="&#xe707;" d="M183.178 874.025l-64.828-269.996h-118.35v-78.043h40.595v-504.012h116.539v82.505h709.731v-82.505h116.477v504.012h40.658v78.043h-118.35l-64.828 269.996h-657.639zM217.716 821.528h588.555l52.212-217.504h-692.993l52.212 217.504zM74.315 459.971l162.509-60.014v-77.981l-162.509 60.014v77.981zM949.605 459.971v-77.981l-162.442-60.014v78.043l162.442 59.953zM354.844 255.97h314.192v-77.981h-314.192v77.981z" />
<glyph unicode="&#xe708;" d="M333.418 833.56l-32.218-129.56h-301.2v-641.56h1024v641.56h-287.16l-32.218 129.56h-371.2zM514.616 704.248c159.058 0 287.96-128.91 287.96-287.96 0-159.058-128.912-287.96-287.96-287.96-159.058 0-287.96 128.912-287.96 287.96 0 159.058 128.91 287.96 287.96 287.96zM852.296 641.56h145.17v-84.292h-145.17v84.292zM514.616 619.206c-112.074 0-202.92-90.854-202.92-202.92 0-112.074 90.854-202.92 202.92-202.92 112.074 0 202.92 90.854 202.92 202.92 0 112.074-90.854 202.92-202.92 202.92z" />
<glyph unicode="&#xe709;" d="M512 960c-282.765 0-512-229.235-512-512s229.235-512 512-512c282.765 0 512 229.235 512 512 0 282.765-229.235 512-512 512zM332.247 770.94h53.125v-101.188h-53.125v101.188zM638.622 770.94h53.063v-101.188h-53.063v101.188zM223.615 722.315h70.688v-90.499h129v90.499h177.316v-90.499h129.063v90.499h70.688v-141.682h-576.756v141.682zM223.615 543.441h576.756v-418.375h-576.756v418.375zM450.174 446.754c-40.523-0.208-78.747-20.957-79.749-67.5h46.188c0.212 18.46 11.503 30.135 32.062 31.375 19.3-0.25 27.431-14.429 28.312-34.313-0.231-27.033-31.388-31.036-54.063-30.563v-36.5c13.871-0.014 29.764 0.666 44-5.25 11.036-4.891 15.676-17.873 15.688-30.563-0.206-21.010-10.089-37.423-35.062-39.125-19.644 0.272-29.19 15.625-30.187 35.812h-46.938c0-47.95 26.584-71.937 79.749-71.937 18.853 0.129 38.090 7.172 54 19.75 14.963 12.258 24.888 31.014 25.375 52.188-0.182 30.869-20.091 49.864-50.313 57.75 16.103 5.65 32.528 14.412 40.624 31.25 6.467 14.596 3.695 31.322-1.5 47-11.046 26.246-38.829 40.335-68.187 40.624zM612.176 442.254c-15.901-15.404-36.028-27.809-60.375-37.25v-41c20.869 6.211 39.857 16.654 57 31.313v-192.682h44.75v239.621h-41.375z" />
<glyph unicode="&#xe70a;" d="M227.008 960v-160.443h84.259v160.443h-84.259zM712.733 960v-160.443h84.132v160.443h-84.132zM54.813 882.886v-224.62h914.375v224.62h-112.077v-143.489h-204.622v143.489h-281.102v-143.489h-204.496v143.489h-112.077zM54.813 599.29v-663.29h914.375v663.29h-914.375zM414.001 446.034c46.544-0.458 90.591-22.821 108.103-64.431 8.236-24.856 12.621-51.353 2.367-74.493-12.836-26.695-38.859-40.592-64.388-49.549 47.914-12.502 79.447-42.632 79.735-91.573-0.773-33.569-16.483-63.303-40.206-82.737-25.224-19.941-55.722-31.081-85.612-31.285-84.289 0-126.452 38.003-126.452 114.022h74.408c1.581-32.005 16.714-56.347 47.858-56.778 39.592 2.698 55.268 28.712 55.595 62.021-0.019 20.119-7.363 40.738-24.859 48.492-22.57 9.379-47.766 8.264-69.758 8.286v57.878c35.948-0.749 85.33 5.592 85.696 48.45-1.398 31.523-14.3 54.014-44.899 54.411-32.595-1.965-50.481-20.494-50.817-49.76h-73.224c1.59 73.79 62.206 106.716 126.452 107.046zM670.836 438.889h65.572v-379.904h-70.941v305.496c-27.179-23.239-57.261-39.787-90.347-49.634v64.98c38.6 14.968 70.507 34.64 95.716 59.061z" />
<glyph unicode="&#xe70b;" d="M878.945 877.303c-132.418-131.13-327.038-211.393-514.536-222.683h-278.437c-43.853-0.603-83.499-37.884-85.972-87.059v-125.552c0.598-43.835 36.752-84.584 85.93-87.059h111.634c-29.834-101.177 2.213-203.602 36.821-304.141 51.342-48.477 168.776-42.447 207.051 20.647-81.514 64.078-121.216 236.497-22.945 279.022 167.497-19.005 333.439-104.115 460.453-218.211 43.664 0.598 83.375 36.475 85.93 85.387v205.923c87.424 31.047 69.75 140.167 0 162.373v205.38c-0.583 43.831-36.756 83.455-85.93 85.93zM881.16 766.254v-523.48c-122.735 95.637-274.378 159.814-430.821 188.62v146.198c153.51 23.101 303.646 93.933 430.821 188.662z" />
<glyph unicode="&#xe70c;" d="M512 755.882c-135.488 0-245.322-82.274-245.322-183.781l139.368-422.096h211.907l139.368 422.109c0 101.505-109.826 183.781-245.322 183.781zM512 715.778c135.488 0 205.209-109.344 205.209-143.669l-99.258-294.764h-211.907l-99.258 294.764c0 42.351 69.721 143.669 205.209 143.669zM402.957 119.218v-73.372h218.086v73.373h-218.086zM402.957 9.372v-73.372h218.086v73.373h-218.086z" />
<glyph unicode="&#xe70d;" d="M987.82 959.989c-39.86-2.285-628.462-504.745-676.799-681.675l111.561-116.859c318.878 265.895 421.291 547.476 601.417 797.991l-36.166 0.554zM275.854 242.72c-201.538-74.117-75.195-220.767-275.854-292.514 227.237-51.16 327.933 42.452 387.416 175.293l-111.561 117.233z" />
<glyph unicode="&#xe70e;" d="M933.236 960l-349.625-349.624c-25.122 14.439-57.729 10.952-79.198-10.517-17.958-17.958-23.326-43.712-16.154-66.357-49.332 25.216-106.061 29.466-163.161 5.113-107.107-53.149-181.005-163.733-325.097-176.583 10.998-22.644 25.241-47.894 42.708-75.712 60.591-9.54 120.256 9.728 166.876 57.292-18.108-56.359-62.356-98.421-122.197-120.336 15.526-20.702 33.286-42.435 53.341-65.079 68.993 23.065 93.664 54.629 29.111-30.97 27.225-28.278 56.384-58.265 92.215-83.498 15.918 58.775 58.818 103.908 120.28 127.136-47.093-44.14-65.953-108.074-54.329-176.583 35.582-23.937 68.265-43.401 98.025-58.28 25.348 108.744 99.319 221.538 176.584 325.096 24.93 52.478 20.892 109.186-5.636 163.334 22.77-7.422 48.783-2.117 66.88 15.979 21.469 21.469 24.956 54.076 10.517 79.198l349.625 349.624-90.762 90.762z" />
<glyph unicode="&#xe70f;" d="M271.48 897.092v-142.715h-271.48v-415.891h461.84v85.352h100.319v-85.352h461.84v415.891h-271.524v142.715h-480.996zM345.256 823.316h333.444v-68.939h-333.444v68.939zM0 258.399v-259.491h1024v259.491h-461.84v-82.447h-100.319v82.447h-461.84z" />
<glyph unicode="&#xe710;" d="M435.372 63.162c0-70.23-56.932-127.162-127.161-127.162-70.23 0-127.162 56.932-127.162 127.162 0 70.23 56.932 127.161 127.162 127.161 70.23 0 127.161-56.932 127.161-127.161zM435.372 448c0-70.23-56.932-127.161-127.161-127.161-70.23 0-127.162 56.932-127.162 127.161 0 70.23 56.932 127.161 127.162 127.161 70.23 0 127.161-56.932 127.161-127.161zM435.372 832.839c0-70.23-56.932-127.161-127.161-127.161-70.23 0-127.162 56.932-127.162 127.161 0 70.23 56.932 127.161 127.162 127.161 70.23 0 127.161-56.932 127.161-127.161zM842.951 63.162c0-70.23-56.932-127.162-127.161-127.162-70.23 0-127.161 56.932-127.161 127.162 0 70.23 56.932 127.161 127.161 127.161 70.23 0 127.161-56.932 127.161-127.161zM842.951 448c0-70.23-56.932-127.161-127.161-127.161-70.23 0-127.161 56.932-127.161 127.161 0 70.23 56.932 127.161 127.161 127.161 70.23 0 127.161-56.932 127.161-127.161zM842.951 832.839c0-70.23-56.932-127.161-127.161-127.161-70.23 0-127.161 56.932-127.161 127.161 0 70.23 56.932 127.161 127.161 127.161 70.23 0 127.161-56.932 127.161-127.161z" />
<glyph unicode="&#xe711;" d="M199.991 960v-1024l312.009 312.009 312.009-312.009v1024h-624.018zM263.991 896h496.018v-800l-248.009 248.009-248.009-248.009v800z" />
<glyph unicode="&#xe712;" d="M200 960v-1024l312 312 312-312v1024h-624z" />
<glyph unicode="&#xe713;" d="M388.072 950.616c-65.032 34.23-193.2-31.91-230.018-90.138-16.402-26.055-15.243-44.832-15.243-55.486v-569.919l480.636-299.074 90.383 49.351v555.032l-493.486 283.335c26.481 33.328 86.039 73.97 130.696 57.647l439.556-235.091v-618.308l90.61 49.439v618.295z" />
<glyph unicode="&#xe714;" d="M0 960v-83.017h128.505v-858.008h-128.505v-82.975h558.421c160.118 0 277.647 23.979 352.555 71.99 75.353 48.011 113.023 122.784 113.024 224.291 0 74.987-26.905 135.122-80.731 180.39-53.826 45.268-131.199 72.705-232.124 82.309 83.431 9.144 146.222 31.54 188.387 67.204 42.613 35.664 63.918 83.914 63.919 144.728 0 84.592-30.726 147.895-92.175 189.961-61.453 42.066-153.406 63.125-275.86 63.126h-595.416zM387.553 876.983h88.139c79.39 0 137.022-13.471 172.907-40.447 36.33-26.976 54.514-70.182 54.515-129.623 0-58.985-18.617-102.898-55.846-131.704-37.232-28.349-94.424-42.529-171.575-42.528h-88.139v344.302zM387.553 450.372h96.212c84.775 0 148.005-18.059 189.719-54.179 41.714-36.124 62.587-90.754 62.588-163.912 0-72.705-20.656-126.456-61.922-161.207-41.266-34.751-104.711-52.099-190.385-52.099h-96.212v431.397z" />
<glyph unicode="&#xe715;" d="M0 960v-1024h1024v1024h-1024zM547.62 772.444c98.272-7.872 155.398-70.8 162.189-151.256 5.278-41.403 3.837-72.141-2.187-94.75 56.056-1.837 121.572-26.743 125.75-117.187v-89c-5.813-77.749-33.721-173.814-176.876-194.187l-239.568-0.875c-145.198-2.637-225.173 60.708-225.919 196.198l1.875 300.316c6.25 87.356 77.032 138.566 159.619 149.938l195.119 0.813zM384.433 650.944c-83.651-13.58-87.786-108.306 0-120h158.807c83.651 13.58 87.786 108.306 0 120h-158.807zM348.433 388.938c-86.117-13.255-87.457-120.813 3-131.938l291.687-1c85.385 13.142 85.144 120.559-3.063 131.938l-291.62 1z" />
<glyph unicode="&#xe716;" d="M328.8 960c-56.161 0-101.688-45.527-101.688-101.688s45.527-101.688 101.688-101.688c56.161 0 101.688 45.527 101.688 101.688 0 56.161-45.527 101.688-101.688 101.688zM244.297 704.244l-109.276-147.539c-4.371-5.827-6.55-11.992-6.55-18.548l-13.1-121.306c-5.912-52.923 69.771-65.151 78.667-7.653l10.928 112.552 28.406 38.231 1.103-158.435-53.535-192.289-136.58-173.741c-39.711-61.811 42.365-107.838 84.115-59.015l142.060 182.495c3.815 5.136 6.177 12.006 8.723 18.548l42.641 150.815 96.144-108.174 52.433-244.796c14.473-65.347 114.988-42.843 102.726 19.683l-55.699 254.596c-1.327 6.557-2.767 13.83-8.723 18.58l-118 134.408v166.089l45.883-57.913c5.1-6.556 12.76-11.289 22.958-14.203l108.174-20.754 400.993-527.771c7.161-9.957 27.423-0.036 19.683 13.1l-373.694 513.591c43.943 14.731 20.224 64.785-8.755 69.943l-115.826 22.926-119.102 149.713c-37.723 37.463-100.81 28.256-126.754-13.1z" />
<glyph unicode="&#xe717;" d="M444.868 960v-63.249c-139.605-30.627-244.228-154.731-244.867-303.378v-272.751l-201.564-174.306v-47.437h1027.127v47.437l-201.564 174.306v272.751c-0.642 148.646-105.271 272.751-244.881 303.378v63.249h-134.252zM511.992 85.687c-41.342 0-74.874-33.47-74.874-74.813 0-41.342 33.532-74.874 74.874-74.874 41.342 0 74.874 33.532 74.874 74.874 0 41.342-33.532 74.813-74.874 74.813z" />
<glyph unicode="&#xe718;" d="M0 960v-1024h1024v1024h-1024zM159.126 536.871h260.501c26.648-0.186 54.661-10.437 76.125-30.187 19.758-19.508 31.363-47.484 31.937-77.438-0.099-23.002-4.48-49.508-19.75-70.625-10.671-14.365-27.379-25.227-45.812-31.438v-2.438c19.412-4.855 38.548-15.226 52.188-32.375 16.223-20.979 21.772-49.277 22.25-77.125-0.194-29.544-10.422-61.183-33.313-84.624-20.347-19.99-49.561-31.432-80.313-32.062h-263.816v438.309zM615.625 535.996h193.748v-71.874h-193.748v71.874zM708.375 442.622c27.033 0 51.015-3.511 71.937-10.563 21.107-6.844 38.871-17.545 53.312-32.062 14.441-14.311 25.343-32.559 32.749-54.75 9.769-29.049 11.621-66.238 11.437-100.188h-225.253c0-23.228 4.617-41.266 13.875-54.124 9.443-12.651 24.897-18.938 46.374-18.938 20.405 0.096 44.308 6.639 52.188 29.563 2.036 6.014 3.062 12.406 3.062 19.25h109.75c-0.228-34.876-11.457-69.515-40.875-95.188-32.498-26.434-77.921-33.976-121.626-34.812-27.033 0-51.465 3.406-73.313 10.25-21.662 7.052-40.068 17.857-55.251 32.375-15.183 14.517-26.853 32.765-35 54.75-8.147 22.191-12.25 48.408-12.25 78.687 0 29.45 3.976 55.14 11.938 77.125 7.961 21.983 19.248 40.232 33.875 54.75 14.813 14.725 32.575 25.741 53.312 33 20.922 7.259 44.198 10.875 69.751 10.875zM284.687 440.747v-74.626h86.376c7.787 0.060 15.195 3.626 20.813 9.937 5.455 6.644 8.131 15.395 8.313 24.563v6.25c-0.057 8.272-3.236 16.817-8.625 23.937-4.898 5.785-12.243 9.52-20.5 9.938h-86.376zM712.809 361.747c-19.071 0-33.307-5.088-42.75-15.249-9.258-10.163-14.901-23.954-16.938-41.375h110.5c0 17.629-4.425 31.42-13.313 41.375-8.887 10.162-21.392 15.249-37.501 15.249zM284.687 275.559v-74.937h95.5c7.698 0.060 15.068 3.593 20.813 9.625 5.43 6.613 8.238 15.407 8.375 24.563v6.563c-0.049 8.347-2.755 17.054-8.375 24.25-4.932 5.818-12.569 9.465-20.813 9.937h-95.5z" />
<glyph unicode="&#xe719;" d="M0 874.778v-853.555h85.555v853.555h-85.555zM158.835 874.778v-853.555h20.557v853.555h-20.557zM208.229 874.778v-853.555h65.040v853.555h-65.040zM339.35 874.778v-853.555h27.756v853.555h-27.756zM440.427 874.778v-853.555h20.515v853.555h-20.515zM469.763 874.778v-853.555h85.014v853.555h-85.014zM605.795 874.778v-853.555h42.819v853.555h-42.819zM732.962 874.778v-853.555h9.488v853.555h-9.488zM807.74 874.778v-853.555h28.588v853.555h-28.588zM909.607 874.778v-853.555h20.557v853.555h-20.557zM938.986 874.778v-853.555h85.014v853.555h-85.014z" />
<glyph unicode="&#xe71a;" d="M874.037 810.037c-199.95 199.95-524.111 199.95-724.074 0-199.95-199.95-199.95-524.111 0-724.074 199.95-199.95 524.111-199.95 724.074 0 199.95 199.95 199.95 524.111 0 724.074zM734.527 761.022l-535.536-535.522c-106.886 149.963-93.051 359.487 41.492 494.030 134.543 134.543 344.081 148.378 494.030 41.492zM825.035 670.527c106.878-149.963 93.040-359.501-41.519-494.030-134.53-134.556-344.068-148.405-494.030-41.505l535.536 535.536z" />
<glyph unicode="&#xe71b;" d="M535.276 960v-465.461l465.447 465.461v-1024l-465.461 465.461v-465.461l-511.987 512z" />
<glyph unicode="&#xe71c;" d="M605.453 959.994c-0.467-0.010-0.934-0.033-1.397-0.053-27.618-1.232-55.222-27.084-60.566-78.222l-6.718-595.619c-4.428-106.86-121.242-142.531-175.624-82.873-64.032-82.963-174.686-16.907-182.422 77.928-12.055 71.594-24.56 143.216-35.791 214.883-2.17 22.885 2.058 46.494 13.435 67.929l-55.971 192.614c-19.644 58.164-109.732 62.182-99.608-21.146l120.863-676.941c10.388-55.641 41.441-118.287 110.786-122.492h370.434c30.589 0 53.9 5.954 69.943 17.831 137.762 103.833 113.178 318.294 302.076 400.038 44.333 26.723 71.074 110.080 25.285 143.825-75.635 67.94-270.81-53.395-304.763-175.718l-29.96 557.524c-1.992 52.966-29.883 80.057-58.604 80.494-0.463 0.007-0.93 0.010-1.397 0zM418.543 628.634c-2.257-0.023-4.486-0.153-6.718-0.374-29.591-2.939-56.068-23.509-56.293-65.416l23.512-263.885c1.993-44.975 36.748-76.85 68.654-76.644 27.87 0.179 53.575 24.837 53.338 86.669l-8.975 259.42c-4.011 38.692-39.656 60.571-73.517 60.23zM249.233 570.222c-4.010-0.054-7.988-0.503-11.904-1.337-28.405-6.043-52.545-32.647-46.298-80.654l38.048-227.126c10.234-37.517 35.6-51.439 58.9-46.623 26.34 5.445 50.042 34.834 46.298 81.136l-22.383 219.347c-5.882 36.971-34.59 55.633-62.662 55.258z" />
<glyph unicode="&#xe71d;" d="M511.993 960l-399.999-600.005h215.506v-423.995h369v423.995h215.506l-400.013 600.005z" />
<glyph unicode="&#xe71e;" d="M1024 448l-600 400v-215.5h-424v-369h424v-215.5l600 400z" />
<glyph unicode="&#xe71f;" d="M0 448l600-400v215.5h424v369h-424v215.5l-600-400z" />
<glyph unicode="&#xe720;" d="M512-64l-400 600h215.5v424h369v-424h215.5l-400-600z" />
<glyph unicode="&#xe721;" d="M496 875.348v-151.899h528v151.899h-528zM216 641.082v-151.899h808v151.899h-808zM400 406.817v-151.899h624v151.899h-624zM0 172.551v-151.899h1024v151.899h-1024z" />
<glyph unicode="&#xe722;" d="M528 875.348v-151.899h-528v151.899h528zM808 641.082v-151.899h-808v151.899h808zM624 406.817v-151.899h-624v151.899h624zM1024 172.551v-151.899h-1024v151.899h1024z" />
<glyph unicode="&#xe723;" d="M0 875.348v-151.899h1024v151.899h-1024zM0 641.082v-151.899h1024v151.899h-1024zM0 406.817v-151.899h1024v151.899h-1024zM0 172.551v-151.898h1024v151.898h-1024z" />
<glyph unicode="&#xe724;" d="M248 875.348v-151.899h528v151.899h-528zM108 641.082v-151.899h808v151.899h-808zM200 406.817v-151.899h624v151.899h-624zM0 172.551v-151.899h1024v151.899h-1024z" />
<glyph unicode="&#xe725;" d="M516.348 550.399c-115.664 1.79-204.017 94.769-204.8 204.8 1.911 114.631 95.605 203.996 204.8 204.8 115.765-4.378 203.977-92.988 204.8-204.8-2.276-114.721-95.493-204.023-204.8-204.8zM681.931 507.914c145.572-1.699 219.387-129.392 220.059-257.082v-314.832h-142.708v276.696c-3.475 19.128-16.431 25.616-28.3 23.74-11.112-1.755-21.272-10.839-21.81-23.74v-276.696h-396.52v276.696c-3.035 18.205-14.616 25.206-25.882 24.499-12.065-0.758-23.768-10.355-24.228-24.499v-276.696h-140.529v314.832c-0.836 136.084 85.25 256.074 221.13 257.082z" />
<glyph unicode="&#xe726;" d="M89.013 960v-597.2h-89.013v-216.8h313.413v216.8h-89.013v597.2h-135.387zM444.373 960v-385.493h-89.093v-216.8h313.44v216.8h-89.040v385.493h-135.307zM799.6 960v-172.053h-89.013v-216.8h313.413v216.8h-89.013v172.053h-135.387zM756 744.933h222.587v-43.040h-222.587v43.040zM799.6 534.933v-598.933h135.387v598.933h-135.387zM400.72 531.493h222.56v-43.040h-222.56v43.040zM444.373 323.253v-387.253h135.307v387.253h-135.307zM45.413 319.813h222.587v-43.040h-222.587v43.040zM89.040 109.813v-173.813h135.387v173.813h-135.387z" />
<glyph unicode="&#xe727;" d="M512 960c-282.76 0-512-229.24-512-512s229.24-512 512-512c282.76 0 512 229.24 512 512 0 282.76-229.24 512-512 512zM512 810.688v-725.44c-200.32 0-362.76 162.42-362.76 362.76 0 200.32 162.42 362.68 362.76 362.68z" />
<glyph unicode="&#xe728;" d="M512 960c-282.765 0-512-229.235-512-512s229.235-512 512-512c282.765 0 512 229.235 512 512 0 282.765-229.235 512-512 512zM225.013 734.987h573.973v-101.6h-62.48v-55.893h62.48v-101.547h-62.48v-55.893h62.48v-101.547h-62.48v-55.893h62.48v-101.627h-573.973zM480.747 634.747c-45.818 0-82.933-37.169-82.933-82.987 0-32.47 18.638-60.562 45.813-74.187l-106.187-63.573h-1.307v-89.68h289.227v89.68h-1.307l-106.187 63.573c27.175 13.625 45.813 41.717 45.813 74.187 0 45.818-37.116 82.987-82.933 82.987z" />
<glyph unicode="&#xe729;" d="M0.007 959.987v-1023.987h1023.993v181.278h-111.5v99.696h111.5v181.211h-111.5v99.696h111.5v181.131h-111.5v99.696h111.5l-0.014 181.291h-1023.986zM456.254 781.163c81.736 0 147.945-66.287 147.945-148.025 0-57.925-33.253-108.053-81.732-132.36l189.451-113.431h2.301v-159.976h-516.007v159.976h2.375l189.371 113.431c-48.479 24.306-81.732 74.435-81.732 132.36 0 81.736 66.287 148.025 148.025 148.025z" />
<glyph unicode="&#xe72a;" d="M417.995 934.951v-378.541l-359.941 116.96-58.054-178.68 359.961-116.98-222.5-306.241 152.080-110.42 222.5 306.181 222.44-306.181 152.018 110.42-222.52 306.161 360.021 116.98-58.054 178.69-360.021-116.966v378.541h-187.928z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 174 KiB

View File

@ -0,0 +1,537 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2015-9-18: Created with FontForge (http://fontforge.org)
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015
By Joen Asmussen
Copyright (c) 2015, Joen Asmussen
</metadata>
<defs>
<font id="Genericons" horiz-adv-x="2048" >
<font-face
font-family="Genericons"
font-weight="400"
font-stretch="normal"
units-per-em="2048"
panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="2048"
descent="0"
bbox="-0.0140489 0 2048.01 2048"
underline-thickness="102.4"
underline-position="-204.8"
unicode-range="U+0020-F517"
/>
<missing-glyph />
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
/>
<glyph glyph-name="uniF413" unicode="&#xf413;"
d="M256 1280c565.504 0 1024 -458.496 1024 -1024h-256c0 423.552 -344.448 768 -768 768v256zM256 1792c848.256 0 1536 -687.744 1536 -1536h-256c0 705.792 -574.208 1280 -1280 1280v256zM448 640c106.112 0 192 -86.0156 192 -192s-85.8877 -192 -192 -192
s-192 86.0156 -192 192s85.8877 192 192 192z" />
<glyph glyph-name="uniF462" unicode="&#xf462;"
d="M618.502 1337l-213.004 142.004l-303.335 -455.002l303.335 -455.002l213.004 142.004l-208.665 312.998zM1642.5 1479l-213.004 -142.004l208.665 -312.998l-208.665 -312.998l213.004 -142.004l303.335 455.002zM771.821 543.045l248.357 -62.0898l256 1024
l-248.357 62.0898z" />
<glyph glyph-name="uniF457" unicode="&#xf457;"
d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768c-424.192 0 -768 343.936 -768 768s343.808 768 768 768zM1024 512c70.6562 0 128 57.4717 128 128s-57.3438 128 -128 128c-70.7842 0 -128 -57.4717 -128 -128s57.2158 -128 128 -128z
M1342.72 1155.84c24.832 38.9121 37.248 85.1201 37.1201 138.752c0 74.4961 -27.6475 133.504 -83.7119 176.641c-55.9355 43.2637 -133.632 64.7676 -231.936 64.7676c-119.809 0 -234.496 -31.2324 -344.32 -93.9521l91.9043 -180.096
c89.2158 47.2314 167.168 70.9121 233.983 70.9121c26.752 0 48.5127 -5.37598 65.2803 -16.2559c17.2803 -10.752 25.4717 -25.4727 25.4717 -44.0322c0 -23.2959 -8.06348 -44.0322 -23.5518 -62.208c-16 -18.0479 -41.4717 -38.4004 -77.1836 -60.9277
c-45.1846 -28.1602 -76.416 -57.0889 -94.3359 -87.04c-17.5361 -29.6963 -26.3682 -66.4326 -26.3682 -109.44v-56.96h203.647v34.0479c0 18.6885 5.50391 35.2002 17.2803 48.8965c12.0322 14.0801 40.96 36.0957 86.9121 66.0479
c55.04 34.8154 94.5918 71.6797 119.808 110.848z" />
<glyph glyph-name="uniF403" unicode="&#xf403;"
d="M1541.38 1530.62l506.624 -506.624l-506.624 -506.624c-131.456 -134.272 -314.752 -217.728 -517.376 -217.728c-202.752 0 -386.048 83.4551 -517.504 217.983l-506.496 506.368v0l506.496 506.496c131.456 134.4 314.624 217.984 517.504 217.984
c202.752 0 385.92 -83.584 517.376 -217.856zM1404.42 651.776l372.096 372.224l-370.943 370.944c-102.528 104.704 -237.568 161.536 -381.568 161.536c-144.128 0 -279.168 -56.9609 -380.288 -160.385l-372.096 -372.096l370.688 -370.56
c102.528 -104.96 237.696 -161.792 381.824 -161.792c144 0 279.168 56.832 380.288 160.128zM1408 1024zM640 1024c0 212.096 172.032 384 384 384s384 -171.904 384 -384c0 -211.968 -172.032 -384 -384 -384s-384 172.032 -384 384zM768 1152
c0 -70.6562 57.2158 -128 128 -128c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128c-70.7842 0 -128 -57.3438 -128 -128z" />
<glyph glyph-name="uniF505" unicode="&#xf505;"
d="M256 1408v256h256v-256h-256zM768 1664h1024v-256h-1024v256zM256 896v256h256v-256h-256zM1408 1152v-256h-640v256h640zM256 384v256h256v-256h-256zM768 384v256h896v-256h-896z" />
<glyph glyph-name="uniF50F" unicode="&#xf50f;"
d="M1920 1024l-384 -384v256h-384v-384h256l-384 -384l-384 384h256v384h-384v-256l-384 384l384 384v-256h384v384h-256l384 384l384 -384h-256v-384h384v256z" />
<glyph glyph-name="uniF307" unicode="&#xf307;"
d="M768 640v128h128v-128h-128zM768 896v128h128v-128h-128zM768 1152v128h128v-128h-128zM512 640v128h128v-128h-128zM512 896v128h128v-128h-128zM1280 896v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1280 1152v128h128v-128h-128zM1408 1664h256v-1280h-1408
v1280h256v128h128v-128h640v128h128v-128zM1536 640v640c0 70.7842 -57.2158 128 -128 128h-896c-70.6562 0 -128 -57.2158 -128 -128v-640c0 -70.7842 57.3438 -128 128 -128h896c70.7842 0 128 57.2158 128 128zM1024 896v128h128v-128h-128zM1024 640v128h128v-128h-128z
" />
<glyph glyph-name="uniF460" unicode="&#xf460;"
d="M1664 1280h128l-256 -768h-768l256 768h128l86.2725 256h339.455zM1300.86 1280h214.271l-43.1357 128h-128zM809.728 1536l86.2725 -256l-256 -768h-128l-256 768h128l86.2725 256h339.455zM532.864 1280h214.271l-43.1357 128h-128z" />
<glyph glyph-name="uniF430" unicode="&#xf430;"
d="M1024 1453.31l86.6562 -86.6553l-342.656 -342.656h896v-128h-896l342.656 -342.656l-86.6562 -86.6553l-493.312 493.312z" />
<glyph glyph-name="uniF515" unicode="&#xf515;"
d="M1024 1920c499.2 0 896 -396.8 896 -896s-396.8 -896 -896 -896s-896 396.8 -896 896s396.8 896 896 896zM1382.4 601.6c38.3994 0 64 25.6006 64 51.2002c0 38.4004 -12.8008 51.2002 -38.4004 64c-153.6 89.6006 -332.8 140.8 -524.8 140.8
c-115.2 0 -217.601 -25.5996 -320 -51.1992c-25.6006 -12.8008 -51.2002 -25.6006 -51.2002 -64c0 -25.6006 12.7998 -51.2002 51.2002 -51.2002c0 0 25.5996 12.7998 38.3994 12.7998c89.6006 12.7998 192 25.5996 281.601 25.5996
c166.399 0 332.8 -38.3994 460.8 -115.199c12.7998 -12.8008 25.5996 -12.8008 38.4004 -12.8008zM1484.8 832c38.4004 0 64 38.4004 64 76.7998c0 38.4004 -12.7998 64 -38.3994 76.7998c-179.2 102.4 -409.601 166.4 -640 166.4c-153.601 0 -256 -25.5996 -358.4 -51.2002
c-38.4004 -12.7998 -51.2002 -38.3994 -51.2002 -76.7998s38.4004 -76.7998 76.7998 -89.5996c12.8008 0 25.6006 12.7998 38.4004 12.7998c76.7998 25.5996 179.2 38.3994 294.4 38.3994c217.6 0 422.399 -51.1992 563.199 -140.8
c25.6006 0 25.6006 -12.7998 51.2002 -12.7998zM1600 1113.6c38.4004 0 76.7998 38.4004 76.7998 89.6006c0 38.3994 -25.5996 64 -51.2002 76.7998c-204.8 128 -473.6 179.2 -742.399 179.2c-153.601 0 -294.4 -12.7998 -422.4 -51.2002
c-38.3994 -12.7998 -64 -38.4004 -64 -89.5996c0 -51.2002 38.4004 -89.6006 89.6006 -89.6006c25.5996 0 38.3994 12.7998 51.1992 12.7998c115.2 25.6006 230.4 38.4004 358.4 38.4004c243.2 0 486.4 -51.2002 652.8 -153.6
c25.6006 -12.8008 38.4004 -12.8008 51.2002 -12.8008z" />
<glyph glyph-name="uniF448" unicode="&#xf448;"
d="M512 384v1280h384v-1280h-384zM1152 1664h384v-1280h-384v1280z" />
<glyph glyph-name="uniF453" unicode="&#xf453;"
d="M1536 2048c141.312 0 256 -114.688 256 -256v-1536c0 -141.312 -114.688 -256 -256 -256h-1024c-141.312 0 -256 114.688 -256 256v1536c0 141.312 114.688 256 256 256h1024zM1024 128c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128
c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1536 512v1280h-1024v-1280h1024z" />
<glyph glyph-name="uniF419" unicode="&#xf419;"
d="M0 256v256h2048v-256h-2048zM0 1792h2048v-256h-2048v256zM0 896v256h2048v-256h-2048z" />
<glyph glyph-name="uniF423" unicode="&#xf423;"
d="M567.936 1440.9l-267.136 -480.896h403.2v-384h-128v256h-492.8l372.864 671.104zM1644.8 960h403.2v-384h-128v256h-492.8l372.864 671.104l112 -62.207zM1088 1344c176.768 0 320 -143.232 320 -320s-143.232 -320 -320 -320s-320 143.232 -320 320
s143.232 320 320 320zM1088 832c105.856 0 192 86.1436 192 192s-86.1436 192 -192 192s-192 -86.1436 -192 -192s86.1436 -192 192 -192z" />
<glyph glyph-name="uniF512" unicode="&#xf512;"
d="M1920 1280l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496l212.991 636.032l-555.264 387.968h685.312l210.688 640l210.688 -640h685.312z" />
<glyph glyph-name="uniF417" unicode="&#xf417;"
d="M960 1792c318.08 0 576 -257.92 576 -576c0 -159.232 -64.6396 -303.36 -169.088 -407.68l-406.912 -407.04l-406.912 407.04c-104.448 104.319 -169.088 248.447 -169.088 407.68c0 318.08 257.92 576 576 576zM960 896c176.64 0 320 143.36 320 320
s-143.36 320 -320 320c-176.768 0 -320 -143.36 -320 -320s143.232 -320 320 -320z" />
<glyph glyph-name="uniF410" unicode="&#xf410;"
d="M256 1536h1536v-128l-768 -384l-768 384v128zM256 1216l768 -384l768 384v-704h-1536v704z" />
<glyph glyph-name="uniF449" unicode="&#xf449;"
d="M512 512v1024h1024v-1024h-1024z" />
<glyph glyph-name="uniF467" unicode="&#xf467;"
d="M1280 1280c282.752 0 512 -229.248 512 -512v-299.904l-150.016 149.889c-99.9688 99.9678 -231.04 150.016 -361.984 150.016h-256v-384l-640 640l640 640v-384h256z" />
<glyph glyph-name="uniF224" unicode="&#xf224;"
d="M1536 1792c141.312 0 256 -114.688 256 -256v-384c0 -424.064 -343.936 -768 -768 -768s-768 343.936 -768 768v384c0 141.312 114.688 256 256 256h1024zM1498.5 1189.5c50.0479 50.0479 50.0479 131.072 0 180.992c-50.0479 50.0479 -130.944 50.0479 -180.992 0
l-293.504 -293.504l-293.504 293.504c-50.0479 50.0479 -131.072 50.0479 -180.992 0c-50.0479 -49.9199 -50.0479 -130.944 0 -180.992l361.984 -361.984l4.22363 4.22461c22.4004 -37.376 61.5684 -63.7441 108.288 -63.7441s85.8877 26.3682 108.288 63.7441
l4.22363 -4.22461z" />
<glyph glyph-name="uniF203" unicode="&#xf203;"
d="M1664 1920c141.312 0 256 -114.688 256 -256v-1280c0 -141.312 -114.688 -256 -256 -256h-281.856v711.168h269.44l12.416 259.456h-281.984v192.384v0.255859v12.0322c0 71.2959 15.2324 114.432 108.544 114.432c86.6562 0 166.017 -0.639648 166.017 -0.639648
l5.8877 242.304s-77.6963 9.98438 -182.528 9.98438c-259.584 0 -372.096 -159.872 -372.096 -333.952v-236.8h-254.336v-259.328h254.336v-711.296h-723.84c-141.312 0 -256 114.688 -256 256v1280c0 141.312 114.688 256 256 256h1280z" />
<glyph glyph-name="uniF502" unicode="&#xf502;"
d="M128 2048h1920l-960 -960z" />
<glyph glyph-name="uniF412" unicode="&#xf412;"
d="M1920 832l-640 -640v448h-1024v704l384 384v-704h640v448z" />
<glyph glyph-name="uniF440" unicode="&#xf440;"
d="M1152 640v-256h256l-384 -384l-384 384h256v256h256zM1664 1024c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256h-384v256h-512v-256h-384c-141.312 0 -256 114.688 -256 256s114.688 256 256 256h6.40039c-4.09668 20.7363 -6.40039 42.1123 -6.40039 64
c0 176.768 143.232 320 320 320c89.3438 0 169.984 -36.7363 227.968 -95.8721c60.7998 131.84 193.408 223.872 348.032 223.872c211.968 0 384 -171.904 384 -384c0 -45.1836 -9.21582 -87.8076 -23.5518 -128h23.5518z" />
<glyph glyph-name="uniF305" unicode="&#xf305;"
d="M1408 1664h256v-1280h-1408v1280h256v128h128v-128h640v128h128v-128zM1536 640v640c0 70.7842 -57.2158 128 -128 128h-896c-70.6562 0 -128 -57.2158 -128 -128v-640c0 -70.7842 57.3438 -128 128 -128h896c70.7842 0 128 57.2158 128 128zM960 1280
c35.3281 0 64 -28.6719 64 -64v-512c0 -35.3281 -28.6719 -64 -64 -64s-64 28.6719 -64 64v448h-64c-35.3281 0 -64 28.6719 -64 64s28.6719 64 64 64h128z" />
<glyph glyph-name="uniF443" unicode="&#xf443;"
d="M1152 1664l384 -384v-121.472v-6.52832v-768h-1024v1280h512h128zM1408 512v640h-256h-128v128v256h-384v-1024h768z" />
<glyph glyph-name="uniF411" unicode="&#xf411;"
d="M1280 1728l448 -448l-896 -896h-448v448zM1280 1536l-594.688 -594.688l96 -96l594.688 594.688zM768 512l128 128l-96 96v0l-64 64v0l-96 96l-128 -128zM845.312 781.312l96 -96l594.688 594.688l-96 96z" />
<glyph glyph-name="uniF402" unicode="&#xf402;"
d="M896 1536v-256h256v-128h-256v-256h-128v256h-256v128h256v256h128zM1297.15 878.848l494.848 -494.848l-128 -128l-494.848 494.848c-94.8486 -68.9912 -210.816 -110.848 -337.152 -110.848c-318.08 0 -576 257.92 -576 576s257.92 576 576 576s576 -257.92 576 -576
c0 -126.336 -41.8564 -242.304 -110.848 -337.152zM832 768c247.552 0 448 200.576 448 448s-200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448s200.576 -448 448 -448z" />
<glyph glyph-name="uniF420" unicode="&#xf420;"
d="M483.2 1564.8l-227.2 227.2h640v-640l-232.32 232.32c-93.0557 -92.1602 -151.68 -218.88 -151.68 -360.32c0 -238.208 163.584 -436.736 384 -493.824v-262.656c-363.008 61.0566 -640 376.064 -640 756.48c0 212.096 88.0645 402.048 227.2 540.8zM1792 1024
c0 -212.096 -88.0645 -401.92 -227.2 -540.8l227.2 -227.2h-640v640l18.5596 -18.5596l213.761 -213.761c93.0557 92.1602 151.68 218.88 151.68 360.32c0 238.208 -163.584 436.736 -384 493.824v262.656c363.008 -61.0566 640 -376.064 640 -756.48z" />
<glyph glyph-name="uniF425" unicode="&#xf425;"
d="M704 1024c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64s-64 28.6719 -64 64s28.6719 64 64 64zM704 1280c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64s-64 28.6719 -64 64s28.6719 64 64 64zM704 768c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64
s-64 28.6719 -64 64s28.6719 64 64 64zM896 896v128h384v-128h-384zM896 640v128h384v-128h-384zM1280 1664h256v-1280h-1152v1280h256c0 70.7842 57.3438 128 128 128h384c70.7842 0 128 -57.2158 128 -128zM832 1664c-35.3281 0 -64 -28.6719 -64 -64s28.6719 -64 64 -64
h256c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64h-256zM1408 512v1024h-128v-128h-640v128h-128v-1024h896zM896 1152v128h384v-128h-384z" />
<glyph glyph-name="uniF508" unicode="&#xf508;"
d="M1450.5 1395.2c45.6963 -69.376 124.288 -115.2 213.504 -115.2c5.50391 0 10.4961 1.28027 15.8721 1.66406l-399.872 -799.872l-256 512l-256 -512l-128 256l-256 -512l-299.776 599.424l228.992 114.561l70.7842 -141.568l256 512l128 -256l256 512l256 -512z
M1664 1728c106.112 0 192 -86.0156 192 -192s-85.8877 -192 -192 -192s-192 86.0156 -192 192s85.8877 192 192 192z" />
<glyph glyph-name="uniF507" unicode="&#xf507;"
d="M1792 604.544c76.2881 -44.416 128 -126.08 128 -220.544c0 -141.312 -114.688 -256 -256 -256s-256 114.688 -256 256c0 94.5918 51.7119 176.128 128 220.544v163.456c0 70.7842 -57.2158 128 -128 128h-256v-291.456c76.2881 -44.416 128 -126.08 128 -220.544
c0 -141.312 -114.688 -256 -256 -256s-256 114.688 -256 256c0 94.4639 51.8398 176.128 128 220.544v291.456h-256c-70.6562 0 -128 -57.2158 -128 -128v-163.456c76.1602 -44.416 128 -126.08 128 -220.544c0 -141.312 -114.688 -256 -256 -256s-256 114.688 -256 256
c0 94.4639 51.8398 176.128 128 220.544v163.456c0 212.096 171.904 384 384 384h256v291.456c-76.1602 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256c0 -94.4639 -51.7119 -176.128 -128 -220.544v-291.456h256
c211.968 0 384 -171.904 384 -384v-163.456zM1024 1792c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128s128 57.3438 128 128s-57.3438 128 -128 128zM384 256c70.6562 0 128 57.2158 128 128s-57.3438 128 -128 128s-128 -57.2158 -128 -128
s57.3438 -128 128 -128zM1024 256c70.6562 0 128 57.2158 128 128s-57.3438 128 -128 128s-128 -57.2158 -128 -128s57.3438 -128 128 -128zM1664 256c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128s-128 -57.2158 -128 -128s57.2158 -128 128 -128z" />
<glyph glyph-name="uniF306" unicode="&#xf306;"
d="M1151.87 1219.46c0.12793 -0.511719 0.12793 -0.896484 0.12793 -1.4082v-1.79199v-0.255859c0 -5.12012 -0.639648 -10.3682 -1.91992 -15.4883l-128 -512c-8.57617 -34.1758 -43.2637 -55.04 -77.5684 -46.5918c-34.3037 8.57617 -55.168 43.2637 -46.5918 77.5684
l108.16 432.512h-174.08c-35.3281 0 -64 28.6719 -64 64s28.6719 64 64 64h256h1.53613h1.28027c1.02344 -0.12793 1.91992 -0.12793 2.81543 -0.255859h0.255859c30.3359 -2.68848 54.5283 -26.624 57.8564 -56.96v0c0 -0.768555 0.12793 -1.4082 0.12793 -2.04785
v-1.28027zM1408 1664h256v-1280h-1408v1280h256v128h128v-128h640v128h128v-128zM1536 640v640c0 70.7842 -57.2158 128 -128 128h-896c-70.6562 0 -128 -57.2158 -128 -128v-640c0 -70.7842 57.3438 -128 128 -128h896c70.7842 0 128 57.2158 128 128z" />
<glyph glyph-name="uniF406" unicode="&#xf406;"
d="M2048 1920l-832 -832l832 -832l-128 -128l-832 832l-832 -832l-128 128l832 832l-832 832l128 128l832 -832l832 832z" />
<glyph glyph-name="uniF215" unicode="&#xf215;"
d="M1664 1920c141.312 0 256 -114.688 256 -256v-1280c0 -141.312 -114.688 -256 -256 -256h-1280c-141.312 0 -256 114.688 -256 256v1280c0 141.312 114.688 256 256 256h1280zM1024 1408c-212.096 0 -384 -171.904 -384 -384c0 -211.968 171.904 -384 384 -384
c211.968 0 384 172.032 384 384c0 212.096 -172.032 384 -384 384zM1792 384v768h-274.176c10.624 -41.0879 18.1758 -83.4561 18.1758 -128c0 -282.752 -229.248 -512 -512 -512s-512 229.248 -512 512c0 44.5439 7.42383 86.9121 18.1758 128h-274.176v-768
c0 -70.7842 57.3438 -128 128 -128h1280c70.7842 0 128 57.2158 128 128zM1792 1536v128c0 70.6562 -57.2158 128 -128 128h-128c-70.7842 0 -128 -57.3438 -128 -128v-128c0 -70.6562 57.2158 -128 128 -128h128c70.7842 0 128 57.3438 128 128z" />
<glyph glyph-name="uniF202" unicode="&#xf202;"
d="M1920 1583.74c-49.2803 -73.7285 -111.744 -138.368 -183.552 -190.208c0.767578 -15.7441 1.2793 -31.6162 1.2793 -47.4883c0 -485.76 -369.92 -1046.02 -1046.27 -1046.02c-207.616 0 -400.768 60.7998 -563.456 165.248
c28.7998 -3.45605 58.1123 -5.24805 87.8076 -5.24805c172.032 0 330.752 58.752 456.448 157.439c-160.768 2.81641 -296.576 108.929 -343.424 255.104c22.5283 -3.96777 45.4404 -6.52832 69.248 -6.52832c33.5361 0 65.9199 4.48047 96.7676 12.7998
c-168.319 33.792 -294.912 182.272 -294.912 360.448v4.73633c49.6641 -27.5205 106.368 -44.0322 166.528 -45.9521c-98.6875 65.9199 -163.456 178.432 -163.456 305.92c0 67.3281 18.1758 130.688 49.792 184.96c181.376 -222.464 452.353 -368.768 757.889 -384.128
c-6.27246 26.8799 -9.60059 54.9121 -9.60059 83.7119c0 203.008 164.608 367.616 367.616 367.616c105.855 0 201.472 -44.6719 268.544 -116.096c83.584 16.5117 162.304 47.1035 233.216 89.2158c-27.3916 -85.8887 -85.7598 -157.952 -161.536 -203.393
c74.3682 8.83203 145.152 28.5439 211.072 57.8564z" />
<glyph glyph-name="uniF222" unicode="&#xf222;"
d="M1223.94 775.936c20.0967 20.0967 52.0967 19.9688 72.0645 0c19.9678 -19.9678 19.9678 -52.9912 0 -72.96c-56.96 -56.96 -145.92 -86.0156 -270.976 -86.0156c-126.977 0 -216.064 29.0557 -273.024 86.0156c-19.9678 19.9688 -19.9678 52.9922 0 72.96
c19.9678 19.9688 51.9678 19.9688 71.9355 0c38.0166 -38.0156 103.04 -56.0635 199.04 -56.0635c97.9209 0 162.944 18.0479 200.96 56.0635zM894.976 982.016c0 -61.0557 -49.9199 -112 -112 -112c-60.9277 0 -110.976 50.9443 -110.976 112
c0 61.9521 49.9199 112 110.976 112c61.9521 0 112 -50.0479 112 -112zM1265.02 1094.02c61.9512 0 112 -50.0479 112 -112c0 -61.0557 -50.0488 -112 -112 -112c-61.9521 0 -112 50.9443 -112 112c0 61.9521 50.0479 112 112 112zM1698.05 1089.02
c24.96 17.9199 43.0078 45.9512 43.1357 78.9756c0 54.0156 -44.0312 98.0479 -98.0479 98.0479c-32 0 -57.9834 -16 -76.0322 -39.04c53.8887 -39.9355 98.9443 -87.04 130.944 -137.983zM1021.06 500.992c347.904 0 631.937 177.023 632.064 393.983
c0 219.009 -284.032 396.032 -632.064 396.032c-349.056 0 -632.96 -177.023 -632.96 -395.008s283.904 -395.008 632.96 -395.008zM306.944 1168c0 -30.9756 16 -57.9844 39.9355 -74.8799c32 50.9443 76.9277 97.0234 131.968 136.96
c-17.9199 22.0156 -43.0078 35.9678 -72.96 35.9678c-54.9121 0 -98.9434 -44.0322 -98.9434 -98.0479zM1600 1805.06c-41.9844 0 -77.0557 -35.0713 -77.0557 -77.0557s35.0713 -77.0557 77.0557 -77.0557s77.0557 34.9434 77.0557 77.0557
s-35.0713 77.0557 -77.0557 77.0557zM1842.94 1168c0 -75.0078 -41.9844 -137.984 -101.889 -173.056c8.95996 -32 13.9521 -64.8965 13.9521 -98.9443c0 -274.944 -329.088 -498.048 -734.08 -498.048s-734.976 222.976 -734.976 497.023
c0 35.9688 6.01562 70.0166 16.1279 104.064c-57.9844 34.9443 -97.0244 97.0244 -97.0244 168.96c0 110.976 89.9844 200.96 200.96 200.96c66.0488 0 124.032 -32.8955 160 -82.9443c114.944 60.9287 257.024 99.9688 411.904 105.984l92.0322 456.96
c3.07227 14.0801 11.0078 25.9844 23.04 33.0244c12.0322 8.06348 25.9834 9.9834 39.04 7.04004l312.96 -72.0645c30.9756 52.9922 88.96 89.9844 155.008 89.9844c98.9443 0 179.072 -80 179.072 -178.944s-80 -178.944 -178.944 -178.944
c-95.1035 0 -172.032 73.9844 -178.048 167.937l-262.016 60.0322l-77.0566 -386.049c148.992 -7.93555 285.952 -46.9756 397.057 -108.031c35.9678 51.9678 94.9756 86.0156 162.943 86.0156c109.952 0 199.937 -89.9844 199.937 -200.96z" />
<glyph glyph-name="uniF214" unicode="&#xf214;"
d="M1091.2 1920v-452.992h425.216v-281.216h-425.216v-459.52c0 -103.937 5.50391 -170.624 16.6396 -200.192c10.8799 -29.3125 31.4883 -52.8643 61.3125 -70.5283c39.6797 -23.8076 84.8633 -35.7119 135.936 -35.7119c90.624 0 180.864 29.4404 270.72 88.4482v-282.624
c-76.6719 -35.9678 -146.048 -61.3125 -208 -75.9043c-61.9512 -14.4639 -129.023 -21.7598 -201.216 -21.7598c-81.9199 0 -154.368 10.3682 -217.344 30.9756c-62.9756 20.6084 -116.608 50.3047 -161.024 88.4482c-44.5439 38.2725 -75.2637 78.9766 -92.416 122.112
c-17.1514 43.1357 -25.7275 105.6 -25.7275 187.52v628.736h-198.016v253.568c70.3994 22.9121 130.688 55.6797 180.863 98.4316c50.3047 42.624 90.4961 93.8242 120.832 153.856c30.3359 59.7754 51.2002 135.808 62.7207 228.352h254.72z" />
<glyph glyph-name="uniF104" unicode="&#xf104;"
d="M512 1664l1152 -640l-1152 -640v1280z" />
<glyph glyph-name="uniF50B" unicode="&#xf50b;"
d="M1408 1152l-384 -384l-384 384h256v512h256v-512h256zM384 640h1280v-256h-1280v256z" />
<glyph glyph-name="uniF409" unicode="&#xf409;"
d="M1024 1664l640 -512l-128 -128v-512h-1024v512l-128 128zM1152 576v448h-256v-448h256z" />
<glyph glyph-name="uniF458" unicode="&#xf458;"
d="M1920 1024l-1024 -640v480l-768 -480v1280l768 -480v480z" />
<glyph glyph-name="uniF218" unicode="&#xf218;"
d="M729.6 1152h550.4s12.7998 -38.4004 12.7998 -89.5996c0 -332.801 -230.399 -563.2 -563.2 -563.2c-320 0 -588.8 268.8 -588.8 588.8s281.601 588.8 588.8 588.8c153.601 0 294.4 -51.2002 384 -153.6l-153.6 -153.601c-38.4004 25.6006 -102.4 76.8008 -230.4 76.8008
c-204.8 0 -371.199 -166.4 -371.199 -371.2s166.399 -371.2 371.199 -371.2c230.4 0 320 166.4 332.801 243.2h-332.801v204.8zM1664 1152h128v-128h-128v-128h-128v128h-128v128h128v128h128v-128z" />
<glyph glyph-name="uniF513" unicode="&#xf513;"
d="M1920 1280l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496l212.991 636.032l-555.264 387.968h685.312l210.688 640l210.688 -640h685.312zM1024 807.68l307.584 -219.136l-118.4 353.536l300.288 209.92h-371.456l-118.016 358.528v-702.849z
" />
<glyph glyph-name="uniF301" unicode="&#xf301;"
d="M704 1152h960l-256 -640h-1024v1024h384l64 -128h448v-128h-640l-128 -256h128z" />
<glyph glyph-name="uniF474" unicode="&#xf474;"
d="M128 1408v384h384zM640 768v512h768v-512h-768zM1536 1792h384v-384zM128 640l384 -384h-384v384zM1536 256l384 384v-384h-384zM1536 1408l256 384l128 -128zM1536 640l384 -256l-128 -128zM128 384l384 256l-256 -384zM128 1664l128 128l256 -384z" />
<glyph glyph-name="uniF438" unicode="&#xf438;"
d="M1280 1792c141.312 0 256 -114.688 256 -256v-1024c0 -141.312 -114.688 -256 -256 -256h-512c-141.312 0 -256 114.688 -256 256v384h128v-128h768v768h-768v-128h-128v128c0 141.312 114.688 256 256 256h512zM1024 384c70.7842 0 128 57.2158 128 128
s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM768 896v128h-512v256h512v128l384 -256z" />
<glyph glyph-name="uniF451" unicode="&#xf451;"
d="M256 384v1280l1024 -640zM1408 1664h384v-1280h-384v1280z" />
<glyph glyph-name="uniF404" unicode="&#xf404;"
d="M1024 640c-19.8398 0 -39.04 2.43164 -57.8564 5.63184l436.225 436.225c3.2002 -18.8164 5.63184 -38.0166 5.63184 -57.8564c0 -211.968 -172.032 -384 -384 -384zM1696.26 1375.74l351.744 -351.744l-506.624 -506.624
c-131.456 -134.272 -314.752 -217.728 -517.376 -217.728c-117.248 0 -226.944 29.3115 -324.864 79.1035l147.072 146.944c56.7041 -20.6084 115.968 -34.0479 177.92 -34.0479c144 0 279.168 56.832 380.288 160.128l372.096 372.224l-216.063 215.936zM1606.02 1722.11
l128.641 -129.024l-1279.87 -1279.87l-128.896 128.769l128 128.128l-453.888 453.888v0l506.496 506.496c131.456 134.4 314.624 217.984 517.504 217.984c170.368 0 324.48 -61.8242 448 -160.385zM896 1024c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128
c-70.7842 0 -128 -57.3438 -128 -128s57.2158 -128 128 -128zM1229.18 1345.28l105.729 105.728c-90.752 66.8164 -197.12 105.473 -310.912 105.473c-144.128 0 -279.168 -56.9609 -380.288 -160.385l-372.096 -372.096l318.208 -318.336l113.023 113.024
c-38.6553 59.5195 -62.8477 129.023 -62.8477 205.312c0 212.096 172.032 384 384 384c76.2881 0 145.792 -24.1924 205.184 -62.7197z" />
<glyph glyph-name="uniF209" unicode="&#xf209;"
d="M1073.15 2048c481.664 0 798.976 -348.672 798.976 -722.944c0 -495.104 -275.328 -865.151 -680.96 -865.151c-136.32 0 -264.448 73.7275 -308.352 157.439c0 0 -73.2168 -290.943 -88.832 -347.136c-26.8809 -97.2803 -79.2324 -194.56 -127.104 -270.208
l-148.992 54.0156c-3.58398 88.3203 -0.639648 194.049 22.0166 289.92c24.1914 102.4 162.304 687.744 162.304 687.744s-40.3203 80.6406 -40.3203 199.809c0 187.008 108.544 326.784 243.456 326.784c114.816 0 170.24 -86.1445 170.24 -189.44
c0 -115.328 -73.7275 -288 -111.488 -448c-31.6152 -133.632 67.2002 -242.816 199.168 -242.816c239.232 0 400.128 307.072 400.128 670.977c0 276.607 -186.367 483.712 -525.184 483.712c-382.72 0 -621.312 -285.568 -621.312 -604.544
c0 -110.08 32.5117 -187.521 83.1992 -247.424c23.5527 -27.7764 26.624 -38.9121 18.3047 -70.6562c-6.0166 -23.04 -19.9688 -78.9766 -25.7285 -101.248c-8.44824 -32 -34.3037 -43.2637 -63.2314 -31.3604c-176.257 71.6807 -258.433 264.96 -258.433 482.048
c0 358.656 302.336 788.48 902.145 788.48z" />
<glyph glyph-name="uniF217" unicode="&#xf217;"
d="M1024 1920c494.08 0 896 -402.048 896 -896c0 -494.08 -401.92 -896 -896 -896c-493.952 0 -896 401.92 -896 896c0 493.952 402.048 896 896 896zM1112.83 1769.47c-211.2 10.4961 -420.864 -73.4717 -564.608 -220.16
c-146.432 -144.256 -216.063 -354.176 -189.695 -551.68c23.4238 -197.248 142.592 -378.496 307.584 -476.032c160.768 -96 365.312 -104.191 530.943 -29.0557c-47.1035 -13.0557 -96.6396 -20.3516 -147.712 -20.3516c-303.487 0 -550.399 246.911 -550.399 550.399
c0 143.872 55.6797 274.944 146.304 373.12c1.02441 1.02441 1.91992 1.91992 2.81641 2.94434c4.60742 4.73535 9.08789 9.47168 13.6953 14.208c0.512695 0.383789 0.896484 1.02344 1.4082 1.2793c128 148.353 317.056 242.177 528.256 242.177
c221.057 0 418.176 -102.912 546.048 -263.424c-20.8633 33.5352 -44.0312 65.6631 -69.376 95.6152c-137.983 168.832 -343.68 273.408 -555.264 280.96zM1415.04 1006.21c4.35156 -90.3682 -25.3438 -182.912 -80.7676 -257.152
c-55.5527 -73.8555 -135.169 -129.664 -225.28 -156.928c-74.8799 -22.7842 -156.544 -25.5996 -234.112 -7.04004c54.0166 -21.6318 112.896 -33.6641 174.464 -33.6641c259.968 0 471.296 211.456 471.296 471.296c0 0.768555 -0.12793 1.66406 -0.12793 2.68848
c-13.6953 142.336 -88.1914 276.352 -200.319 359.168c-137.345 104.576 -332.288 116.864 -479.232 38.0156c-73.2158 -38.5273 -136.832 -97.1514 -176.896 -166.912c-40.5762 -69.8877 -58.4961 -151.68 -52.2246 -230.912
c10.624 -158.976 124.8 -305.023 271.616 -345.216c146.432 -44.0322 313.344 19.584 391.936 142.849c82.5605 120.447 62.7207 293.119 -36.3516 391.68c-94.0801 104.192 -260.992 115.968 -367.872 36.8643c-54.0156 -38.6562 -92.5439 -94.3359 -105.344 -157.057
c-13.3125 -62.0801 -1.66406 -128.64 30.4639 -181.76c32.1279 -53.7598 83.7119 -93.5684 141.952 -108.032c58.2402 -15.1035 121.6 -4.86328 171.52 25.6006c50.5605 30.4639 87.5518 80.1279 97.9199 135.68c11.3926 55.2959 -1.66406 114.432 -34.3037 158.848
c-32.1279 45.5684 -82.8164 73.3447 -135.936 76.9287c-52.9922 4.0957 -105.856 -17.2803 -141.568 -54.2725c-36.6084 -35.9678 -52.0957 -89.0879 -44.6719 -137.855c7.55176 -48.6406 38.2715 -93.6963 80 -115.584c26.4961 -14.7207 57.4717 -19.8408 86.9121 -16.3848
c-62.0801 1.53613 -114.177 43.2646 -131.456 100.097c-0.512695 0.767578 -1.02441 1.66406 -1.4082 2.6875c-17.9199 41.4717 -13.0557 94.3359 16.1279 133.376c28.416 38.7842 77.5684 63.3604 128.768 60.7998c51.0723 -1.66406 101.376 -33.0234 128 -78.9756
c27.3926 -45.8242 32 -106.752 7.80859 -158.336c-24.0645 -51.7119 -73.7285 -90.2402 -131.584 -101.632c-57.4717 -12.416 -122.752 4.73535 -167.68 47.3594c-44.8008 40.96 -72.0645 104.192 -67.4561 168.32c3.83984 133.12 150.911 237.44 287.104 200.96
c138.368 -31.6162 226.944 -196.736 173.824 -338.304c-48.6406 -142.72 -224.769 -225.536 -373.888 -166.912c-74.1123 27.5195 -134.784 85.8877 -169.729 157.568c-34.9443 72.1914 -42.2402 158.592 -17.9199 237.695c47.8721 161.664 226.176 269.185 398.848 238.464
c175.36 -25.5996 313.217 -192.64 317.568 -374.016zM1024 207.488c319.232 0 595.968 184.319 730.112 451.712c37.248 84.7354 58.8799 175.744 58.8799 265.728c0 318.977 -247.04 554.368 -553.216 607.616c154.496 -64 279.296 -200.32 331.52 -362.496
c70.1445 -203.136 20.8643 -447.872 -133.12 -608.896c-148.224 -162.944 -384.384 -245.633 -608.128 -206.208c-226.048 35.584 -422.912 198.271 -517.504 407.936c-97.792 209.408 -90.3682 468.224 26.8799 674.432c116.736 206.337 329.344 354.433 566.272 395.009
c11.7754 2.17578 23.6797 3.96777 35.584 5.37598c-420.992 -32.1279 -753.664 -384.641 -753.664 -813.696c0 -450.304 366.208 -816.512 816.384 -816.512z" />
<glyph glyph-name="uniF469" unicode="&#xf469;"
d="M256 1280h1536v-768h-256v384h-1024v-384h-256v768zM1408 1664v-256h-768v256h768zM1408 640c0 -98.3037 37.5039 -196.48 112.512 -271.488l112.513 -112.512h-768l-112.513 112.512c-75.0078 75.0078 -112.512 173.185 -112.512 271.488v128h768v-128z" />
<glyph glyph-name="uniF476" unicode="&#xf476;"
d="M384 1248c123.776 0 224 -100.224 224 -224c0 -123.648 -100.224 -224 -224 -224s-224 100.352 -224 224c0 123.776 100.224 224 224 224zM1024 1248c123.648 0 224 -100.224 224 -224c0 -123.648 -100.352 -224 -224 -224c-123.776 0 -224 100.352 -224 224
c0 123.776 100.224 224 224 224zM1664 1248c123.648 0 224 -100.224 224 -224c0 -123.648 -100.352 -224 -224 -224s-224 100.352 -224 224c0 123.776 100.352 224 224 224z" />
<glyph glyph-name="uniF211" unicode="&#xf211;"
d="M1472 1440c229.888 0 416 -186.24 416 -416s-186.112 -416 -416 -416s-416 186.24 -416 416s186.112 416 416 416zM576 1440c229.76 0 416 -186.24 416 -416s-186.24 -416 -416 -416s-416 186.24 -416 416s186.24 416 416 416z" />
<glyph glyph-name="uniF456" unicode="&#xf456;"
d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768c-424.192 0 -768 343.936 -768 768s343.808 768 768 768zM1024 512c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1113.22 896
l51.584 640h-281.6l51.2002 -640h178.815z" />
<glyph glyph-name="uniF471" unicode="&#xf471;"
d="M512 1664h358.656c163.328 0 281.855 -23.2959 355.712 -69.7598c73.7275 -46.4639 110.592 -120.448 110.592 -221.824c0 -68.8643 -16.1279 -125.312 -48.3838 -169.344c-32.3838 -44.1602 -75.2646 -70.6562 -128.769 -79.6162v-7.93652
c72.96 -16.2559 125.568 -46.7197 157.952 -91.3916c32.2559 -44.6719 48.5127 -104.063 48.5127 -178.048c0 -105.088 -38.0166 -187.008 -113.921 -245.888c-76.0312 -58.8809 -178.943 -88.1924 -309.248 -88.1924h-431.104v1152zM768 1207.81h130.176
c66.3047 0 114.176 10.2402 143.872 30.7207c29.5684 20.4795 44.5439 54.3994 44.5439 101.632c0 44.1602 -16.1279 75.7754 -48.5117 94.9756c-32.3838 19.0723 -83.4561 28.7998 -153.344 28.7998h-116.736v-256.128zM768 1013.89v-300.16h147.456
c67.2002 0 116.864 12.9287 148.864 38.6562c32.1279 25.7285 48.1279 65.1523 48.1279 118.145c0 95.6152 -68.3525 143.487 -204.929 143.487h-139.52v-0.12793z" />
<glyph glyph-name="uniF433" unicode="&#xf433;"
d="M0 896l896 -896h-896v896z" />
<glyph glyph-name="uniF447" unicode="&#xf447;"
d="M1408 512c70.7842 0 128 -57.2158 128 -128s-57.2158 -128 -128 -128s-128 57.2158 -128 128s57.2158 128 128 128zM640 512c70.6562 0 128 -57.2158 128 -128s-57.3438 -128 -128 -128s-128 57.2158 -128 128s57.3438 128 128 128zM1536 896h-896v-128h896v-128h-1024
v1024h-256v128h384v-256h1152z" />
<glyph glyph-name="uniF511" unicode="&#xf511;"
d="M1024 1510.53l-118.016 -358.528h-371.328l300.288 -209.92l-118.272 -353.28l307.328 218.88l307.584 -219.136l-118.4 353.536l300.288 209.92h-371.456zM1024 1920v0l210.688 -640h685.312l-555.136 -387.968l212.863 -636.032l-553.728 394.496l-553.728 -394.496
l212.991 636.032l-555.264 387.968h685.312z" />
<glyph glyph-name="uniF427" unicode="&#xf427;"
d="M1717.72 1436.21c99.7246 -99.7246 99.7246 -261.281 0 -361.006l-232.861 -232.989c-98.5723 -98.5723 -257.44 -99.3398 -357.421 -2.81543l-455.353 -455.354h-288.036v287.908l455.097 454.969l-0.767578 0.768555c-99.5967 99.5957 -99.5967 261.408 0 361.005
l232.989 232.989c99.5957 99.7246 261.408 99.7246 361.005 0zM1344.04 1104.01l160.02 160.021l-256.031 256.031l-160.021 -160.02z" />
<glyph glyph-name="uniF219" unicode="&#xf219;"
d="M1438.08 1832.7c0 0 563.456 -229.376 370.176 -838.4c-267.264 -554.496 -784.64 -349.056 -784.64 -349.056v-277.504s-19.7119 -153.344 -202.88 -220.288c-183.296 -66.6885 -351.616 59.5195 -351.616 59.5195v279.809
c83.584 -85.5039 195.712 -134.272 240.128 -9.98438v945.92h311.68v-537.472s460.416 -138.496 522.368 289.792c9.85645 475.392 -546.944 472.832 -546.944 472.832s-349.184 22.2715 -522.495 -257.536c-131.2 -222.848 37.1191 -423.424 37.1191 -423.424
l-225.279 -200.448s-339.2 418.433 -7.42383 871.552c430.848 487.681 1159.81 194.688 1159.81 194.688z" />
<glyph glyph-name="uniF100" unicode="&#xf100;"
d="M512 1408h1024v-128h-1024v128zM1152 1152v-128h-640v128h640zM1280 1024v128h256v-128h-256zM896 768v128h640v-128h-640zM768 896v-128h-256v128h256zM512 512v128h768v-128h-768z" />
<glyph glyph-name="uniF400" unicode="&#xf400;"
d="M1792 384l-128 -128l-494.848 494.848c-94.8486 -68.9912 -210.816 -110.848 -337.152 -110.848c-318.08 0 -576 257.92 -576 576s257.92 576 576 576s576 -257.92 576 -576c0 -126.336 -41.8564 -242.304 -110.848 -337.152zM384 1216c0 -247.424 200.576 -448 448 -448
c247.552 0 448 200.576 448 448s-200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448z" />
<glyph glyph-name="uniF439" unicode="&#xf439;"
d="M896 1664v-384h-256v384c0 70.7842 57.3438 128 128 128s128 -57.2158 128 -128zM1408 1664v-384h-256v384c0 70.7842 57.2158 128 128 128s128 -57.2158 128 -128zM384 1152h1280c0 -309.632 -219.904 -567.68 -512 -627.072v-268.928h-256v268.928
c-292.096 59.2646 -512 317.44 -512 627.072z" />
<glyph glyph-name="uniF509" unicode="&#xf509;"
d="M1534.21 717.824l147.712 -88.5762c-134.4 -223.36 -378.24 -373.248 -657.92 -373.248c-279.552 0 -523.52 149.888 -657.92 373.248l147.712 88.7041c92.1602 -98.1758 226.816 -168.96 382.208 -194.688v500.736h-128v128h128v163.456
c-76.1602 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256c0 -94.4639 -51.7119 -176.128 -128 -220.544v-163.456h128v-128h-128v-500.864c155.52 25.7285 289.92 96.3838 382.208 194.688zM1024 1664
c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128c70.7842 0 128 57.3438 128 128s-57.2158 128 -128 128z" />
<glyph glyph-name="uniF510" unicode="&#xf510;"
d="M1664 1152v-256h-512v-512h-256v512h-512v256h512v512h256v-512h512z" />
<glyph glyph-name="uniF445" unicode="&#xf445;"
d="M1888 748.032l-57.5996 -139.648l-305.408 21.8887c-31.3604 -39.9365 -66.9443 -75.6484 -106.88 -107.009l21.7598 -305.536l-139.264 -57.5996l-200.704 231.552c-25.2158 -3.07129 -49.9199 -7.67969 -75.9043 -7.67969c-25.7275 0 -50.1758 4.6084 -75.1357 7.67969
l-200.96 -231.808l-139.393 57.7275l21.7607 305.408c-39.9365 31.3604 -75.5205 66.9443 -107.009 106.88l-305.536 -21.7598l-57.7275 139.264l231.68 200.832c-3.07129 25.0879 -7.67969 49.792 -7.67969 75.7764c0 25.7275 4.6084 50.1758 7.55176 75.1357
l-231.552 200.96l57.7275 139.393l305.28 -21.7607c31.4883 39.9365 67.2002 75.7764 107.265 107.265l-21.7607 305.408l139.137 57.5996l200.96 -231.68c24.96 2.94336 49.5352 7.67969 75.3916 7.67969s50.4316 -4.73633 75.3916 -7.67969l200.96 231.68
l139.265 -57.5996l-21.8887 -305.408c39.9365 -31.3604 75.6484 -67.0723 107.137 -107.008l305.408 21.6318l57.5996 -139.136l-231.552 -200.832c3.07129 -25.0889 7.67969 -49.6641 7.67969 -75.6484c0 -25.7275 -4.6084 -50.3037 -7.67969 -75.2637zM1280 1024
c0 141.312 -114.688 256 -256 256s-256 -114.688 -256 -256s114.688 -256 256 -256s256 114.688 256 256z" />
<glyph glyph-name="uniF516" unicode="&#xf516;"
d="M1024 1452.42v-467.328h-155.776v467.328h155.776zM1408 1452.42v-467.328h-155.776v467.328h155.776zM323.2 1920h1596.8v-1090.82l-467.456 -445.184h-350.464l-233.6 -256h-228.48v256h-512v1224.32zM1764.22 907.136v857.088h-1285.5v-1129.73h350.977v-211.328
l233.472 211.328h428.16z" />
<glyph glyph-name="uniF435" unicode="&#xf435;"
d="M384 512l640 640l640 -640h-1280zM384 1408h1280v-128h-1280v128z" />
<glyph glyph-name="uniF300" unicode="&#xf300;"
d="M1536 1536c141.312 0 256 -114.688 256 -256v-384c0 -141.312 -114.688 -256 -256 -256h-448l-448 -448v448h-128c-141.312 0 -256 114.688 -256 256v384c0 141.312 114.688 256 256 256h1024z" />
<glyph glyph-name="uniF514" unicode="&#xf514;"
d="M1664 768v128l256 -256l-256 -256v128h-256c-282.752 0 -512 229.248 -512 512c0 141.312 -114.688 256 -256 256h-384v256h384c282.752 0 512 -229.248 512 -512c0 -141.312 114.688 -256 256 -256h256zM1408 1280c-61.8242 0 -117.888 -22.9121 -162.176 -59.3916
c-27.3926 83.9678 -70.7842 160 -128 224.768c82.5596 56.96 182.271 90.624 290.176 90.624h256v128l256 -256l-256 -256v128h-256zM640 768c61.8242 0 117.888 22.9121 162.176 59.3916c27.3926 -83.9678 70.7842 -160 128 -224.768
c-82.5596 -56.832 -182.271 -90.624 -290.176 -90.624h-384v256h384z" />
<glyph glyph-name="uniF102" unicode="&#xf102;"
d="M1408 1408l512 -128v-896h-1792v896l512 128l128 256h512zM1024 512.256c247.552 0 448 200.448 448 448c0 247.424 -200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448c0 -247.552 200.576 -448 448 -448zM512 1600v-96.1279l-256 -64v160.128h256z
M1024 1280.13c176.768 0 320 -143.231 320 -320c0 -176.768 -143.232 -320 -320 -320s-320 143.232 -320 320c0 176.769 143.232 320 320 320z" />
<glyph glyph-name="uniF466" unicode="&#xf466;"
d="M640 1344l-320 -320l320 -320v-320l-640 640l640 640v-320zM1408 1280c282.752 0 512 -229.248 512 -512v-299.904l-150.016 149.889c-99.9688 99.9678 -231.04 150.016 -361.984 150.016h-256v-384l-640 640l640 640v-384h256z" />
<glyph glyph-name="uniF463" unicode="&#xf463;"
d="M1536 1408l-768 -384l-768 384v128h1536v-128zM0 1216l768 -384l256 128v-448h-1024v704zM1920 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.7842 0 -128 57.2158 -128 128v640c0 70.6562 57.2158 128 128 128h640z
M1920 640v128h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
<glyph glyph-name="uniF422" unicode="&#xf422;"
d="M384 1536h1152v-1024h-1152v1024zM1408 640v640h-896v-640h896z" />
<glyph glyph-name="uniF201" unicode="&#xf201;"
d="M1024 128c128 0 256 32 368 80c-16 144 -64 368 -208 688c-288 -96 -560 -304 -704 -576c144 -128 336 -192 544 -192zM1536 288c208 144 352 384 384 640c-192 32 -368 32 -576 0c16 -32 128 -304 192 -640zM128 1088v-64c0 -224 80 -432 224 -592
c176 288 496 496 784 592c-16 48 -48 112 -80 176c-368 -112 -592 -144 -928 -112zM1760 1536c-160 -128 -368 -192 -560 -288c48 -64 64 -112 96 -176c208 48 480 32 624 0c-16 176 -64 336 -160 464zM672 1856c-256 -112 -448 -336 -512 -624c288 -32 688 48 832 96
c-96 192 -192 352 -320 528zM1024 1920c-64 0 -128 -16 -192 -16c128 -208 192 -320 304 -512c128 48 384 128 528 256c-160 160 -384 272 -640 272zM1024 2048c560 0 1024 -464 1024 -1024s-464 -1024 -1024 -1024s-1024 464 -1024 1024s464 1024 1024 1024z" />
<glyph glyph-name="uniF426" unicode="&#xf426;"
d="M1664 1024c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256h-1280c-141.312 0 -256 114.688 -256 256s114.688 256 256 256h6.52832c-4.35254 20.8643 -6.52832 41.9844 -6.52832 64c0 176.768 143.232 320 320 320
c89.3438 0 169.984 -36.8643 227.968 -95.8721c60.7998 131.84 193.408 223.872 348.032 223.872c211.968 0 384 -171.904 384 -384c0 -45.1836 -9.21582 -87.8076 -23.5518 -128h23.5518z" />
<glyph glyph-name="uniF446" unicode="&#xf446;"
d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768s-768 343.936 -768 768s343.936 768 768 768zM1536 1024c0 282.752 -229.248 512 -512 512c-94.8477 0 -182.528 -27.5195 -258.688 -72.4482l698.368 -698.24
c44.8008 76.1602 72.3203 163.969 72.3203 258.688zM512 1024c0 -282.752 229.248 -512 512 -512c94.7197 0 182.4 27.5195 258.56 72.3203l-698.239 698.239c-44.8008 -76.1592 -72.3203 -163.84 -72.3203 -258.56z" />
<glyph glyph-name="uniF504" unicode="&#xf504;"
d="M1664 1536c0 -94.4639 -51.7119 -176.128 -128 -220.544v-163.456c0 -282.752 -229.248 -512 -512 -512c-141.312 0 -256 -114.688 -256 -256v-128h-256v1059.46c-76.1602 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256
c0 -94.4639 -51.8398 -176.128 -128 -220.544v-490.496c75.5195 44.0322 162.304 71.04 256 71.04c141.312 0 256 114.688 256 256v163.456c-76.2881 44.416 -128 126.08 -128 220.544c0 141.312 114.688 256 256 256s256 -114.688 256 -256zM640 1664
c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128s128 57.3438 128 128s-57.3438 128 -128 128zM1408 1408c70.7842 0 128 57.3438 128 128s-57.2158 128 -128 128s-128 -57.3438 -128 -128s57.2158 -128 128 -128z" />
<glyph glyph-name="uniF465" unicode="&#xf465;"
d="M1536 1408l-768 -384l-768 384v128h1536v-128zM0 1216l768 -384l256 128v-448h-1024v704zM1920 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.7842 0 -128 57.2158 -128 128v640c0 70.6562 57.2158 128 128 128h640z
M1531.52 384l452.48 452.48l-90.4961 90.4951l-361.984 -361.983l-180.991 180.992l-90.4961 -90.4961z" />
<glyph glyph-name="uniF424" unicode="&#xf424;"
d="M1408 1792l384 -384v-768l-384 -384h-768l-384 384v768l384 384h768zM1024 512c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1113.22 896l51.584 640h-281.6l51.2002 -640h178.815z" />
<glyph glyph-name="uniF418" unicode="&#xf418;"
d="M1408 1504l128 -96l-512 -768h-128l-288 416l128 128l224 -192z" />
<glyph glyph-name="uniF429" unicode="&#xf429;"
d="M1024 1453.31l493.312 -493.312l-493.312 -493.312l-86.6562 86.6553l342.656 342.656h-896v128h896l-342.656 342.656z" />
<glyph glyph-name="uniF308" unicode="&#xf308;"
d="M477.696 568.192l543.104 543.104l90.3682 -90.624l-542.976 -542.976c-100.225 -100.353 -152.32 -115.84 -226.305 -135.809c20.0967 74.1123 35.584 126.08 135.809 226.305zM1189.5 1732.61l180.992 180.991l542.976 -543.104l-180.991 -180.992
c-50.0488 50.0479 -130.944 50.0479 -180.992 0l-180.992 -180.992c-50.0479 -50.0479 -50.0479 -130.943 0 -180.992l-180.992 -180.991l-543.104 542.976l180.991 180.992c50.0488 -50.0479 131.072 -50.0479 181.12 0l180.992 181.12
c50.0479 50.0479 50.0479 130.943 0 180.992z" />
<glyph glyph-name="uniF226" unicode="&#xf226;"
d="M1477.76 1792c120.32 0 152.576 -68.6084 126.464 -195.584l-51.8398 -258.688c-40.96 -206.848 -88.0635 -445.695 -94.0801 -470.144c-11.0078 -44.1602 -27.9033 -119.168 -132.992 -119.168h-250.367c-9.98438 0 -9.98438 0 -20.0967 -10.1123
c-6.65527 -6.65527 -393.344 -455.424 -393.344 -455.424c-30.208 -34.6875 -80.3838 -28.5439 -98.6875 -21.1201c-18.3047 7.2959 -50.6885 29.6963 -50.6885 89.9844v1301.63s33.2803 138.624 146.304 138.624h819.328zM1394.94 1391.1l34.3037 179.2
c6.27148 29.6963 -16.3838 52.4805 -40.5762 52.4805h-657.536c-29.8242 0 -49.792 -26.8799 -49.792 -49.792v-1015.68c0 -3.19922 2.43262 -3.83984 4.86426 -1.15137c0 0 242.304 290.815 269.184 324.352c26.8809 33.4082 39.168 38.6562 79.3604 38.6562h221.184
c30.208 0 47.2324 25.3438 50.3047 40.1924c3.2002 14.8477 28.9277 149.12 34.4316 176.256s-19.3281 54.9121 -44.7998 54.9121h-270.976c-35.9688 0 -61.8242 25.4717 -61.8242 61.3115v39.04c0 35.9678 25.7275 60.416 61.5674 60.416h319.232
s46.9756 20.4805 51.0723 39.8076z" />
<glyph glyph-name="uniF205" unicode="&#xf205;"
d="M1024 1920c493.952 0 896 -401.92 896 -896c0 -493.952 -402.048 -896 -896 -896c-494.08 0 -896 402.048 -896 896c0 494.08 401.92 896 896 896zM218.496 1024c0 -318.848 185.216 -594.432 454.016 -724.992l-384.256 1052.93
c-44.6719 -100.224 -69.7598 -211.071 -69.7598 -327.936zM1024 218.496c93.8242 0 183.808 16.1279 267.648 45.5684c-2.17676 3.45508 -4.09668 7.16797 -5.76074 11.2637l-247.552 678.271l-241.92 -702.336c72.1924 -21.248 148.48 -32.7676 227.584 -32.7676z
M1134.98 1401.73l291.072 -866.176l80.3838 268.544c34.9443 111.488 61.3125 191.488 61.3125 260.48c0 99.584 -35.8398 168.576 -66.4326 222.08c-40.7031 66.4316 -78.9756 122.624 -78.9756 189.056c0 74.1123 56.1924 142.977 135.168 142.977
c3.58398 0 7.04004 -0.384766 10.4961 -0.640625c-143.36 131.328 -334.208 211.456 -544 211.456c-281.472 0 -529.024 -144.256 -673.024 -363.008c18.9443 -0.639648 36.7363 -0.896484 51.8408 -0.896484c84.2236 0 214.655 10.2402 214.655 10.2402
c43.3926 2.56055 48.5127 -61.3115 5.24805 -66.4316c0 0 -43.7754 -5.12012 -92.1602 -7.68066l293.12 -872.575l176.256 528.64l-125.439 343.936c-43.3926 2.56055 -84.4805 7.68066 -84.4805 7.68066c-43.2637 2.55957 -38.2715 68.9922 5.12012 66.4316
c0 0 132.992 -10.2402 212.225 -10.2402c84.2236 0 214.783 10.2402 214.783 10.2402c43.3926 2.56055 48.5127 -61.3115 5.12012 -66.4316c0 0 -43.6475 -5.12012 -92.2881 -7.68066zM1730.82 1410.56c3.58398 -25.7275 5.50391 -53.248 5.63184 -82.8154
c0 -81.792 -15.4883 -173.696 -61.3125 -288.512l-246.144 -711.425c239.488 139.521 400.512 399.104 400.512 696.192c0 140.16 -35.8398 271.872 -98.6875 386.56z" />
<glyph glyph-name="uniF472" unicode="&#xf472;"
d="M1368.06 1408h-128l-240.129 -768h128l-39.9355 -128h-448l39.9355 128h128l240.129 768h-128l39.9355 128h448z" />
<glyph glyph-name="uniF216" unicode="&#xf216;"
d="M1791.62 1265.92c0.383789 -2.94434 0.639648 -5.75977 0.639648 -8.7041v-466.943c0 -2.94434 -0.255859 -5.76074 -0.511719 -8.96094c-0.12793 -0.767578 -0.383789 -1.79199 -0.511719 -2.81543c-0.384766 -1.79199 -0.640625 -3.58398 -1.15234 -5.50391
c-0.255859 -1.02441 -0.768555 -2.04785 -1.02441 -3.07227c-0.639648 -1.66406 -1.15137 -3.2002 -1.79199 -4.86426c-0.511719 -1.02344 -1.02344 -2.04785 -1.53613 -3.07129c-0.639648 -1.53613 -1.40723 -2.94434 -2.30371 -4.48047
c-0.511719 -0.895508 -1.28027 -1.91992 -1.91992 -2.94434c-0.767578 -1.2793 -1.66406 -2.55957 -2.6875 -3.96777c-0.768555 -0.895508 -1.53613 -1.79199 -2.30469 -2.81543c-1.02344 -1.02441 -2.04785 -2.30469 -3.32812 -3.45605
c-0.767578 -0.896484 -1.66406 -1.79199 -2.6875 -2.68848c-1.02441 -0.895508 -2.30371 -2.04785 -3.71191 -3.07227c-0.768555 -0.767578 -1.79199 -1.53516 -2.81641 -2.30371l-1.15137 -0.767578l-702.208 -467.072
c-11.1367 -7.42383 -23.8086 -11.0078 -36.6084 -11.0078s-25.4717 3.58398 -36.7363 11.2637l-702.208 467.072c-0.255859 0.255859 -0.639648 0.511719 -1.02344 0.767578l-2.94434 2.30469c-1.28027 0.895508 -2.55957 2.04785 -3.71191 3.07129
c-0.895508 0.896484 -1.79199 1.79199 -2.6875 2.68848c-1.02441 1.02344 -2.17676 2.30371 -3.2002 3.45605c-0.768555 0.895508 -1.53613 1.79199 -2.30469 2.81543c-0.895508 1.28027 -1.79199 2.56055 -2.6875 3.96875
c-0.768555 0.895508 -1.4082 1.91992 -1.91992 2.94336c-0.896484 1.53613 -1.66406 2.94434 -2.30371 4.48047c-0.512695 0.895508 -1.02441 1.91992 -1.53613 3.07129c-0.640625 1.66406 -1.15234 3.2002 -1.66406 4.86426
c-0.383789 0.896484 -0.768555 1.91992 -1.02441 3.07227c-0.511719 1.91992 -0.767578 3.71191 -1.15137 5.50391c-0.128906 1.02441 -0.384766 2.04785 -0.512695 2.94434c-0.383789 2.81543 -0.639648 5.75977 -0.639648 8.57617v466.943
c0 2.94434 0.255859 5.75977 0.639648 8.7041c0.12793 0.896484 0.383789 1.79199 0.512695 2.81641c0.383789 1.91992 0.639648 3.71191 1.15137 5.50391c0.255859 1.15137 0.640625 2.17578 1.02441 3.2002c0.511719 1.53516 1.02344 3.19922 1.66406 4.86328
c0.511719 1.02441 1.02344 2.04785 1.53613 3.2002c0.639648 1.53613 1.40723 2.81641 2.30371 4.48047c0.639648 0.895508 1.28027 1.91992 1.91992 2.94336c0.767578 1.28027 1.79199 2.68848 2.6875 3.96875c0.640625 1.02344 1.4082 1.79199 2.30469 2.81543
c1.02344 1.28027 2.04785 2.43164 3.2002 3.58398c0.895508 0.768555 1.79199 1.66406 2.6875 2.68848c1.15234 1.02344 2.43164 2.04785 3.71191 3.07129l2.94434 2.17676c0.383789 0.255859 0.767578 0.639648 1.15137 0.895508l702.208 466.944
c22.1445 14.7197 51.0723 14.7197 73.2168 0l702.08 -467.2c0.383789 -0.255859 0.767578 -0.639648 1.15137 -0.896484c0.896484 -0.767578 1.91992 -1.53516 2.81641 -2.30371c1.2793 -0.895508 2.55957 -1.91992 3.71191 -3.07227
c1.02344 -0.895508 1.91992 -1.79199 2.6875 -2.6875c1.15234 -1.02441 2.17676 -2.17578 3.32812 -3.45605c0.768555 -0.896484 1.53613 -1.79199 2.30469 -2.81641c0.895508 -1.2793 1.79199 -2.55957 2.6875 -3.96777
c0.639648 -0.895508 1.4082 -1.91992 1.91992 -2.94434c0.896484 -1.53516 1.66406 -2.81543 2.30371 -4.35156c0.512695 -1.02441 1.02441 -2.04785 1.53613 -3.2002c0.640625 -1.66406 1.15234 -3.2002 1.79199 -4.73535
c0.255859 -1.02441 0.768555 -2.04883 1.02441 -3.2002c0.511719 -1.79199 0.767578 -3.58398 1.15137 -5.50391c0.128906 -0.896484 0.384766 -1.79199 0.512695 -2.81641zM1090.05 1601.28v-307.328l286.208 -190.977l231.168 154.24zM957.952 1601.28l-517.248 -344.064
l231.04 -154.24l286.208 191.104v307.2zM387.84 1133.95v-220.416l165.12 110.208zM957.952 446.208v307.328l-286.208 190.976l-231.04 -154.111zM1024 867.84l233.472 155.904l-233.472 155.904l-233.472 -155.904zM1090.05 446.208l517.376 344.064l-231.168 154.111
l-286.208 -190.976v-307.2zM1660.29 913.536v220.416l-165.248 -110.208z" />
<glyph glyph-name="uniF475" unicode="&#xf475;"
d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768s-768 343.936 -768 768s343.936 768 768 768zM476.16 1340.54l-2.81641 3.96777c-4.60742 -7.93555 -8.83203 -16.1279 -13.1836 -24.3193l4.47949 1.02344l17.5361 6.27246l30.208 2.6875zM1024 384
c265.088 0 493.056 162.176 590.208 392.576l-6.52832 10.4961l14.9766 50.8154l-34.6885 25.2158l-25.3438 7.55273l-23.5518 19.8398l-55.8086 -21.1201l-52.7354 -3.07227l-39.9365 29.0566l-39.04 53.5039l-0.767578 32.5117l0.895508 54.2725l5.63184 7.55176
l4.86426 18.1758l22.7842 35.0723l13.3125 13.0557l18.6875 20.7363l13.0557 25.5996l36.8643 34.9443l37.7598 -0.383789l27.6484 9.59961l66.4316 7.16797l25.9844 -36.8643l24.1924 -10.4961c-8.44824 39.4248 -20.2246 77.6963 -35.585 114.049l-5.50391 5.11914
l-13.4395 -6.65527l-28.9277 -2.68848l-23.8086 -21.248l-25.9834 -35.0723l-50.6885 -11.6475l-23.5518 9.21582l2.6875 40.5762l13.3125 25.2158l46.4639 -2.6875l8.57617 21.8877l-24.0645 26.624l20.6084 8.32031l40.4482 22.0156l14.4639 11.6484
c-49.1523 77.6953 -113.664 144.256 -190.721 194.688l-4.35156 -1.79199l20.3516 -17.792l-32.8955 5.24805l-4.6084 -9.34375l21.248 -2.56055l-7.93555 -8.95996l-59.9043 -10.3682l-77.3115 -34.3037l-59.9043 -28.9277l-6.27246 59.6475l16.8965 32.6406
l-12.416 21.7598l-45.9521 19.4561l-22.1436 17.1523l32.1279 7.67969l69.1201 16.8955l29.8232 1.66406c-64.7676 22.1445 -132.991 36.7363 -205.056 36.7363c-146.56 0 -280.064 -51.4561 -388.096 -134.656l38.2715 1.15234l47.7441 -12.2881l32 -8.19238
l34.8164 7.80859l47.6152 -6.0166l29.9521 7.2959l5.63184 18.0488l28.1602 -2.94434l11.0078 -22.7842l47.6162 4.35254l-74.752 -24.7041l-36.0957 -20.8643l-55.168 -42.2402l13.6963 -14.9756l38.3994 -18.0479l27.3926 -28.0322l33.6641 34.4316l19.4551 37.8887
l33.0244 22.6553l33.0244 -16.7676l9.08789 -18.4316l28.9277 10.2393l10.2402 -55.168l20.4795 -20.0957l-74.752 -19.0723l-54.7842 -21.5039l42.752 11.7764l-5.24707 -17.1523l13.5674 -15.3604l11.2646 -7.16797l-45.9521 -18.6875l16.1279 18.8154l-25.9844 -5.63184
l-31.2314 -14.8477l-14.208 -16.5117l-34.9443 -19.3281l-25.6006 -20.2246l-9.72754 -23.4238l-32.7676 -26.752l-25.8564 -59.3916l-8.06348 -25.7285l-23.6807 47.4883l-46.208 -0.12793l-38.3994 0.255859l-49.2803 -39.6797l-6.52832 -43.5205l29.6963 -32.3838
l57.2158 30.7197l-14.8477 -43.5195l-40.4482 -26.1123l-39.2959 9.47266l-43.5205 18.1758l-49.9199 79.1035l-22.1436 47.2324l-5.24805 16.2559l7.42383 -66.0479l-0.639648 -17.1523l-8.19238 10.2402l-4.99219 16.6396l-9.9834 12.416l-5.12012 22.9121
l-0.255859 35.9678l-26.752 46.3359c-17.4082 -58.1113 -29.5684 -118.399 -29.5684 -182.144c0 -295.936 202.88 -543.232 476.16 -616.192l-4.0957 12.6729l-9.60059 137.6l-11.1357 62.8477l-67.3281 65.792l-31.7441 56.3203l-10.624 27.9043l7.67969 16.5117
l14.0801 52.9922l7.55273 61.6953l-8.32031 4.73633l-14.9756 -10.8799l-19.9688 9.34375l13.4404 6.27246l59.9043 13.8242l39.4238 17.6631l-2.43262 -26.752l14.5928 24.1924l19.7119 -6.91211l67.7119 -21.6318l48.5117 -33.6641l34.9443 -19.3281l8.31934 -5.50391
l-8.19141 -48.7676l33.4082 9.47168l-8.32031 -16.6396l47.3604 -10.1123l48 -3.96777l31.3594 -19.7119l1.28027 -57.3447l-22.7842 -65.4072l-27.6475 -68.0967l-50.1768 -30.8477l-39.9355 -90.8799l-36.0957 5.12012l17.1514 -23.4238l-1.91992 -16.5127
l-33.2803 -26.4961c19.4561 -1.79199 38.1445 -5.8877 57.9844 -5.8877z" />
<glyph glyph-name="uniF432" unicode="&#xf432;"
d="M1408 640l-448 448l-448 -448l-128 128l576 576l576 -576z" />
<glyph glyph-name="uniF210" unicode="&#xf210;"
d="M1024 2048c565.632 0 1024 -458.496 1024 -1024c0 -565.632 -458.368 -1024 -1024 -1024c-100.864 0 -198.016 14.7197 -290.176 42.1123c38.7842 61.4395 81.2793 140.288 103.04 219.264c12.6719 45.5684 72.0635 281.6 72.0635 281.6
c35.7119 -67.9678 139.648 -127.743 250.24 -127.743c329.088 0 552.448 300.159 552.448 701.823c0 303.744 -257.28 586.624 -648.192 586.624c-486.527 0 -731.904 -348.8 -731.904 -639.744c0 -176.128 66.5605 -332.928 209.664 -391.168
c23.4248 -9.59961 44.416 -0.511719 51.2002 25.4727c4.73633 18.0479 16 63.4873 20.9922 82.1758c6.78418 25.7275 4.0957 34.6875 -14.8477 57.2158c-41.0879 48.6406 -67.4561 111.488 -67.4561 200.704c0 258.816 193.536 490.496 504.063 490.496
c274.944 0 426.112 -168.064 426.112 -392.448c0 -295.296 -130.432 -544.384 -324.608 -544.384c-107.136 0 -187.264 88.5762 -161.664 197.12c30.7207 129.664 90.4961 269.824 90.4961 363.392c0 83.8398 -44.9277 153.729 -138.111 153.729
c-109.44 0 -197.504 -113.28 -197.504 -265.088c0 -96.6406 32.7676 -162.049 32.7676 -162.049s-112.128 -474.88 -131.712 -557.951c-18.4316 -77.8242 -20.7363 -163.456 -17.9199 -235.137c-360.832 158.336 -612.992 518.784 -612.992 937.984
c0 565.504 458.496 1024 1024 1024z" />
<glyph glyph-name="uniF437" unicode="&#xf437;"
d="M1280 1792c141.312 0 256 -114.688 256 -256v-1024c0 -141.312 -114.688 -256 -256 -256h-512c-141.312 0 -256 114.688 -256 256v1024c0 141.312 114.688 256 256 256h512zM1024 384c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128
c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1408 768v768h-768v-768h768z" />
<glyph glyph-name="uniF468" unicode="&#xf468;"
d="M256 256v1536h256v-1536h-256zM1536 1664h256v-768h-256c-256 0 -256 128 -512 128s-256 -128 -384 -128v768c128 0 128 128 384 128s256 -128 512 -128z" />
<glyph glyph-name="uniF107" unicode="&#xf107;"
d="M1088 1792c176.768 0 320 -143.232 320 -320v-384c0 -131.2 -78.9756 -243.584 -192 -292.992v150.912c39.04 35.2002 64 85.6318 64 142.08v384c0 105.856 -86.1436 192 -192 192s-192 -86.1436 -192 -192v-384c0 -56.4482 24.96 -106.88 64 -142.08v-150.912
c-112.896 49.4082 -192 161.792 -192 292.992v384c0 176.768 143.232 320 320 320zM960 1380.99c112.896 -49.4082 192 -161.792 192 -292.992v-384c0 -176.768 -143.232 -320 -320 -320s-320 143.232 -320 320v384c0 131.2 79.1035 243.584 192 292.992v-150.912
c-39.04 -35.2002 -64 -85.6318 -64 -142.08v-384c0 -105.856 86.1436 -192 192 -192s192 86.1436 192 192v384c0 56.4482 -24.96 106.88 -64 142.08v150.912z" />
<glyph glyph-name="uniF442" unicode="&#xf442;"
d="M1280 640v256l128 128v-512h-896v896h512l-128 -128h-256v-640h640zM1024 1664h640v-640h-128v421.504l-549.504 -549.504l-90.4961 90.4961l549.504 549.504h-421.504v128z" />
<glyph glyph-name="uniF221" unicode="&#xf221;"
d="M1664 1024c0 -55.9355 -35.9678 -102.912 -85.8877 -120.32c13.8232 -20.6074 21.8877 -45.0557 21.8877 -71.6797c0 -55.8076 -35.9678 -102.784 -85.8877 -120.32c13.8232 -20.6074 21.8877 -45.0557 21.8877 -71.6797c0 -70.6562 -57.3438 -128 -128 -128h-64
c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128h-448c-192 0 -256 128 -384 128h-128v640h192c128 0 320 256 320 640c0 0 0 128 64 128s192 -144 192 -320c0 -192 -32 -320 -32 -320h416c70.6562 0 128 -57.3438 128 -128z" />
<glyph glyph-name="uniF50A" unicode="&#xf50a;"
d="M1856 1024c35.3281 0 64 -28.6719 64 -64s-28.6719 -64 -64 -64h-204.928c-9.85645 -48.7676 -26.624 -94.5918 -46.8486 -138.624c116.608 -134.528 187.776 -309.376 187.776 -501.376v-64c0 -35.2002 -28.6719 -64 -64 -64s-64 28.7998 -64 64v64
c0 144.896 -48.7676 277.888 -130.048 385.152c-116.736 -155.265 -300.672 -257.152 -509.952 -257.152c-208.768 0 -392.448 101.504 -509.312 256.128c-81.2803 -106.88 -130.688 -239.231 -130.688 -384.128v-64c0 -35.2002 -28.6719 -64 -64 -64s-64 28.7998 -64 64v64
c0 192 71.2959 366.72 187.904 501.376c-20.3525 44.0322 -36.9922 89.8564 -46.9766 138.624h-204.928c-35.3281 0 -64 28.6719 -64 64s28.6719 64 64 64h192c0 61.6963 12.1602 119.936 29.0557 176c-98.1758 129.024 -157.056 289.408 -157.056 464v64
c0 35.3281 28.6719 64 64 64s64 -28.6719 64 -64v-64c0 -353.408 286.592 -640 640 -640c353.536 0 640 286.592 640 640v64c0 35.3281 28.6719 64 64 64s64 -28.6719 64 -64v-64c0 -173.952 -58.4961 -333.824 -156.032 -462.592
c17.2803 -56.3203 28.0322 -115.328 28.0322 -177.408h192zM1024 1152c-208.896 0 -388.352 126.08 -467.84 305.92c116.864 126.08 282.496 206.08 467.84 206.08c185.472 0 350.976 -80 467.84 -206.08c-79.4883 -179.84 -258.815 -305.92 -467.84 -305.92z" />
<glyph glyph-name="uniF455" unicode="&#xf455;"
d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768c-424.192 0 -768 343.936 -768 768s343.808 768 768 768zM1024 1536c-70.7842 0 -128 -57.3438 -128 -128s57.2158 -128 128 -128c70.6562 0 128 57.3438 128 128s-57.3438 128 -128 128zM1280 512
v128h-160v512h-320.128v-128h128.128v-384h-160v-128h512z" />
<glyph glyph-name="uniF223" unicode="&#xf223;"
d="M1105.28 1232.51v92.9287c0 44.1592 -36.4805 79.8711 -81.2803 79.8711s-81.2803 -35.7119 -81.2803 -79.8711l-0.383789 -481.024c-2.55957 -184.192 -155.008 -332.416 -342.912 -332.416c-189.696 0 -343.424 150.912 -343.424 337.28v209.151h262.784v-206.592
c0 -43.9043 36.3516 -79.7441 81.2803 -79.7441c44.9277 0 81.2793 35.7119 81.2793 79.7441v487.168c6.65625 180.48 157.185 324.992 342.656 324.992c186.112 0 337.152 -145.536 342.656 -327.04v-106.624l-156.416 -45.8242zM1529.22 1058.43h262.784v-209.151
c0 -186.368 -153.728 -337.28 -343.424 -337.28c-188.544 0 -341.632 149.376 -343.296 334.08v210.304l104.96 -48l156.288 45.8242v-211.84c0 -44.2881 36.3516 -80 81.4072 -80c44.9287 0 81.2803 35.7119 81.2803 80v216.063z" />
<glyph glyph-name="uniF212" unicode="&#xf212;"
d="M1658.75 1791.87c184.192 -5.37598 270.976 -123.776 260.352 -355.072c-7.93555 -172.928 -129.792 -409.472 -365.439 -710.016c-243.584 -313.729 -449.792 -470.784 -618.368 -470.784c-104.448 0 -192.896 95.6162 -264.96 286.72
c-48.2559 175.232 -96.5117 350.336 -144.64 525.568c-53.6318 190.976 -111.232 286.592 -172.672 286.592c-13.4404 0 -60.416 -27.7764 -140.673 -83.584l-84.3516 107.648c88.4482 77.0557 175.616 154.111 261.504 231.168
c117.888 100.991 206.464 154.111 265.472 159.487c139.521 13.3125 225.28 -81.2793 257.536 -283.392c34.8164 -218.24 58.8799 -353.92 72.4482 -407.04c40.1924 -180.992 84.4805 -271.36 132.736 -271.36c37.5039 0 93.8232 58.752 169.088 176.128
c75.0078 117.376 115.2 206.849 120.576 268.16c10.624 101.376 -29.4404 152.192 -120.576 152.192c-43.0078 0 -87.2959 -9.98438 -132.736 -29.1846c88.0645 285.952 256.512 424.704 504.704 416.769z" />
<glyph glyph-name="uniF206" unicode="&#xf206;"
d="M729.6 1152h550.4s12.7998 -38.4004 12.7998 -89.5996c0 -332.801 -230.399 -563.2 -563.2 -563.2c-320 0 -588.8 268.8 -588.8 588.8s281.601 588.8 588.8 588.8c153.601 0 294.4 -51.2002 384 -153.6l-153.6 -153.601c-38.4004 25.6006 -102.4 76.8008 -230.4 76.8008
c-204.8 0 -371.199 -166.4 -371.199 -371.2s166.399 -371.2 371.199 -371.2c230.4 0 320 166.4 332.801 243.2h-332.801v204.8zM1664 1152h128v-128h-128v-128h-128v128h-128v128h128v128h128v-128z" />
<glyph glyph-name="uniF407" unicode="&#xf407;"
d="M1280 1536l256 -128v-128h-128h-128h-128h-128h-128h-128h-128h-128h-128v128l256 128c0 70.7842 57.3438 128 128 128h384c70.7842 0 128 -57.2158 128 -128zM1088 1408c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64h-256c-35.3281 0 -64 -28.6719 -64 -64
s28.6719 -64 64 -64h256zM1280 1216h128v-704c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.6562 0 -128 57.2158 -128 128v704h128v-704h128v704h128v-704h128v704h128v-704h128v704z" />
<glyph glyph-name="uniF414" unicode="&#xf414;"
d="M1996.03 601.984c116.992 -190.208 29.6953 -345.984 -193.536 -345.984h-1556.99c-223.231 0 -310.528 155.776 -193.536 345.984l759.552 1236.99c116.864 190.336 308.097 190.336 424.961 0zM1024 512c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128
c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128zM1113.22 896l51.584 640h-281.6l51.2002 -640h178.815z" />
<glyph glyph-name="uniF50E" unicode="&#xf50e;"
d="M384 896v256h1280v-256h-1280z" />
<glyph glyph-name="uniF461" unicode="&#xf461;"
d="M1024 384l-647.552 612.992c-149.376 141.312 -161.408 383.231 -27.1367 540.288c134.4 157.184 364.416 169.855 513.792 28.5439l160.896 -152.32l160.768 152.32c149.248 141.184 379.393 128.64 513.792 -28.5439
c134.656 -157.057 122.368 -398.977 -27.0078 -540.416z" />
<glyph glyph-name="uniF470" unicode="&#xf470;"
d="M1536 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-1024c-70.6562 0 -128 57.2158 -128 128v640c0 70.6562 57.3438 128 128 128v128c0 282.752 229.248 512 512 512s512 -229.248 512 -512v-128zM768 1152h512v128
c0 141.312 -114.688 256 -256 256s-256 -114.688 -256 -256v-128z" />
<glyph glyph-name="uniF50C" unicode="&#xf50c;"
d="M1479.55 819.2c98.5605 -32 203.137 -51.2002 312.448 -51.2002v-512c-848.256 0 -1536 687.744 -1536 1536h512c0 -162.048 38.5283 -314.752 105.856 -450.816l-189.185 -189.184c136.192 -235.008 344.96 -422.4 595.328 -532.224z" />
<glyph glyph-name="uniF220" unicode="&#xf220;"
d="M1856.77 834.048c32.3848 -65.6641 50.6885 -138.88 50.3047 -217.344c0 -269.696 -218.88 -488.704 -488.576 -488.704c-83.584 0 -161.92 21.376 -230.656 58.1123c-50.4316 -8.83203 -102.016 -13.8242 -154.496 -13.8242
c-465.279 0 -842.624 377.216 -842.624 842.496c0 58.2402 6.14453 114.688 17.2803 169.6c-42.4961 72.1924 -67.0723 156.8 -67.0723 246.912c0 269.824 218.88 488.704 488.704 488.704c95.7441 0 184.704 -27.3916 260.225 -75.0078
c46.4639 7.80762 94.5918 12.416 143.871 12.416c465.408 0 842.624 -377.344 842.624 -842.624c0 -62.0801 -6.65527 -122.752 -19.584 -180.736zM1466.11 612.096c38.9121 55.5527 58.624 118.656 58.752 188.16c0 58.2402 -11.2646 107.904 -34.1758 148.353
c-22.9121 40.3193 -54.7842 73.8555 -95.2324 100.224c-39.168 25.7275 -87.8076 48.1279 -143.744 66.0479c-55.4238 17.9199 -118.271 34.1758 -186.496 48.6396c-53.7598 12.416 -93.0557 21.8887 -116.479 28.6729c-23.04 6.14355 -45.4404 15.2314 -67.8398 26.3672
c-21.8887 10.624 -38.5283 23.5527 -50.4326 38.0166c-11.1357 13.9521 -16.7676 30.3359 -16.7676 49.2803c0 31.2314 16.8955 57.4717 52.2236 80.5117c36.3525 23.5518 85.6318 35.9678 146.048 35.9678c64.8965 0 112.384 -11.2637 140.544 -32.6396
c29.1846 -21.6318 54.2725 -53.6318 75.5205 -93.3125c18.5596 -31.3594 34.9434 -53.248 50.6875 -67.2002c16.3838 -14.5918 40.5762 -22.3994 71.9365 -22.3994c34.9434 0 63.8721 12.416 86.9121 36.4795c23.04 23.4248 34.6875 50.8164 34.6875 81.1523
c0 31.3604 -9.08789 63.3604 -25.2158 95.7441c-17.2803 32.3838 -44.7998 63.1035 -81.9199 92.2881c-36.8643 28.5439 -83.8398 52.0957 -139.008 69.5039c-55.8086 16.7676 -121.729 25.5996 -196.736 25.5996c-94.7197 0 -177.536 -13.1836 -247.424 -39.04
c-70.5283 -26.3682 -125.952 -64.3838 -163.584 -113.664c-38.0166 -49.2793 -56.96 -106.496 -56.96 -170.239c0 -67.2002 17.792 -123.776 54.2715 -169.217c35.0723 -44.1592 83.9688 -79.8721 144.385 -105.728c58.752 -25.2158 133.247 -47.3604 220.672 -66.0479
c64.2559 -13.3125 115.712 -26.2402 154.239 -38.0166c36.8643 -11.2637 67.3281 -27.9033 89.9844 -49.2793c22.1436 -20.7363 32.6396 -46.9766 32.6396 -80.1279c0 -42.3682 -20.2236 -76.8008 -62.0801 -105.345c-43.1357 -29.0557 -100.352 -43.9033 -169.728 -43.9033
c-50.9443 0 -92.416 7.16797 -122.624 21.6318c-30.3359 13.9521 -54.2715 32.5117 -70.5283 54.2715c-17.2793 22.6562 -33.4072 51.4561 -48.6396 85.7607c-13.4404 31.3594 -29.5684 55.8076 -49.2803 72.0635c-20.7354 17.2803 -45.3115 25.7285 -74.4961 25.7285
c-35.0713 0 -64.7676 -10.3682 -87.8076 -32.3848c-23.5518 -21.8877 -35.3281 -48.6396 -35.3281 -79.6152c0 -48.8965 17.9199 -100.608 53.8877 -152.192c35.0723 -50.9443 82.3047 -92.416 138.752 -123.136c79.3604 -41.8564 180.864 -63.1045 301.696 -63.1045
c100.736 0 189.44 15.4883 263.04 46.208c75.3926 30.9766 132.225 74.4961 171.648 129.92z" />
<glyph glyph-name="uniF415" unicode="&#xf415;"
d="M1408 1024h512v-256h-310.016c-98.8164 -225.92 -323.584 -384 -585.984 -384c-176.768 0 -335.488 72.832 -451.072 188.928l0.640625 0.640625c-50.0488 50.0479 -50.0488 130.943 0 180.991c50.0479 50.0488 130.943 50.1768 180.991 0
c69.376 -69.6318 163.456 -114.56 269.44 -114.56c212.096 0 384 171.904 384 384zM1024 1408c-212.096 0 -384 -171.904 -384 -384h-512v256h310.016c98.8164 225.92 323.712 384 585.984 384c176.896 0 335.488 -72.96 451.072 -188.928
c50.0479 -50.0479 50.0479 -130.944 0 -180.992s-130.944 -50.0479 -180.992 0l-0.639648 -0.639648c-69.376 69.6318 -163.328 114.56 -269.44 114.56zM832 1024c0 106.112 86.0156 192 192 192c106.112 0 192 -85.8877 192 -192s-85.8877 -192 -192 -192
c-105.984 0 -192 85.8877 -192 192z" />
<glyph glyph-name="uniF207" unicode="&#xf207;"
d="M604.672 256h-329.216v990.72h329.216v-990.72zM440.064 1381.89h-2.04883c-110.464 0 -182.016 76.1602 -182.016 171.137c0 97.1514 73.5996 171.136 186.368 171.136c112.512 0 181.888 -74.1123 184.063 -171.136c0 -94.9766 -71.5518 -171.137 -186.367 -171.137z
M1792 256h-329.216v530.048c0 133.12 -47.3604 224 -166.656 224c-91.1357 0 -145.28 -61.1836 -169.088 -120.32c-8.57617 -21.2471 -10.752 -50.9434 -10.752 -80.5117v-553.216h-329.344s4.35156 897.792 0 990.72h329.344v-140.416
c43.7764 67.4561 121.984 163.584 296.448 163.584c216.704 0 379.264 -141.567 379.264 -445.823v-568.064z" />
<glyph glyph-name="uniF500" unicode="&#xf500;"
d="M2048 0h-1920l960 959.872z" />
<glyph glyph-name="uniF302" unicode="&#xf302;"
d="M1024 1536h512v-512l-768 -768l-512 512zM1280 1152c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128s-128 -57.2158 -128 -128s57.2158 -128 128 -128z" />
<glyph glyph-name="uniF108" unicode="&#xf108;"
d="M1664 1536c141.312 0 256 -114.688 256 -256v-384c0 -141.312 -114.688 -256 -256 -256h-128v-448l-448 448h-331.008l128 128h395.008c211.712 0 384 172.288 384 384v384zM1280 1792c141.312 0 256 -114.688 256 -256v-384c0 -141.312 -114.688 -256 -256 -256h-448
l-448 -448v448h-128c-141.312 0 -256 114.688 -256 256v384c0 141.312 114.688 256 256 256h1024z" />
<glyph glyph-name="uniF405" unicode="&#xf405;"
d="M1536 1408l-320 -320l320 -320l-128 -128l-320 320l-320 -320l-128 128l320 320l-320 320l128 128l320 -320l320 320z" />
<glyph glyph-name="uniF501" unicode="&#xf501;"
d="M0 128v1920l960 -960z" />
<glyph glyph-name="uniF50D" unicode="&#xf50d;"
d="M1024.13 896c-105.984 0 -192.128 86.0156 -192.128 192v512c0 105.856 86.1436 192 192.128 192c106.112 0 191.872 -86.1436 191.872 -192v-512c0 -105.984 -85.7598 -192 -191.872 -192zM1401.47 1024h192c-27.3916 -244.48 -206.464 -441.984 -441.472 -496v-272
h-256v272c-234.88 54.0156 -414.08 251.52 -441.472 496h192c30.5918 -181.504 187.52 -320 377.472 -320c190.208 0 347.008 138.496 377.472 320z" />
<glyph glyph-name="uniF503" unicode="&#xf503;"
d="M2048 2048v-1920l-960 960z" />
<glyph glyph-name="uniF101" unicode="&#xf101;"
d="M1024 1792c424.064 0 768 -343.936 768 -768s-343.936 -768 -768 -768s-768 343.936 -768 768s343.936 768 768 768zM1024 768c141.312 0 256 114.688 256 256s-114.688 256 -256 256s-256 -114.688 -256 -256s114.688 -256 256 -256z" />
<glyph glyph-name="uniF204" unicode="&#xf204;"
d="M1182.21 1271.81h328.704l-14.4639 -302.72h-314.24v-841.088h-320.128v841.088h-222.08v302.72h222.08v258.561c0 203.008 131.456 389.632 434.176 389.632c122.496 0 212.992 -11.6484 212.992 -11.6484l-7.04004 -282.624s-92.5439 0.640625 -193.536 0.640625
c-108.928 0 -126.464 -50.3037 -126.464 -133.504c0 -12.416 0 -15.3604 0 -13.9521v-207.104z" />
<glyph glyph-name="uniF444" unicode="&#xf444;"
d="M1600 640c-70.7842 0 -128 -57.2158 -128 -128s57.2158 -128 128 -128h64v-128h-1024c-141.312 0 -256 114.688 -256 256v1024c0 141.312 114.688 256 256 256h1024v-1152h-64zM640 384h817.92c-30.7197 34.0479 -49.9199 78.5918 -49.9199 128
s19.2002 93.9521 49.9199 128h-817.92c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128z" />
<glyph glyph-name="uniF416" unicode="&#xf416;"
d="M1088 1792c176.768 0 320 -143.232 320 -320v-640c0 -247.424 -200.576 -448 -448 -448s-448 200.576 -448 448v320h128v-320c0 -176.768 143.232 -320 320 -320c176.64 0 320 143.232 320 320v640c0 105.984 -86.0156 192 -192 192c-106.112 0 -192 -86.0156 -192 -192
v-512c0 -35.3281 28.6719 -64 64 -64s64 28.6719 64 64v451.968h128v-451.968c0 -105.984 -86.0156 -192 -192 -192c-106.112 0 -192 86.0156 -192 192v512c0 176.768 143.232 320 320 320z" />
<glyph glyph-name="uniF459" unicode="&#xf459;"
d="M1920 1664v-1280l-768 480v-480l-1024 640l1024 640v-480z" />
<glyph glyph-name="uniF441" unicode="&#xf441;"
d="M1664 1024c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256h-512v256h256l-384 384l-384 -384h256v-256h-512c-141.312 0 -256 114.688 -256 256s114.688 256 256 256h6.40039c-4.09668 20.7363 -6.40039 42.1123 -6.40039 64c0 176.768 143.232 320 320 320
c89.3438 0 169.984 -36.7363 227.968 -95.8721c60.7998 131.84 193.408 223.872 348.032 223.872c211.968 0 384 -171.904 384 -384c0 -45.1836 -9.21582 -87.8076 -23.5518 -128h23.5518z" />
<glyph glyph-name="uniF506" unicode="&#xf506;"
d="M768 1920l489.344 -489.472l-640 -640l-268.928 269.056c-49.792 49.792 -49.792 131.2 0 180.992l292.864 292.735l-1.28027 2.68848s128 128 128 384zM1738.24 565.76c33.1514 -32.7676 53.7598 -78.208 53.7598 -128.64c0 -99.9678 -81.1523 -181.12 -181.12 -181.12
c-50.4316 0 -95.7441 20.6084 -128.64 53.7598l-330.24 330.24v128l-64 64c-35.2002 35.2002 -104.704 23.2959 -154.496 -26.4961l-75.0078 -75.0078c-49.792 -49.792 -131.2 -49.792 -180.992 0l-14.8477 14.8477l640 640l14.8477 -14.8477
c49.792 -49.792 49.792 -131.2 0 -180.992l-75.0078 -75.0078c-49.792 -49.792 -61.6963 -119.296 -26.4961 -154.496l64 -64h128zM1610.88 373.12c35.3281 0 64 28.6719 64 64s-28.6719 64 -64 64s-64 -28.6719 -64 -64s28.6719 -64 64 -64z" />
<glyph glyph-name="uniF105" unicode="&#xf105;"
d="M1408 1408c0 -167.04 -107.264 -307.584 -256 -360.448v-535.552l-256 -128v663.552c-148.864 52.8643 -256 193.408 -256 360.448c0 212.096 171.904 384 384 384c211.968 0 384 -171.904 384 -384z" />
<glyph glyph-name="uniF473" unicode="&#xf473;"
d="M384 1664h1280v-1280h-1280v1280zM768 1408c-70.6562 0 -128 -57.3438 -128 -128s57.3438 -128 128 -128s128 57.3438 128 128s-57.3438 128 -128 128zM1536 512v576l-128 192l-448 -672l-192 288l-256 -384h1024z" />
<glyph glyph-name="uniF452" unicode="&#xf452;"
d="M512 1664l1024 -640l-1024 -640v1280z" />
<glyph glyph-name="uniF408" unicode="&#xf408;"
d="M1792 1150.72l-475.904 -329.983l182.528 -535.04l-474.624 331.903l-474.624 -331.903l182.528 535.04l-475.904 329.983l587.52 -1.02344l180.48 535.68l180.48 -535.68z" />
<glyph glyph-name="uniF450" unicode="&#xf450;"
d="M768 1024l1024 640v-1280zM256 384v1280h384v-1280h-384z" />
<glyph glyph-name="uniF517" unicode="&#xf517;"
d="M1408 1152l384 384v-1024l-384 384v-256c0 -70.7842 -57.2158 -128 -128 -128h-896c-70.6562 0 -128 57.2158 -128 128v768c0 70.6562 57.3438 128 128 128h896c70.7842 0 128 -57.3438 128 -128v-256z" />
<glyph glyph-name="uniF106" unicode="&#xf106;"
d="M256 896v640h640v-640c0 -282.752 -229.248 -512 -512 -512v256c141.312 0 256 114.688 256 256h-384zM1152 1536h640v-640c0 -282.752 -229.248 -512 -512 -512v256c141.312 0 256 114.688 256 256h-384v640z" />
<glyph glyph-name="uniF208" unicode="&#xf208;"
d="M1664 1920c141.312 0 256 -114.688 256 -256v-1280c0 -141.312 -114.688 -256 -256 -256h-1280c-141.312 0 -256 114.688 -256 256v1280c0 141.312 114.688 256 256 256h1280zM663.168 384v792.96h-263.552v-792.96h263.552zM531.328 1285.25
c91.9043 0 149.12 60.9277 149.12 136.96c-1.66406 77.6963 -57.2158 136.96 -147.328 136.96c-90.2402 0 -149.12 -59.2637 -149.12 -136.96c0 -76.0322 57.2158 -136.96 145.664 -136.96h1.66406zM1613.44 384v454.656c0 243.456 -130.049 356.863 -303.488 356.863
c-139.776 0 -202.496 -76.9277 -237.44 -130.943v112.384h-263.552c3.45605 -74.3682 0 -792.96 0 -792.96h263.552v442.88c0 23.6797 1.79199 47.3604 8.57617 64.1279c19.0723 47.3604 62.4639 96.3838 135.296 96.3838c95.4883 0 133.504 -72.7031 133.504 -179.199
v-424.192h263.553z" />
<glyph glyph-name="uniF304" unicode="&#xf304;"
d="M1024 1152c-141.312 0 -256 114.688 -256 256s114.688 256 256 256s256 -114.688 256 -256s-114.688 -256 -256 -256zM1152 1024c211.968 0 384 -171.904 384 -384v-256h-1024v256c0 212.096 172.032 384 384 384h256z" />
<glyph glyph-name="uniF225" unicode="&#xf225;"
d="M655.104 1857.54l368.896 -307.968l-531.456 -328.192l-364.544 291.84zM128 929.536l364.544 291.84l531.456 -328.064l-368.896 -308.096zM1024 893.312l531.456 328.064l364.544 -291.84l-527.232 -344.32zM1920 1513.22l-364.544 -291.84l-531.456 328.192
l368.768 307.968zM1025.02 826.88l369.92 -306.944l158.464 103.297v-115.713l-528.384 -317.056l-528.257 317.056v115.713l158.336 -103.297z" />
<glyph glyph-name="uniF103" unicode="&#xf103;"
d="M1152 1408h896v-896h-896v896zM128 1024v384h896v-384h-896zM640 512v384h384v-384h-384zM128 512v384h384v-384h-384z" />
<glyph glyph-name="uniF431" unicode="&#xf431;"
d="M1408 1280l128 -128l-576 -576l-576 576l128 128l448 -448z" />
<glyph glyph-name="uniF200" unicode="&#xf200;"
d="M1024 2048c565.504 0 1024 -458.496 1024 -1024c0 -452.224 -293.12 -835.712 -699.776 -971.392c-51.9678 -9.98438 -70.3994 21.7598 -70.3994 49.2793c0 33.4082 1.2793 144 1.2793 280.704c0 95.7441 -32.7676 158.208 -69.5039 189.696
c228.097 25.3438 467.456 112 467.456 505.344c0 111.744 -39.5518 203.136 -105.088 274.688c10.4961 25.8555 45.6963 130.048 -10.2402 270.976c0 0 -85.8877 27.5205 -281.344 -104.96c-81.792 22.7842 -169.344 34.0479 -256.384 34.4316
c-87.04 -0.383789 -174.592 -11.6475 -256.384 -34.4316c-195.584 132.48 -281.601 104.96 -281.601 104.96c-55.6797 -140.928 -20.4795 -244.992 -9.85547 -270.976c-65.5361 -71.5527 -105.472 -162.944 -105.472 -274.688c0 -392.32 239.104 -480.384 466.432 -506.112
c-29.3125 -25.7275 -55.6797 -70.6553 -65.0244 -136.96c-58.2393 -26.2393 -206.72 -71.2959 -297.983 85.248c0 0 -54.1445 98.1768 -156.929 105.473c0 0 -100.096 1.2793 -7.04004 -62.208c0 0 67.0723 -31.4883 113.664 -150.017c0 0 60.0322 -198.912 344.96 -137.216
c0.512695 -85.248 1.4082 -149.76 1.4082 -173.952c0 -27.2637 -18.6875 -58.752 -69.8877 -49.5361c-406.912 135.425 -700.288 519.168 -700.288 971.648c0 565.504 458.496 1024 1024 1024z" />
<glyph glyph-name="uniF421" unicode="&#xf421;"
d="M384 896v256h1152v-256h-1152z" />
<glyph glyph-name="uniF454" unicode="&#xf454;"
d="M640 896v128h-512v256h512v128l384 -256zM1536 2048c141.312 0 256 -114.688 256 -256v-1536c0 -141.312 -114.688 -256 -256 -256h-1024c-141.312 0 -256 114.688 -256 256v640h256v-384h1024v1280h-1024v-384h-256v384c0 141.312 114.688 256 256 256h1024zM1024 128
c70.7842 0 128 57.2158 128 128s-57.2158 128 -128 128c-70.6562 0 -128 -57.2158 -128 -128s57.3438 -128 128 -128z" />
<glyph glyph-name="uniF213" unicode="&#xf213;"
d="M1536 1664c211.968 0 384 -171.904 384 -384v-512c0 -212.096 -172.032 -384 -384 -384h-1024c-212.096 0 -384 171.904 -384 384v512c0 212.096 171.904 384 384 384h1024zM768 640l640 384l-640 384v-768z" />
<glyph glyph-name="uniF401" unicode="&#xf401;"
d="M1297.15 878.848l494.848 -494.848l-128 -128l-494.848 494.848c-94.8486 -68.9912 -210.816 -110.848 -337.152 -110.848c-318.08 0 -576 257.92 -576 576s257.92 576 576 576s576 -257.92 576 -576c0 -126.336 -41.8564 -242.304 -110.848 -337.152zM832 768
c247.552 0 448 200.576 448 448s-200.448 448 -448 448c-247.424 0 -448 -200.576 -448 -448s200.576 -448 448 -448zM512 1152v128h640v-128h-640z" />
<glyph glyph-name="uniF436" unicode="&#xf436;"
d="M512 1408v128h128v-128h-128zM768 1408v128h128v-128h-128zM1024 1408v128h128v-128h-128zM1280 1536h128v-128h-128v128zM512 1152v128h128v-128h-128zM768 1152v128h128v-128h-128zM1024 1152v128h128v-128h-128zM1280 1152v128h128v-128h-128zM512 896v128h128v-128
h-128zM768 896v128h128v-128h-128zM1024 896v128h128v-128h-128zM1280 896v128h128v-128h-128zM512 640v128h128v-128h-128zM768 640v128h128v-128h-128zM1024 640v128h128v-128h-128zM1280 640v128h128v-128h-128z" />
<glyph glyph-name="uniF434" unicode="&#xf434;"
d="M1152 0l896 896v-896h-896z" />
<glyph glyph-name="uniF303" unicode="&#xf303;"
d="M960 1792c388.736 0 704 -315.136 704 -704c0 -388.736 -315.264 -704 -704 -704c-388.864 0 -704 315.264 -704 704c0 388.864 315.136 704 704 704zM960 512c317.952 0 576 257.92 576 576s-258.048 576 -576 576c-318.08 0 -576 -257.92 -576 -576
s257.92 -576 576 -576zM1024 1536v-421.504l297.984 -297.984l-90.4961 -90.4961l-335.488 335.488v474.496h128z" />
<glyph glyph-name="uniF464" unicode="&#xf464;"
d="M1536 1408l-768 -384l-768 384v128h1536v-128zM0 1216l768 -384l256 128v-448h-1024v704zM1920 1152c70.7842 0 128 -57.3438 128 -128v-640c0 -70.7842 -57.2158 -128 -128 -128h-640c-70.7842 0 -128 57.2158 -128 128v640c0 70.6562 57.2158 128 128 128h640z
M1920 640v128h-640v-128h640z" />
<glyph glyph-name="uniF109" unicode="&#xf109;"
d="M256 1280h384l384 384v-1280l-384 384h-384v512zM1295.49 1295.62c69.5039 -69.5039 112.512 -165.504 112.512 -271.616s-43.0078 -202.112 -112.512 -271.488l-90.4961 90.4961c46.3359 46.208 75.0078 110.208 75.0078 180.992
c0 70.6562 -28.6719 134.656 -75.0078 181.12zM1476.61 1476.61c115.712 -115.841 187.392 -275.841 187.392 -452.608c0 -176.896 -71.6797 -336.896 -187.392 -452.608l-90.4961 90.4961c92.6719 92.6719 149.888 220.672 149.888 362.112
c0 141.312 -57.2158 269.44 -149.888 361.984z" />
<glyph glyph-name="uniF428" unicode="&#xf428;"
d="M1024 1280c141.312 0 256 -114.688 256 -256s-114.688 -256 -256 -256s-256 114.688 -256 256s114.688 256 256 256z" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -0,0 +1,922 @@
@font-face {
font-family: 'Elusive-Icons';
src:url('./Elusive-Icons.eot');
src:url('./Elusive-Icons.eot?#iefix') format('embedded-opentype'),
url('./Elusive-Icons.ttf') format('truetype'),
url('./Elusive-Icons.woff') format('woff'),
url('./Elusive-Icons.svg#Elusive-Icons') format('svg');
font-weight: normal;
font-style: normal;
}
[class*="el-icon-"] {
font-family: 'Elusive-Icons';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-icon-zoom-out:before {
content: "\e600";
}
.el-icon-zoom-in:before {
content: "\e601";
}
.el-icon-youtube:before {
content: "\e602";
}
.el-icon-wrench-alt:before {
content: "\e603";
}
.el-icon-wrench:before {
content: "\e604";
}
.el-icon-wordpress:before {
content: "\e605";
}
.el-icon-wheelchair:before {
content: "\e606";
}
.el-icon-website-alt:before {
content: "\e607";
}
.el-icon-website:before {
content: "\e608";
}
.el-icon-warning-sign:before {
content: "\e609";
}
.el-icon-w3c:before {
content: "\e60a";
}
.el-icon-volume-up:before {
content: "\e60b";
}
.el-icon-volume-off:before {
content: "\e60c";
}
.el-icon-volume-down:before {
content: "\e60d";
}
.el-icon-vkontakte:before {
content: "\e60e";
}
.el-icon-vimeo:before {
content: "\e60f";
}
.el-icon-view-mode:before {
content: "\e610";
}
.el-icon-video-chat:before {
content: "\e611";
}
.el-icon-video-alt:before {
content: "\e612";
}
.el-icon-video:before {
content: "\e613";
}
.el-icon-viadeo:before {
content: "\e614";
}
.el-icon-user:before {
content: "\e615";
}
.el-icon-usd:before {
content: "\e616";
}
.el-icon-upload:before {
content: "\e617";
}
.el-icon-unlock-alt:before {
content: "\e618";
}
.el-icon-unlock:before {
content: "\e619";
}
.el-icon-universal-access:before {
content: "\e61a";
}
.el-icon-twitter:before {
content: "\e61b";
}
.el-icon-tumblr:before {
content: "\e61c";
}
.el-icon-trash-alt:before {
content: "\e61d";
}
.el-icon-trash:before {
content: "\e61e";
}
.el-icon-torso:before {
content: "\e61f";
}
.el-icon-tint:before {
content: "\e620";
}
.el-icon-time-alt:before {
content: "\e621";
}
.el-icon-time:before {
content: "\e622";
}
.el-icon-thumbs-up:before {
content: "\e623";
}
.el-icon-thumbs-down:before {
content: "\e624";
}
.el-icon-th-list:before {
content: "\e625";
}
.el-icon-th-large:before {
content: "\e626";
}
.el-icon-th:before {
content: "\e627";
}
.el-icon-text-width:before {
content: "\e628";
}
.el-icon-text-height:before {
content: "\e629";
}
.el-icon-tasks:before {
content: "\e62a";
}
.el-icon-tags:before {
content: "\e62b";
}
.el-icon-tag:before {
content: "\e62c";
}
.el-icon-stumbleupon:before {
content: "\e62d";
}
.el-icon-stop-alt:before {
content: "\e62e";
}
.el-icon-stop:before {
content: "\e62f";
}
.el-icon-step-forward:before {
content: "\e630";
}
.el-icon-step-backward:before {
content: "\e631";
}
.el-icon-star-empty:before {
content: "\e632";
}
.el-icon-star-alt:before {
content: "\e633";
}
.el-icon-star:before {
content: "\e634";
}
.el-icon-stackoverflow:before {
content: "\e635";
}
.el-icon-spotify:before {
content: "\e636";
}
.el-icon-speaker:before {
content: "\e637";
}
.el-icon-soundcloud:before {
content: "\e638";
}
.el-icon-smiley-alt:before {
content: "\e639";
}
.el-icon-smiley:before {
content: "\e63a";
}
.el-icon-slideshare:before {
content: "\e63b";
}
.el-icon-skype:before {
content: "\e63c";
}
.el-icon-signal:before {
content: "\e63d";
}
.el-icon-shopping-cart-sign:before {
content: "\e63e";
}
.el-icon-shopping-cart:before {
content: "\e63f";
}
.el-icon-share-alt:before {
content: "\e640";
}
.el-icon-share:before {
content: "\e641";
}
.el-icon-search-alt:before {
content: "\e642";
}
.el-icon-search:before {
content: "\e643";
}
.el-icon-screenshot:before {
content: "\e644";
}
.el-icon-screen-alt:before {
content: "\e645";
}
.el-icon-screen:before {
content: "\e646";
}
.el-icon-scissors:before {
content: "\e647";
}
.el-icon-rss:before {
content: "\e648";
}
.el-icon-road:before {
content: "\e649";
}
.el-icon-reverse-alt:before {
content: "\e64a";
}
.el-icon-retweet:before {
content: "\e64b";
}
.el-icon-return-key:before {
content: "\e64c";
}
.el-icon-resize-vertical:before {
content: "\e64d";
}
.el-icon-resize-small:before {
content: "\e64e";
}
.el-icon-resize-horizontal:before {
content: "\e64f";
}
.el-icon-resize-full:before {
content: "\e650";
}
.el-icon-repeat-alt:before {
content: "\e651";
}
.el-icon-repeat:before {
content: "\e652";
}
.el-icon-remove-sign:before {
content: "\e653";
}
.el-icon-remove-circle:before {
content: "\e654";
}
.el-icon-remove:before {
content: "\e655";
}
.el-icon-refresh:before {
content: "\e656";
}
.el-icon-reddit:before {
content: "\e657";
}
.el-icon-record:before {
content: "\e658";
}
.el-icon-random:before {
content: "\e659";
}
.el-icon-quotes-alt:before {
content: "\e65a";
}
.el-icon-quotes:before {
content: "\e65b";
}
.el-icon-question-sign:before {
content: "\e65c";
}
.el-icon-question:before {
content: "\e65d";
}
.el-icon-qrcode:before {
content: "\e65e";
}
.el-icon-puzzle:before {
content: "\e65f";
}
.el-icon-print:before {
content: "\e660";
}
.el-icon-podcast:before {
content: "\e661";
}
.el-icon-plus-sign:before {
content: "\e662";
}
.el-icon-plus:before {
content: "\e663";
}
.el-icon-play-circle:before {
content: "\e664";
}
.el-icon-play-alt:before {
content: "\e665";
}
.el-icon-play:before {
content: "\e666";
}
.el-icon-plane:before {
content: "\e667";
}
.el-icon-pinterest:before {
content: "\e668";
}
.el-icon-picture:before {
content: "\e669";
}
.el-icon-picasa:before {
content: "\e66a";
}
.el-icon-photo-alt:before {
content: "\e66b";
}
.el-icon-photo:before {
content: "\e66c";
}
.el-icon-phone-alt:before {
content: "\e66d";
}
.el-icon-phone:before {
content: "\e66e";
}
.el-icon-person:before {
content: "\e66f";
}
.el-icon-pencil-alt:before {
content: "\e670";
}
.el-icon-pencil:before {
content: "\e671";
}
.el-icon-pause-alt:before {
content: "\e672";
}
.el-icon-pause:before {
content: "\e673";
}
.el-icon-path:before {
content: "\e674";
}
.el-icon-paper-clip-alt:before {
content: "\e675";
}
.el-icon-paper-clip:before {
content: "\e676";
}
.el-icon-opensource:before {
content: "\e677";
}
.el-icon-ok-sign:before {
content: "\e678";
}
.el-icon-ok-circle:before {
content: "\e679";
}
.el-icon-ok:before {
content: "\e67a";
}
.el-icon-off:before {
content: "\e67b";
}
.el-icon-network:before {
content: "\e67c";
}
.el-icon-myspace:before {
content: "\e67d";
}
.el-icon-music:before {
content: "\e67e";
}
.el-icon-move:before {
content: "\e67f";
}
.el-icon-minus-sign:before {
content: "\e680";
}
.el-icon-minus:before {
content: "\e681";
}
.el-icon-mic-alt:before {
content: "\e682";
}
.el-icon-mic:before {
content: "\e683";
}
.el-icon-map-marker-alt:before {
content: "\e684";
}
.el-icon-map-marker:before {
content: "\e685";
}
.el-icon-male:before {
content: "\e686";
}
.el-icon-magnet:before {
content: "\e687";
}
.el-icon-magic:before {
content: "\e688";
}
.el-icon-lock-alt:before {
content: "\e689";
}
.el-icon-lock:before {
content: "\e68a";
}
.el-icon-livejournal:before {
content: "\e68b";
}
.el-icon-list-alt:before {
content: "\e68c";
}
.el-icon-list:before {
content: "\e68d";
}
.el-icon-linkedin:before {
content: "\e68e";
}
.el-icon-link:before {
content: "\e68f";
}
.el-icon-lines:before {
content: "\e690";
}
.el-icon-leaf:before {
content: "\e691";
}
.el-icon-lastfm:before {
content: "\e692";
}
.el-icon-laptop-alt:before {
content: "\e693";
}
.el-icon-laptop:before {
content: "\e694";
}
.el-icon-key:before {
content: "\e695";
}
.el-icon-italic:before {
content: "\e696";
}
.el-icon-iphone-home:before {
content: "\e697";
}
.el-icon-instagram:before {
content: "\e698";
}
.el-icon-info-sign:before {
content: "\e699";
}
.el-icon-indent-right:before {
content: "\e69a";
}
.el-icon-indent-left:before {
content: "\e69b";
}
.el-icon-inbox-box:before {
content: "\e69c";
}
.el-icon-inbox-alt:before {
content: "\e69d";
}
.el-icon-inbox:before {
content: "\e69e";
}
.el-icon-idea-alt:before {
content: "\e69f";
}
.el-icon-idea:before {
content: "\e6a0";
}
.el-icon-hourglass:before {
content: "\e6a1";
}
.el-icon-home-alt:before {
content: "\e6a2";
}
.el-icon-home:before {
content: "\e6a3";
}
.el-icon-heart-empty:before {
content: "\e6a4";
}
.el-icon-heart-alt:before {
content: "\e6a5";
}
.el-icon-heart:before {
content: "\e6a6";
}
.el-icon-hearing-impaired:before {
content: "\e6a7";
}
.el-icon-headphones:before {
content: "\e6a8";
}
.el-icon-hdd:before {
content: "\e6a9";
}
.el-icon-hand-up:before {
content: "\e6aa";
}
.el-icon-hand-right:before {
content: "\e6ab";
}
.el-icon-hand-left:before {
content: "\e6ac";
}
.el-icon-hand-down:before {
content: "\e6ad";
}
.el-icon-guidedog:before {
content: "\e6ae";
}
.el-icon-group-alt:before {
content: "\e6af";
}
.el-icon-group:before {
content: "\e6b0";
}
.el-icon-graph-alt:before {
content: "\e6b1";
}
.el-icon-graph:before {
content: "\e6b2";
}
.el-icon-googleplus:before {
content: "\e6b3";
}
.el-icon-globe-alt:before {
content: "\e6b4";
}
.el-icon-globe:before {
content: "\e6b5";
}
.el-icon-glasses:before {
content: "\e6b6";
}
.el-icon-glass:before {
content: "\e6b7";
}
.el-icon-github-text:before {
content: "\e6b8";
}
.el-icon-github:before {
content: "\e6b9";
}
.el-icon-gift:before {
content: "\e6ba";
}
.el-icon-gbp:before {
content: "\e6bb";
}
.el-icon-fullscreen:before {
content: "\e6bc";
}
.el-icon-friendfeed-rect:before {
content: "\e6bd";
}
.el-icon-friendfeed:before {
content: "\e6be";
}
.el-icon-foursquare:before {
content: "\e6bf";
}
.el-icon-forward-alt:before {
content: "\e6c0";
}
.el-icon-forward:before {
content: "\e6c1";
}
.el-icon-fork:before {
content: "\e6c2";
}
.el-icon-fontsize:before {
content: "\e6c3";
}
.el-icon-font:before {
content: "\e6c4";
}
.el-icon-folder-sign:before {
content: "\e6c5";
}
.el-icon-folder-open:before {
content: "\e6c6";
}
.el-icon-folder-close:before {
content: "\e6c7";
}
.el-icon-folder:before {
content: "\e6c8";
}
.el-icon-flickr:before {
content: "\e6c9";
}
.el-icon-flag-alt:before {
content: "\e6ca";
}
.el-icon-flag:before {
content: "\e6cb";
}
.el-icon-fire:before {
content: "\e6cc";
}
.el-icon-filter:before {
content: "\e6cd";
}
.el-icon-film:before {
content: "\e6ce";
}
.el-icon-file-new-alt:before {
content: "\e6cf";
}
.el-icon-file-new:before {
content: "\e6d0";
}
.el-icon-file-edit-alt:before {
content: "\e6d1";
}
.el-icon-file-edit:before {
content: "\e6d2";
}
.el-icon-file-alt:before {
content: "\e6d3";
}
.el-icon-file:before {
content: "\e6d4";
}
.el-icon-female:before {
content: "\e6d5";
}
.el-icon-fast-forward:before {
content: "\e6d6";
}
.el-icon-fast-backward:before {
content: "\e6d7";
}
.el-icon-facetime-video:before {
content: "\e6d8";
}
.el-icon-facebook:before {
content: "\e6d9";
}
.el-icon-eye-open:before {
content: "\e6da";
}
.el-icon-eye-close:before {
content: "\e6db";
}
.el-icon-exclamation-sign:before {
content: "\e6dc";
}
.el-icon-eur:before {
content: "\e6dd";
}
.el-icon-error-alt:before {
content: "\e6de";
}
.el-icon-error:before {
content: "\e6df";
}
.el-icon-envelope-alt:before {
content: "\e6e0";
}
.el-icon-envelope:before {
content: "\e6e1";
}
.el-icon-eject:before {
content: "\e6e2";
}
.el-icon-edit:before {
content: "\e6e3";
}
.el-icon-dribbble:before {
content: "\e6e4";
}
.el-icon-download-alt:before {
content: "\e6e5";
}
.el-icon-download:before {
content: "\e6e6";
}
.el-icon-digg:before {
content: "\e6e7";
}
.el-icon-deviantart:before {
content: "\e6e8";
}
.el-icon-delicious:before {
content: "\e6e9";
}
.el-icon-dashboard:before {
content: "\e6ea";
}
.el-icon-css:before {
content: "\e6eb";
}
.el-icon-credit-card:before {
content: "\e6ec";
}
.el-icon-compass-alt:before {
content: "\e6ed";
}
.el-icon-compass:before {
content: "\e6ee";
}
.el-icon-comment-alt:before {
content: "\e6ef";
}
.el-icon-comment:before {
content: "\e6f0";
}
.el-icon-cogs:before {
content: "\e6f1";
}
.el-icon-cog-alt:before {
content: "\e6f2";
}
.el-icon-cog:before {
content: "\e6f3";
}
.el-icon-cloud-alt:before {
content: "\e6f4";
}
.el-icon-cloud:before {
content: "\e6f5";
}
.el-icon-circle-arrow-up:before {
content: "\e6f6";
}
.el-icon-circle-arrow-right:before {
content: "\e6f7";
}
.el-icon-circle-arrow-left:before {
content: "\e6f8";
}
.el-icon-circle-arrow-down:before {
content: "\e6f9";
}
.el-icon-child:before {
content: "\e6fa";
}
.el-icon-chevron-up:before {
content: "\e6fb";
}
.el-icon-chevron-right:before {
content: "\e6fc";
}
.el-icon-chevron-left:before {
content: "\e6fd";
}
.el-icon-chevron-down:before {
content: "\e6fe";
}
.el-icon-check-empty:before {
content: "\e6ff";
}
.el-icon-check:before {
content: "\e700";
}
.el-icon-certificate:before {
content: "\e701";
}
.el-icon-cc:before {
content: "\e702";
}
.el-icon-caret-up:before {
content: "\e703";
}
.el-icon-caret-right:before {
content: "\e704";
}
.el-icon-caret-left:before {
content: "\e705";
}
.el-icon-caret-down:before {
content: "\e706";
}
.el-icon-car:before {
content: "\e707";
}
.el-icon-camera:before {
content: "\e708";
}
.el-icon-calendar-sign:before {
content: "\e709";
}
.el-icon-calendar:before {
content: "\e70a";
}
.el-icon-bullhorn:before {
content: "\e70b";
}
.el-icon-bulb:before {
content: "\e70c";
}
.el-icon-brush:before {
content: "\e70d";
}
.el-icon-broom:before {
content: "\e70e";
}
.el-icon-briefcase:before {
content: "\e70f";
}
.el-icon-braille:before {
content: "\e710";
}
.el-icon-bookmark-empty:before {
content: "\e711";
}
.el-icon-bookmark:before {
content: "\e712";
}
.el-icon-book:before {
content: "\e713";
}
.el-icon-bold:before {
content: "\e714";
}
.el-icon-blogger:before {
content: "\e715";
}
.el-icon-blind:before {
content: "\e716";
}
.el-icon-bell:before {
content: "\e717";
}
.el-icon-behance:before {
content: "\e718";
}
.el-icon-barcode:before {
content: "\e719";
}
.el-icon-ban-circle:before {
content: "\e71a";
}
.el-icon-backward:before {
content: "\e71b";
}
.el-icon-asl:before {
content: "\e71c";
}
.el-icon-arrow-up:before {
content: "\e71d";
}
.el-icon-arrow-right:before {
content: "\e71e";
}
.el-icon-arrow-left:before {
content: "\e71f";
}
.el-icon-arrow-down:before {
content: "\e720";
}
.el-icon-align-right:before {
content: "\e721";
}
.el-icon-align-left:before {
content: "\e722";
}
.el-icon-align-justify:before {
content: "\e723";
}
.el-icon-align-center:before {
content: "\e724";
}
.el-icon-adult:before {
content: "\e725";
}
.el-icon-adjust-alt:before {
content: "\e726";
}
.el-icon-adjust:before {
content: "\e727";
}
.el-icon-address-book-alt:before {
content: "\e728";
}
.el-icon-address-book:before {
content: "\e729";
}
.el-icon-asterisk:before {
content: "\e72a";
}

Some files were not shown because too many files have changed in this diff Show More