Files
thalim-theme/inc/assets.php

285 lines
9.4 KiB
PHP

<?php
/**
* Enqueue des assets front (theme_enqueue_assets) et admin (enqueue_admin_js).
* Cache-busting par filemtime — pas de bundler.
*
* Les dépendances tierces (Swiper 12.2.0, Iconoir 7.11.0) sont auto-hébergées
* dans assets/vendor/ (fiabilité + RGPD — plus aucun appel CDN). Pour les
* mettre à jour : retélécharger les fichiers en épinglant la version exacte.
*/
function thalim_enqueue_swiper() {
wp_enqueue_style(
'swiper',
get_template_directory_uri() . '/assets/vendor/swiper/swiper-bundle.min.css',
[],
'12.2.0'
);
wp_enqueue_script(
'swiper',
get_template_directory_uri() . '/assets/vendor/swiper/swiper-bundle.min.js',
[],
'12.2.0',
true
);
}
function theme_enqueue_assets() {
wp_enqueue_style(
'main-styles',
get_template_directory_uri() . '/css/style.css',
[],
filemtime(get_template_directory() . '/css/style.css')
);
wp_enqueue_style(
'iconoir',
get_template_directory_uri() . '/assets/vendor/iconoir/iconoir.css',
[],
'7.11.0'
);
wp_enqueue_script(
'overlay',
get_template_directory_uri() . '/js/overlay.js',
[],
filemtime(get_template_directory() . '/js/overlay.js'),
true
);
if (is_front_page() || is_404()) {
wp_enqueue_script(
'animatedLogo',
get_template_directory_uri() . '/js/animatedLogo.js',
[],
filemtime(get_template_directory() . '/js/animatedLogo.js'),
true
);
wp_add_inline_script( 'animatedLogo', 'var themeDirURI = ' . wp_json_encode( get_template_directory_uri() ) . ';', 'before' );
}
if ( is_category() ) {
thalim_enqueue_swiper();
wp_enqueue_script( 'agendaView', get_template_directory_uri() . '/js/agendaView.js', ['swiper'], filemtime( get_template_directory() . '/js/agendaView.js' ), true );
wp_localize_script( 'agendaView', 'agendaViewData', [
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'load_more_posts' ),
'lang' => thalim_current_language(),
]);
}
if (is_front_page()) {
wp_enqueue_script(
'coloredWordsHero',
get_template_directory_uri() . '/js/coloredWordsHero.js',
[],
filemtime(get_template_directory() . '/js/coloredWordsHero.js'),
true
);
thalim_enqueue_swiper();
wp_enqueue_script(
'annoncesSwiper',
get_template_directory_uri() . '/js/annoncesSwiper.js',
['swiper'],
filemtime(get_template_directory() . '/js/annoncesSwiper.js'),
true
);
wp_enqueue_script(
'messageLabo',
get_template_directory_uri() . '/js/messageLabo.js',
[],
filemtime(get_template_directory() . '/js/messageLabo.js'),
true
);
wp_enqueue_script(
'keywordCloud',
get_template_directory_uri() . '/js/keywordCloud.js',
[],
filemtime(get_template_directory() . '/js/keywordCloud.js'),
true
);
wp_enqueue_script(
'quickLinks',
get_template_directory_uri() . '/js/quickLinks.js',
[],
filemtime(get_template_directory() . '/js/quickLinks.js'),
true
);
$kw_tags = get_terms([
'taxonomy' => 'post_tag',
'hide_empty' => true,
'orderby' => 'name',
'order' => 'ASC',
]);
if (!is_wp_error($kw_tags) && !empty($kw_tags)) {
$kw_lang = thalim_current_language();
$kw_tags = array_filter($kw_tags, function ($tag) {
return !get_term_meta($tag->term_id, 'ne_pas_afficher_dans_le_nuage', true);
});
wp_localize_script('keywordCloud', 'thalimTags', array_values(array_map(function ($tag) use ($kw_lang) {
return ['name' => html_entity_decode(thalim_bilingual($tag->name, $kw_lang), ENT_QUOTES | ENT_HTML5, 'UTF-8'), 'url' => get_term_link($tag)];
}, $kw_tags)));
}
}
wp_enqueue_script(
'navAxesToggle',
get_template_directory_uri() . '/js/navAxesToggle.js',
[],
filemtime(get_template_directory() . '/js/navAxesToggle.js'),
true
);
wp_enqueue_script(
'stickyHeader',
get_template_directory_uri() . '/js/stickyHeader.js',
[],
filemtime(get_template_directory() . '/js/stickyHeader.js'),
true
);
wp_enqueue_script(
'frenchTypography',
get_template_directory_uri() . '/js/frenchTypography.js',
[],
filemtime(get_template_directory() . '/js/frenchTypography.js'),
true
);
if (is_page('membres')) {
wp_enqueue_script(
'membresFilters',
get_template_directory_uri() . '/js/membresFilters.js',
[],
filemtime(get_template_directory() . '/js/membresFilters.js'),
true
);
wp_enqueue_script(
'membresPopover',
get_template_directory_uri() . '/js/membresPopover.js',
[],
filemtime(get_template_directory() . '/js/membresPopover.js'),
true
);
}
if (is_single() || is_author() || is_page('membres') || is_page('le-laboratoire') || is_page('programmes-de-recherche')) {
wp_enqueue_script(
'seanceToggle',
get_template_directory_uri() . '/js/seanceToggle.js',
[],
filemtime(get_template_directory() . '/js/seanceToggle.js'),
true
);
}
if (is_single()) {
thalim_enqueue_swiper();
wp_enqueue_script(
'imageSwiper',
get_template_directory_uri() . '/js/imageSwiper.js',
['swiper'],
filemtime(get_template_directory() . '/js/imageSwiper.js'),
true
);
}
wp_enqueue_script(
'fitPostCardTitle',
get_template_directory_uri() . '/js/fitPostCardTitle.js',
['frenchTypography'],
filemtime(get_template_directory() . '/js/fitPostCardTitle.js'),
true
);
$is_archive_page = is_category() || is_tax() || is_tag() || is_page(['annonces', 'announcements']) || is_search();
if ($is_archive_page) {
wp_enqueue_script(
'infiniteScroll',
get_template_directory_uri() . '/js/infiniteScroll.js',
[],
filemtime(get_template_directory() . '/js/infiniteScroll.js'),
true
);
wp_localize_script('infiniteScroll', 'infiniteScrollData', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('load_more_posts'),
'lang' => thalim_current_language(),
]);
wp_enqueue_script(
'categoryFilters',
get_template_directory_uri() . '/js/categoryFilters.js',
[],
filemtime(get_template_directory() . '/js/categoryFilters.js'),
true
);
}
}
add_action('wp_enqueue_scripts', 'theme_enqueue_assets');
/**
* Scripts admin découpés par contexte de page (js/admin/*), enqueue
* conditionnel par écran. admin-base.js fournit le namespace partagé
* window.ThalimAdmin dont dépendent les autres.
*/
function enqueue_admin_js() {
wp_enqueue_style(
'adminDashboardStyles',
get_template_directory_uri() . '/css/admin.css',
[],
filemtime(get_template_directory() . '/css/admin.css')
);
$base_uri = get_template_directory_uri() . '/js/admin';
$base_dir = get_template_directory() . '/js/admin';
$enqueue = function ( $handle, $file, $deps ) use ( $base_uri, $base_dir ) {
wp_enqueue_script( $handle, "$base_uri/$file", $deps, filemtime( "$base_dir/$file" ), true );
};
// Toutes pages admin : socle partagé + rename « Article » → « Annonce »
$enqueue( 'thalim-admin-base', 'admin-base.js', [ 'jquery' ] );
$enqueue( 'thalim-admin-rename', 'admin-rename.js', [ 'thalim-admin-base' ] );
$screen = get_current_screen();
if ( ! $screen ) {
return;
}
// post.php / post-new.php (tous post types)
if ( 'post' === $screen->base ) {
$enqueue( 'thalim-admin-post-edit', 'admin-post-edit.js', [ 'jquery', 'thalim-admin-base' ] );
$axes_groups = thalim_get_axes_filter_groups();
if ( current_user_can( 'contributor' ) && ! current_user_can( 'edit_others_posts' ) ) {
$axes_groups = array_slice( $axes_groups, 0, 1 );
}
wp_localize_script( 'thalim-admin-post-edit', 'thalimAxesGroups', $axes_groups );
// Modale Pods de création de séance (iframe avec ?pods_modal)
if ( isset( $_GET['pods_modal'] ) ) {
$enqueue( 'thalim-admin-pods-modal', 'admin-pods-modal.js', [ 'jquery', 'thalim-admin-base' ] );
}
}
// profile.php / user-edit.php / user-new.php
if ( in_array( $screen->base, [ 'profile', 'user-edit', 'user' ], true ) ) {
$enqueue( 'thalim-admin-profile', 'admin-profile.js', [ 'jquery', 'thalim-admin-base' ] );
}
// edit-tags.php / term.php
if ( in_array( $screen->base, [ 'edit-tags', 'term' ], true ) ) {
$enqueue( 'thalim-admin-taxonomy-list', 'admin-taxonomy-list.js', [ 'jquery', 'thalim-admin-base' ] );
}
}
add_action( 'admin_enqueue_scripts', 'enqueue_admin_js' );