version 1 validee prod

This commit is contained in:
Matt Marcha 2020-08-23 18:06:43 +02:00
parent c27153560b
commit bf42b2aba2
5 changed files with 738 additions and 7 deletions

56
custom.js Normal file
View file

@ -0,0 +1,56 @@
jQuery( document ).ready(function($) {
$(".measure-wrapper .measure-title").click(function() {
$(this).next(".measure-content").slideToggle(500, "swing");
})
/** Filtrage des propositions **/
// Au clic sur un des titres des catégories : on crée le div de filtre correspondnt (avec le slug en attr "statut") et on trigger l'event filtre
$(".home-graph-item .status-title").click(function(){
var stat = $(this).attr("status");
// on conditionne l'action au fait que le filtre ne soit pas déjà actif
if ( $("div.filters-container .filter-" + stat).length === 0) {
var htmlFilter = "<div class='measure-filter filter-" + stat +"' status='" + stat + "'><p class='name'>"+ $(this).text() + "</p><div class='filter-close'>+</div></div>";
$("div.filters-container").append(htmlFilter);
$("div.filters-container").trigger("filters-change");
}
}
);
// Au clic sur une croix d'un filtre on supprime le div concerné et on trigger l'event filtre
$("body").on("click", "div.filters-container .filter-close", function (){
$(this).closest('.measure-filter').remove();
$("div.filters-container").trigger("filters-change");
console.log($("div.filters-container").length);
});
// Event filtre : on récupère les slugs des catégories présente dans la div des filtres, et on masque tous les autres. Si il n'y a aucun filtre on affiche tout.
$("div.filters-container").on("filters-change", function() {
// d'abord on remasque tout
$(".measure-wrapper").hide();
$(".measure-wrapper + hr").hide();
// si aucun filtre on affiche tout
if (!$.trim($("div.filters-container").html() )) {
$(".measure-wrapper").show();
$(".measure-wrapper + hr").show();
}
//sinon on parcourt les filtres et on affiche les éléments correspondants
else {
$("div.filters-container > .measure-filter").each(function () {
var stat = $(this).attr("status");
$(".measure-wrapper.measure-"+ stat).show();
$(".measure-wrapper.measure-"+ stat + " + hr").show();
})
}
});
});

61
footer.php Executable file
View file

@ -0,0 +1,61 @@
<?php
/**
* The template for displaying the footer
*
* Contains the opening of the #site-footer div and all content after.
*
* @link https://developer.wordpress.org/themes/basics/template-files/#template-partials
*
* @package WordPress
* @subpackage Twenty_Twenty
* @since Twenty Twenty 1.0
*/
?>
<footer id="site-footer" role="contentinfo" class="header-footer-group">
<div class="section-inner">
<div class="footer-credits">
<p class="footer-copyright">&copy;
<?php
echo date_i18n(
/* translators: Copyright date format, see https://www.php.net/date */
_x( 'Y', 'copyright date format', 'twentytwenty' )
);
?>
<a href="https://www.les150.fr/">Les 150</a>
</p><!-- .footer-copyright -->
<p class="powered-by-wordpress"> -
<a href="<?php echo esc_url( get_privacy_policy_url() ); ?>">
<?php _e( 'Mentions légales', 'twentytwenty' ); ?>
</a>
</p><!-- .powered-by-wordpress -->
</div><!-- .footer-credits -->
<a class="to-the-top" href="#site-header">
<span class="to-the-top-long">
<?php
/* translators: %s: HTML character for up arrow. */
printf( __( 'Haut de page %s', 'twentytwenty' ), '<span class="arrow" aria-hidden="true">&uarr;</span>' );
?>
</span><!-- .to-the-top-long -->
<span class="to-the-top-short">
<?php
/* translators: %s: HTML character for up arrow. */
printf( __( 'Up %s', 'twentytwenty' ), '<span class="arrow" aria-hidden="true">&uarr;</span>' );
?>
</span><!-- .to-the-top-short -->
</a><!-- .to-the-top -->
</div><!-- .section-inner -->
</footer><!-- #site-footer -->
<?php wp_footer(); ?>
</body>
</html>

View file

@ -14,9 +14,145 @@ function enqueue_style_parent() {
/**
** Ajout des scripts et styles tardifs
**/
/*add_action('wp_enqueue_scripts', 'enqueue_scripts_child', 20);
add_action('wp_enqueue_scripts', 'enqueue_scripts_child', 20);
function enqueue_scripts_child() {
wp_register_script('customJS', get_stylesheet_directory_uri() . '/path/to/file.js', array('jquery'),'1.1', true);
wp_register_script('customJS', get_stylesheet_directory_uri() . '/custom.js', array('jquery'),'1.1', true);
wp_enqueue_script('customJS');
wp_enqueue_style( 'responsive-child', get_stylesheet_directory_uri() . '/path/to/file.css' );
}*/
//wp_enqueue_style( 'responsive-child', get_stylesheet_directory_uri() . '/path/to/file.css' );
}
/**
* changement du terme "articles" par "mesures"
*/
add_action( 'init', 'cp_change_post_object' );
function cp_change_post_object() {
$get_post_type = get_post_type_object('post');
$labels = $get_post_type->labels;
$labels->name = 'Mesures';
$labels->singular_name = 'Mesure';
$labels->add_new = 'Ajouter une mesure';
$labels->add_new_item = 'Ajouter une mesure';
$labels->edit_item = 'Modifier la mesure';
$labels->new_item = 'Nouvelle mesure';
$labels->view_item = 'Voir la mesure';
$labels->search_items = 'Chercher dans les mesures';
$labels->not_found = 'Aucune mesure trouvée';
$labels->not_found_in_trash = 'Aucune mesure dans la corbeille';
$labels->all_items = 'Toutes les mesures';
$labels->menu_name = 'Mesures';
$labels->name_admin_bar = 'Mesure';
}
/**
* Suppression de la metabox catégories
*/
function ccc_remove_metaboxes() {
remove_meta_box( 'categorydiv', 'post', 'normal' );
}
add_action( 'admin_menu', 'ccc_remove_metaboxes' );
/**
* Shortcode affichant la liste des mesures
*/
function generate_home_posts_list() {
// On récupère la liste des mesures par date de MaJ décroissante
$measures = get_posts([ 'post_type' => 'post',
'orderby' => 'modified',
'order' => 'DESC',
'numberposts' => -1
]);
// Conteneur pour les filtres
$html = "<div class='filters-container'></div>";
foreach ($measures as $measure) {
$status = get_the_category($measure->ID)[0];
$color = get_field('couleur', 'category_'.$status->term_id);
$link = get_field('proposition-url', $measure->ID);
$date = get_the_modified_date("d/m/Y à H:i", $measure);
$html .= "<article class='measure-wrapper measure-".$status->slug."' style='border-color: $color'>";
$html .= "<h3 class='measure-title' style='background-color: $color'>". $measure->post_title ."</h3>";
$html .= "<div class='measure-content'>";
$html .= "<p class='measure-meta' style='background-color: $color'>". $measure->post_excerpt ." <a href='$link' target='_blank' class='external'>Lire la mesure</a></p>";
$html .= "<div class='status-desc' style='background-color: $color'><p>". $status->description . "</p></div>";
$html .= "<div class='content'>" . $measure->post_content . "</div>";
$html .= "<p class='measure-meta' style='background-color: $color'>Mise à jour le " . $date . "<br /> ";
$html .= "</div></article>";
$html .= "<hr />";
}
return $html;
}
add_shortcode('mesures', 'generate_home_posts_list');
/**
* Shortcode affichant le graphique de suivi des statuts
*/
function generate_home_status_graph() {
// Total des articles
$total = wp_count_posts('post')->publish;
// Ensuite, pour chaque catégorie donnée, on va :
// récupérer le nombre de posts de cette cat
// récupérer la couleur associée
// calculer le pourcentage sur le total de mesures
// créer un bloc html avec l data correspondante
$cats = ["validated", "partially-validated", "discussed", "danger", "rejected", "undiscussed"];
$obj_total = 0;
$html = "";
foreach ($cats as $cat) {
$cat = get_category_by_slug($cat);
$color = get_field('couleur', "category_" . $cat->term_id);
$percent = $cat->count * 100 / $total;
$html .= "<div class='home-graph-item'>";
$html .= "<h3 class='status-title' status='". $cat->slug ."'>" . $cat->name . "</h3>";
$html .= "<div class='progress-bar-wrapper'>";
$html .= "<div class='progress-bar' style='background-color: $color; width: $percent%; '></div>";
$html .= "<div class='progress-bar bottom'></div>";
$html .= "</div>";
$html .= "<p>" . $cat->count . "</p>";
$html .= "</div>";
if (in_array($cat->slug, ['validated', 'partially-validated'])) {
$obj_total += $cat->count;
}
}
$total_percent = $obj_total * 100 / $total;
$html .= "<div class='home-graph-item obj-total'>";
$html .= "<h3> Objectif </h3>";
$html .= "<div class='progress-bar-wrapper'>";
$html .= "<div class='progress-bar' style='width: $total_percent%; background-color: #97C5E0; '></div>";
$html .= "<div class='progress-bar bottom'></div>";
$html .= "</div>";
$html .= "<p> $obj_total / $total </p>";
$html .= "</div>";
return $html;
}
add_shortcode('graph_mesures', 'generate_home_status_graph');

222
header.php Executable file
View file

@ -0,0 +1,222 @@
<?php
/**
* Header file for the Twenty Twenty WordPress default theme.
*
* @link https://developer.wordpress.org/themes/basics/template-files/#template-partials
*
* @package WordPress
* @subpackage Twenty_Twenty
* @since Twenty Twenty 1.0
*/
?><!DOCTYPE html>
<html class="no-js" <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0" >
<link rel="profile" href="https://gmpg.org/xfn/11">
<?php wp_head(); ?>
<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push([function() {
var self = this;
function getOriginalVisitorCookieTimeout() {
var now = new Date(),
nowTs = Math.round(now.getTime() / 1000),
visitorInfo = self.getVisitorInfo();
var createTs = parseInt(visitorInfo[2]);
var cookieTimeout = 33696000; // 13 mois en secondes
var originalTimeout = createTs + cookieTimeout - nowTs;
return originalTimeout;
}
this.setVisitorCookieTimeout( getOriginalVisitorCookieTimeout() );
}]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//stats.marcha.pro/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '2']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><p><img src="//stats.marcha.pro/matomo.php?idsite=2&amp;rec=1" style="border:0;" alt="" /></p></noscript>
<!-- End Matomo Code -->
</head>
<body <?php body_class(); ?>>
<?php
wp_body_open();
?>
<header id="site-header" class="header-footer-group" role="banner">
<div class="header-inner section-inner">
<div class="header-titles-wrapper">
<?php
// Check whether the header search is activated in the customizer.
$enable_header_search = get_theme_mod( 'enable_header_search', true );
if ( true === $enable_header_search ) {
?>
<button class="toggle search-toggle mobile-search-toggle" data-toggle-target=".search-modal" data-toggle-body-class="showing-search-modal" data-set-focus=".search-modal .search-field" aria-expanded="false">
<span class="toggle-inner">
<span class="toggle-icon">
<?php twentytwenty_the_theme_svg( 'search' ); ?>
</span>
<span class="toggle-text"><?php _e( 'Search', 'twentytwenty' ); ?></span>
</span>
</button><!-- .search-toggle -->
<?php } ?>
<div class="header-titles">
<?php
// Site title or logo.
twentytwenty_site_logo();
// Site description.
twentytwenty_site_description();
?>
</div><!-- .header-titles -->
<button class="toggle nav-toggle mobile-nav-toggle" data-toggle-target=".menu-modal" data-toggle-body-class="showing-menu-modal" aria-expanded="false" data-set-focus=".close-nav-toggle">
<span class="toggle-inner">
<span class="toggle-icon">
<?php twentytwenty_the_theme_svg( 'ellipsis' ); ?>
</span>
<span class="toggle-text"><?php _e( 'Menu', 'twentytwenty' ); ?></span>
</span>
</button><!-- .nav-toggle -->
</div><!-- .header-titles-wrapper -->
<div class="header-navigation-wrapper">
<?php
if ( has_nav_menu( 'primary' ) || ! has_nav_menu( 'expanded' ) ) {
?>
<nav class="primary-menu-wrapper" aria-label="<?php esc_attr_e( 'Horizontal', 'twentytwenty' ); ?>" role="navigation">
<ul class="primary-menu reset-list-style">
<?php
if ( has_nav_menu( 'primary' ) ) {
wp_nav_menu(
array(
'container' => '',
'items_wrap' => '%3$s',
'theme_location' => 'primary',
)
);
} elseif ( ! has_nav_menu( 'expanded' ) ) {
wp_list_pages(
array(
'match_menu_classes' => true,
'show_sub_menu_icons' => true,
'title_li' => false,
'walker' => new TwentyTwenty_Walker_Page(),
)
);
}
?>
</ul>
</nav><!-- .primary-menu-wrapper -->
<?php
}
if ( true === $enable_header_search || has_nav_menu( 'expanded' ) ) {
?>
<div class="header-toggles hide-no-js">
<?php
if ( has_nav_menu( 'expanded' ) ) {
?>
<div class="toggle-wrapper nav-toggle-wrapper has-expanded-menu">
<button class="toggle nav-toggle desktop-nav-toggle" data-toggle-target=".menu-modal" data-toggle-body-class="showing-menu-modal" aria-expanded="false" data-set-focus=".close-nav-toggle">
<span class="toggle-inner">
<span class="toggle-text"><?php _e( 'Menu', 'twentytwenty' ); ?></span>
<span class="toggle-icon">
<?php twentytwenty_the_theme_svg( 'ellipsis' ); ?>
</span>
</span>
</button><!-- .nav-toggle -->
</div><!-- .nav-toggle-wrapper -->
<?php
}
if ( true === $enable_header_search ) {
?>
<div class="toggle-wrapper search-toggle-wrapper">
<button class="toggle search-toggle desktop-search-toggle" data-toggle-target=".search-modal" data-toggle-body-class="showing-search-modal" data-set-focus=".search-modal .search-field" aria-expanded="false">
<span class="toggle-inner">
<?php twentytwenty_the_theme_svg( 'search' ); ?>
<span class="toggle-text"><?php _e( 'Search', 'twentytwenty' ); ?></span>
</span>
</button><!-- .search-toggle -->
</div>
<?php
}
?>
</div><!-- .header-toggles -->
<?php
}
?>
</div><!-- .header-navigation-wrapper -->
</div><!-- .header-inner -->
<?php
// Output the search modal (if it is activated in the customizer).
if ( true === $enable_header_search ) {
get_template_part( 'template-parts/modal-search' );
}
?>
</header><!-- #site-header -->
<?php
// Output the menu modal.
get_template_part( 'template-parts/modal-menu' );

262
style.css
View file

@ -1,7 +1,263 @@
/*
Theme Name:
Description:
Theme Name: 100filtres
Description: Thème spécifique pour le suivi des mesures de la CCC
Author: Matt Marcha
Template: templatename
Template: twentytwenty
Version: 0.1
*/
/** Général **/
.entry-content {
font-family: Arial, Roboto, sans-serif;
}
/** Home **/
.home header.entry-header,
.home .header-inner .toggle {
display: none;
}
.header-navigation-wrapper {
display: none;
}
.header-titles-wrapper {
max-width: 90%;
}
.header-inner,
.header-titles {
justify-content: center;
}
.header-inner {
padding: 1rem 0 2rem;
}
.home-titles-cols,
.home-titles-cols .wp-block-column{
margin-bottom: 5px !important;
}
.home-titles-cols h2 {
margin-bottom: 0 !important;
}
.home-measures-cols {
margin-top: 1em !important;
}
/*** homepage measures list **/
.mobile-home-measures-title {
display: none;
}
.measure-title {
cursor: pointer;
}
.measure-title:hover {
text-decoration: underline;
}
.measure-content{
display: none;
}
.measure-wrapper {
border: 2px solid;
border-bottom: 0;
}
.entry-content h3.measure-title,
.status-desc,
.measure-meta {
margin: 0;
padding: 5px 8px;
}
.entry-content h3.measure-title {
font-size: 1.4em;
font-weight: 500;
}
.status-desc {
text-transform: uppercase;
font-style: italic;
color: #ffffff;
}
.status-desc p {
background-color: #0E0E0E70;
padding: 0.5em;
font-weight: 600;
}
.measure-meta {
font-size: 0.7em;
}
.measure-meta a {
font-size: 1.1em;
color: #213f52;
}
.entry-content .measure-rejected h3.measure-title,
.measure-rejected .status-desc,
.measure-rejected .measure-meta,
.measure-rejected .measure-meta a {
color: #eaeaea;
}
.measure-rejected .status-desc p {
background-color: #FFFFFF20;
}
.entry-content .measure-rejected h3.measure-title {
text-decoration: line-through;
}
.measure-rejected p.measure-meta a {
text-decoration: underline;
}
.measure-content .content {
padding: 5px 2%;
background-color: #FFFFFF9E;
}
/** homepage graphs ***/
.home-graph-item h3 {
font-size: 0.9em;
font-weight: 400;
margin: 0.5em 0 5px !important;
}
.progress-bar {
position: relative;
height: 1em;
z-index: 2;
}
.progress-bar.bottom {
position: absolute;
top: 0;
height: 1em;
width: 100%;
background-color: #f0f0f0;
z-index: 0;
}
.home-graph-item p {
font-size: 1.2em;
font-weight: 500;
margin-bottom: 5px;
}
.progress-bar-wrapper {
position: relative;
widrh: 100%;
}
/* filters */
.filters-container {
margin-bottom: 1em;
}
.measure-filter {
position: relative;
display: inline-block;
background-color: #f0f0f0;
border-radius: 2em;
padding: 0 0.5em;
margin-right: 5px;
}
.measure-filter .name {
color: #515050;
font-size: 0.6em;
display: inline-block;
text-transform: uppercase;
margin-right: 25px;
margin-bottom: 1em;
}
.measure-filter .filter-close {
position: absolute;
bottom: 0;
right: -9px;
transform: rotate(45deg);
font-size: 2em;
color: #686868;
height: 23px;
top: -0.18em;
}
.status-title:hover,
.filter-close:hover {
cursor: pointer;
}
/*****************
RESPONSIVE
*************/
@media only screen and (max-width: 1000px) {
.header-inner,
.header-titles {
justify-content: center;
}
body:not(.enable-search-modal) .header-titles-wrapper {
text-align: center;
justify-content: center;
}
.header-titles-wrapper {
max-width: 100%;
}
.site-logo a, .site-logo img {
display: inline-block;
}
}
@media only screen and (min-width: 780px ) {
.home-measures-cols {
max-height: 1024px;
min-height: 670px;
height: 80vh;
overflow: hidden;
}
.wp-block-column.measures-col {
overflow-y: scroll;
}
}
@media only screen and (max-width: 699px ) {
.powered-by-wordpress,
.site-description {
display: inline-block !important;
}
}
@media only screen and (max-width: 599px) {
.mobile-home-measures-title {
display: block;
}
.home-measures-title {
display: none;
}
}