Refactoring : sécurité (XSS), découpage en modules inc/* et js/admin/*, IDs résolus par slug, perf (caches, cron Gravatar, assets auto-hébergés), tests
This commit is contained in:
284
inc/assets.php
Normal file
284
inc/assets.php
Normal file
@@ -0,0 +1,284 @@
|
||||
<?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' );
|
||||
Reference in New Issue
Block a user