File: /var/www/intranet.kauko.lt/wp-content/plugins/buddypress/bp-core/bp-core-cssjs.php
<?php
/**
* Core component CSS & JS.
*
* @package BuddyPress
* @subpackage Core
* @since 1.0.0
*/
// Exit if accessed directly.
defined( 'ABSPATH' ) || exit;
/**
* Register scripts commonly used by BuddyPress.
*
* @since 2.1.0
*/
function bp_core_register_common_scripts() {
$min = bp_core_get_minified_asset_suffix();
$url = buddypress()->plugin_url . 'bp-core/js/';
// Set up default scripts to register.
$scripts = array(
// Legacy.
'bp-confirm' => array( 'file' => "{$url}confirm{$min}.js", 'dependencies' => array( 'jquery' ), 'footer' => false ),
'bp-jquery-query' => array( 'file' => "{$url}jquery-query{$min}.js", 'dependencies' => array( 'jquery' ), 'footer' => false ),
'bp-jquery-cookie' => array( 'file' => "{$url}vendor/jquery-cookie{$min}.js", 'dependencies' => array( 'jquery' ), 'footer' => false ),
'bp-jquery-scroll-to' => array( 'file' => "{$url}vendor/jquery-scroll-to{$min}.js", 'dependencies' => array( 'jquery' ), 'footer' => false ),
// Version 2.1.
'jquery-caret' => array( 'file' => "{$url}vendor/jquery.caret{$min}.js", 'dependencies' => array( 'jquery' ), 'footer' => true ),
'jquery-atwho' => array( 'file' => "{$url}vendor/jquery.atwho{$min}.js", 'dependencies' => array( 'jquery', 'jquery-caret' ), 'footer' => true ),
// Version 2.3.
'bp-plupload' => array( 'file' => "{$url}bp-plupload{$min}.js", 'dependencies' => array( 'plupload', 'jquery', 'json2', 'wp-backbone' ), 'footer' => true ),
'bp-avatar' => array( 'file' => "{$url}avatar{$min}.js", 'dependencies' => array( 'jcrop' ), 'footer' => true ),
'bp-webcam' => array( 'file' => "{$url}webcam{$min}.js", 'dependencies' => array( 'bp-avatar' ), 'footer' => true ),
// Version 2.4.
'bp-cover-image' => array( 'file' => "{$url}cover-image{$min}.js", 'dependencies' => array(), 'footer' => true ),
// Version 2.7.
'bp-livestamp' => array( 'file' => "{$url}vendor/livestamp{$min}.js", 'dependencies' => array( 'jquery', 'moment' ), 'footer' => true ),
);
if ( bp_support_blocks() ) {
$asset = array(
'dependencies' => array(),
'version' => ''
);
$asset_path = trailingslashit( dirname( __FILE__ ) ) . 'blocks/dynamic-widget-block/index.asset.php';
if ( file_exists( $asset_path ) ) {
$asset = require $asset_path;
}
$scripts['bp-dynamic-widget-block'] = array(
'file' => plugins_url( 'blocks/dynamic-widget-block/index.js', __FILE__ ),
'dependencies' => $asset['dependencies'],
'footer' => true,
);
}
/**
* Filters the BuddyPress Core javascript files to register.
*
* Default handles include 'bp-confirm', 'bp-jquery-query',
* 'bp-jquery-cookie', and 'bp-jquery-scroll-to'.
*
* @since 2.1.0 'jquery-caret', 'jquery-atwho' added.
* @since 2.3.0 'bp-plupload', 'bp-avatar', 'bp-webcam' added.
* @since 2.4.0 'bp-cover-image' added.
* @since 2.7.0 'bp-moment', 'bp-livestamp' added.
* 'bp-moment-locale' is added conditionally if a moment.js locale file is found.
*
* @param array $value Array of javascript file information to register.
*/
$scripts = apply_filters( 'bp_core_register_common_scripts', $scripts );
$version = bp_get_version();
foreach ( $scripts as $id => $script ) {
wp_register_script( $id, $script['file'], $script['dependencies'], $version, $script['footer'] );
}
}
add_action( 'bp_enqueue_scripts', 'bp_core_register_common_scripts', 1 );
add_action( 'bp_admin_enqueue_scripts', 'bp_core_register_common_scripts', 1 );
/**
* Register styles commonly used by BuddyPress.
*
* @since 2.1.0
*/
function bp_core_register_common_styles() {
$min = bp_core_get_minified_asset_suffix();
$url = buddypress()->plugin_url . 'bp-core/css/';
/**
* Filters the URL for the Admin Bar stylesheet.
*
* @since 1.1.0
*
* @param string $value URL for the Admin Bar stylesheet.
*/
$admin_bar_file = apply_filters( 'bp_core_admin_bar_css', "{$url}admin-bar{$min}.css" );
// Set default BP Tooltips styles.
$tooltips_uri = "{$url}bp-tooltips{$min}.css";
$template_tooltips = bp_locate_template_asset( "css/bp-tooltips{$min}.css" );
if ( isset( $template_tooltips['uri'] ) && $template_tooltips['uri'] ) {
$tooltips_uri = $template_tooltips['uri'];
}
/**
* Filters the BuddyPress Core stylesheet files to register.
*
* @since 2.1.0
*
* @param array $value Array of stylesheet file information to register.
*/
$styles = apply_filters( 'bp_core_register_common_styles', array(
'bp-admin-bar' => array(
'file' => $admin_bar_file,
'dependencies' => array( 'admin-bar' )
),
'bp-avatar' => array(
'file' => "{$url}avatar{$min}.css",
'dependencies' => array( 'jcrop' )
),
'bp-tooltips' => array(
'file' => $tooltips_uri,
'dependencies' => array()
),
) );
foreach ( $styles as $id => $style ) {
wp_register_style( $id, $style['file'], $style['dependencies'], bp_get_version() );
wp_style_add_data( $id, 'rtl', 'replace' );
if ( $min ) {
wp_style_add_data( $id, 'suffix', $min );
}
}
}
add_action( 'bp_enqueue_scripts', 'bp_core_register_common_styles', 1 );
add_action( 'bp_admin_enqueue_scripts', 'bp_core_register_common_styles', 1 );
/**
* Load the JS for "Are you sure?" confirm links.
*
* @since 1.1.0
*/
function bp_core_confirmation_js() {
if ( is_multisite() && ! bp_is_root_blog() ) {
return false;
}
wp_enqueue_script( 'bp-confirm' );
wp_localize_script( 'bp-confirm', 'BP_Confirm', array(
'are_you_sure' => __( 'Are you sure?', 'buddypress' ),
) );
}
add_action( 'bp_enqueue_community_scripts', 'bp_core_confirmation_js' );
add_action( 'bp_admin_enqueue_scripts', 'bp_core_confirmation_js' );
/**
* Enqueues the css and js required by the Avatar UI.
*
* @since 2.3.0
*/
function bp_core_avatar_scripts() {
if ( ! bp_avatar_is_front_edit() ) {
return false;
}
// Enqueue the Attachments scripts for the Avatar UI.
bp_attachments_enqueue_scripts( 'BP_Attachment_Avatar' );
// Add Some actions for Theme backcompat.
add_action( 'bp_after_profile_avatar_upload_content', 'bp_avatar_template_check' );
add_action( 'bp_after_group_admin_content', 'bp_avatar_template_check' );
add_action( 'bp_after_group_avatar_creation_step', 'bp_avatar_template_check' );
}
add_action( 'bp_enqueue_community_scripts', 'bp_core_avatar_scripts' );
/**
* Enqueues the css and js required by the Cover Image UI.
*
* @since 2.4.0
*/
function bp_core_cover_image_scripts() {
if ( ! bp_attachments_cover_image_is_edit() ) {
return false;
}
// Enqueue the Attachments scripts for the Cover Image UI.
bp_attachments_enqueue_scripts( 'BP_Attachment_Cover_Image' );
}
add_action( 'bp_enqueue_community_scripts', 'bp_core_cover_image_scripts' );
/**
* Enqueues jCrop library and hooks BP's custom cropper JS.
*
* @since 1.1.0
*/
function bp_core_add_jquery_cropper() {
wp_enqueue_style( 'jcrop' );
wp_enqueue_script( 'jcrop', array( 'jquery' ) );
add_action( 'wp_head', 'bp_core_add_cropper_inline_js' );
add_action( 'wp_head', 'bp_core_add_cropper_inline_css' );
}
/**
* Output the inline JS needed for the cropper to work on a per-page basis.
*
* @since 1.1.0
*/
function bp_core_add_cropper_inline_js() {
/**
* Filters the return value of getimagesize to determine if an image was uploaded.
*
* @since 1.1.0
*
* @param array $value Array of data found by getimagesize.
*/
$image = apply_filters( 'bp_inline_cropper_image', getimagesize( bp_core_avatar_upload_path() . buddypress()->avatar_admin->image->dir ) );
if ( empty( $image ) ) {
return;
}
// Get avatar full width and height.
$full_height = bp_core_avatar_full_height();
$full_width = bp_core_avatar_full_width();
// Calculate Aspect Ratio.
if ( !empty( $full_height ) && ( $full_width != $full_height ) ) {
$aspect_ratio = $full_width / $full_height;
} else {
$aspect_ratio = 1;
}
// Default cropper coordinates.
// Smaller than full-width: cropper defaults to entire image.
if ( $image[0] < $full_width ) {
$crop_left = 0;
$crop_right = $image[0];
// Less than 2x full-width: cropper defaults to full-width.
} elseif ( $image[0] < ( $full_width * 2 ) ) {
$padding_w = round( ( $image[0] - $full_width ) / 2 );
$crop_left = $padding_w;
$crop_right = $image[0] - $padding_w;
// Larger than 2x full-width: cropper defaults to 1/2 image width.
} else {
$crop_left = round( $image[0] / 4 );
$crop_right = $image[0] - $crop_left;
}
// Smaller than full-height: cropper defaults to entire image.
if ( $image[1] < $full_height ) {
$crop_top = 0;
$crop_bottom = $image[1];
// Less than double full-height: cropper defaults to full-height.
} elseif ( $image[1] < ( $full_height * 2 ) ) {
$padding_h = round( ( $image[1] - $full_height ) / 2 );
$crop_top = $padding_h;
$crop_bottom = $image[1] - $padding_h;
// Larger than 2x full-height: cropper defaults to 1/2 image height.
} else {
$crop_top = round( $image[1] / 4 );
$crop_bottom = $image[1] - $crop_top;
}
?>
<script type="text/javascript">
jQuery( window ).on( 'load', function () {
jQuery( '#avatar-to-crop' ).Jcrop( {
onChange: showPreview,
onSelect: updateCoords,
aspectRatio: <?php echo (int) $aspect_ratio; ?>,
setSelect: [ <?php echo (int) $crop_left; ?>, <?php echo (int) $crop_top; ?>, <?php echo (int) $crop_right; ?>, <?php echo (int) $crop_bottom; ?> ]
} );
} );
function updateCoords(c) {
jQuery('#x').val(c.x);
jQuery('#y').val(c.y);
jQuery('#w').val(c.w);
jQuery('#h').val(c.h);
}
function showPreview(coords) {
if ( parseInt(coords.w) > 0 ) {
var fw = <?php echo (int) $full_width; ?>;
var fh = <?php echo (int) $full_height; ?>;
var rx = fw / coords.w;
var ry = fh / coords.h;
jQuery( '#avatar-crop-preview' ).css({
width: Math.round(rx * <?php echo (int) $image[0]; ?>) + 'px',
height: Math.round(ry * <?php echo (int) $image[1]; ?>) + 'px',
marginLeft: '-' + Math.round(rx * coords.x) + 'px',
marginTop: '-' + Math.round(ry * coords.y) + 'px'
});
}
}
</script>
<?php
}
/**
* Output the inline CSS for the BP image cropper.
*
* @since 1.1.0
*/
function bp_core_add_cropper_inline_css() {
?>
<style type="text/css">
.jcrop-holder { float: left; margin: 0 20px 20px 0; text-align: left; }
#avatar-crop-pane { width: <?php echo intval( bp_core_avatar_full_width() ); ?>px; height: <?php echo intval( bp_core_avatar_full_height() ); ?>px; overflow: hidden; }
#avatar-crop-submit { margin: 20px 0; }
.jcrop-holder img,
#avatar-crop-pane img,
#avatar-upload-form img,
#create-group-form img,
#group-settings-form img { border: none !important; max-width: none !important; }
</style>
<?php
}
/**
* Define the 'ajaxurl' JS variable, used by themes as an AJAX endpoint.
*
* @since 1.1.0
*/
function bp_core_add_ajax_url_js() {
?>
<script type="text/javascript">var ajaxurl = '<?php echo esc_url( bp_core_ajax_url() ); ?>';</script>
<?php
}
add_action( 'wp_head', 'bp_core_add_ajax_url_js' );
/**
* Get the proper value for BP's ajaxurl.
*
* Designed to be sensitive to FORCE_SSL_ADMIN and non-standard multisite
* configurations.
*
* @since 1.7.0
*
* @return string AJAX endpoint URL.
*/
function bp_core_ajax_url() {
/**
* Filters the proper value for BuddyPress' ajaxurl.
*
* @since 1.7.0
*
* @param string $value Proper ajaxurl value for BuddyPress.
*/
return apply_filters( 'bp_core_ajax_url', admin_url( 'admin-ajax.php', is_ssl() ? 'admin' : 'http' ) );
}
/**
* Get the JavaScript dependencies for buddypress.js.
*
* @since 2.0.0
*
* @return array The JavaScript dependencies.
*/
function bp_core_get_js_dependencies() {
/**
* Filters the javascript dependencies for buddypress.js.
*
* @since 2.0.0
*
* @param array $value Array of javascript dependencies for buddypress.js.
*/
return apply_filters( 'bp_core_get_js_dependencies', array(
'jquery',
'bp-confirm',
'bp-jquery-query',
'bp-jquery-cookie',
'bp-jquery-scroll-to'
) );
}
/**
* Add inline css to display the component's single item cover image.
*
* @since 2.4.0
*
* @param bool $return True to get the inline css.
* @return null|array|false The inline css or an associative array containing
* the css rules and the style handle.
*/
function bp_add_cover_image_inline_css( $return = false ) {
$bp = buddypress();
// Find the component of the current item.
if ( bp_is_user() ) {
// User is not allowed to upload cover images
// no need to carry on.
if ( bp_disable_cover_image_uploads() ) {
return;
}
$cover_image_object = array(
'component' => 'members',
'object' => $bp->displayed_user
);
} elseif ( bp_is_group() ) {
// Users are not allowed to upload cover images for their groups
// no need to carry on.
if ( bp_disable_group_cover_image_uploads() ) {
return;
}
$cover_image_object = array(
'component' =>'groups',
'object' => $bp->groups->current_group
);
} else {
$cover_image_object = apply_filters( 'bp_current_cover_image_object_inline_css', array() );
}
// Bail if no component were found.
if ( empty( $cover_image_object['component'] ) || empty( $cover_image_object['object'] ) || ! bp_is_active( $cover_image_object['component'], 'cover_image' ) ) {
return;
}
// Get the settings of the cover image feature for the current component.
$params = bp_attachments_get_cover_image_settings( $cover_image_object['component'] );
// Bail if no params.
if ( empty( $params ) ) {
return;
}
// Try to call the callback.
if ( is_callable( $params['callback'] ) ) {
$object_dir = $cover_image_object['component'];
if ( 'members' === $object_dir ) {
$object_dir = 'members';
}
$cover_image = bp_attachments_get_attachment( 'url', array(
'object_dir' => $object_dir,
'item_id' => $cover_image_object['object']->id,
) );
if ( empty( $cover_image ) ) {
if ( ! empty( $params['default_cover'] ) ) {
$cover_image = $params['default_cover'];
}
}
$inline_css = call_user_func_array( $params['callback'], array( array(
'cover_image' => esc_url_raw( $cover_image ),
'component' => sanitize_key( $cover_image_object['component'] ),
'object_id' => (int) $cover_image_object['object']->id,
'width' => (int) $params['width'],
'height' => (int) $params['height'],
) ) );
// Finally add the inline css to the handle.
if ( ! empty( $inline_css ) ) {
// Used to get the css when Ajax setting the cover image.
if ( true === $return ) {
return array(
'css_rules' => '<style type="text/css">' . "\n" . $inline_css . "\n" . '</style>',
'handle' => $params['theme_handle'],
);
}
wp_add_inline_style( $params['theme_handle'], $inline_css );
} else {
return false;
}
}
}
add_action( 'bp_enqueue_community_scripts', 'bp_add_cover_image_inline_css', 11 );
/**
* Enqueues livestamp.js on BuddyPress pages.
*
* @since 2.7.0
*/
function bp_core_add_livestamp() {
if ( ! is_buddypress() ) {
return;
}
bp_core_enqueue_livestamp();
}
add_action( 'bp_enqueue_community_scripts', 'bp_core_add_livestamp' );
/**
* Enqueue and localize livestamp.js script.
*
* @since 2.7.0
*/
function bp_core_enqueue_livestamp() {
// If bp-livestamp isn't enqueued, do it now.
if ( wp_script_is( 'bp-livestamp' ) ) {
return;
}
wp_add_inline_script(
'moment',
sprintf(
"moment.updateLocale( '%s', %s );",
get_user_locale(),
wp_json_encode(
array(
'relativeTime' => array(
/* Translators: %s is the relative time (eg: in a few seconds). */
'future' => __( 'in %s', 'buddypress' ),
/* translators: %s: the human time diff. */
'past' => __( '%s ago', 'buddypress' ),
's' => __( 'a few seconds', 'buddypress' ),
'm' => __( 'a minute', 'buddypress' ),
/* Translators: %d is the amount of minutes. */
'mm' => __( '%d minutes', 'buddypress' ),
'h' => __( 'an hour', 'buddypress' ),
/* Translators: %d is the amount of hours. */
'hh' => __( '%d hours', 'buddypress' ),
'd' => __( 'a day', 'buddypress' ),
/* Translators: %d is the amount of days. */
'dd' => __( '%d days', 'buddypress' ),
'M' => __( 'a month', 'buddypress' ),
/* Translators: %d is the amount of months. */
'MM' => __( '%d months', 'buddypress' ),
'y' => __( 'a year', 'buddypress' ),
/* Translators: %d is the amount of years. */
'yy' => __( '%d years', 'buddypress' ),
),
)
)
)
);
wp_enqueue_script( 'bp-livestamp' );
}