{"id":11630,"date":"2025-11-21T19:50:11","date_gmt":"2025-11-21T18:50:11","guid":{"rendered":"https:\/\/mnf.ma\/portefeuille\/"},"modified":"2025-11-22T10:49:02","modified_gmt":"2025-11-22T09:49:02","slug":"%d9%85%d8%ad%d9%81%d8%b8%d8%a9","status":"publish","type":"page","link":"https:\/\/mnf.ma\/ar\/%d9%85%d8%ad%d9%81%d8%b8%d8%a9\/","title":{"rendered":"\u0645\u062d\u0641\u0638\u0629"},"content":{"rendered":"\n<div style=\"height:47px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<form id=\"portefeuille-filters\" style=\"margin-bottom:20px;\">\n    <div class=\"filter-container\" data-tax=\"secteur\"><div class=\"custom-select\" id=\"select-secteur\">Secteur<\/div><div class=\"options\" id=\"options-secteur\"><div class=\"option\" data-value=\"cybersecurity\" data-tax=\"secteur\">Cybersecurity<\/div><div class=\"option\" data-value=\"deeptech\" data-tax=\"secteur\">DeepTech<\/div><div class=\"option\" data-value=\"ecommerce\" data-tax=\"secteur\">Ecommerce<\/div><div class=\"option\" data-value=\"edtech\" data-tax=\"secteur\">EdTech<\/div><div class=\"option\" data-value=\"energytech\" data-tax=\"secteur\">EnergyTech<\/div><div class=\"option\" data-value=\"fintech\" data-tax=\"secteur\">Fintech<\/div><div class=\"option\" data-value=\"gaming\" data-tax=\"secteur\">Gaming<\/div><div class=\"option\" data-value=\"legaltech\" data-tax=\"secteur\">LegalTech<\/div><div class=\"option\" data-value=\"medias\" data-tax=\"secteur\">Medias<\/div><div class=\"option\" data-value=\"mobility-logistics\" data-tax=\"secteur\">Mobility &amp; Logistics<\/div><div class=\"option\" data-value=\"online-services\" data-tax=\"secteur\">Online services<\/div><div class=\"option\" data-value=\"proptech\" data-tax=\"secteur\">PropTech<\/div><div class=\"option\" data-value=\"retailtech\" data-tax=\"secteur\">RetailTech<\/div><div class=\"option\" data-value=\"saas\" data-tax=\"secteur\">SAAS<\/div><\/div><div class=\"tags\" id=\"tags-secteur\"><\/div><\/div><br><div class=\"filter-container\" data-tax=\"fonds\"><div class=\"custom-select\" id=\"select-fonds\">Fonds<\/div><div class=\"options\" id=\"options-fonds\"><div class=\"option\" data-value=\"mnf1\" data-tax=\"fonds\">MNF I<\/div><div class=\"option\" data-value=\"mnf2\" data-tax=\"fonds\">MNF II<\/div><\/div><div class=\"tags\" id=\"tags-fonds\"><\/div><\/div><br><div class=\"filter-container\" data-tax=\"statut\"><div class=\"custom-select\" id=\"select-statut\">Statut<\/div><div class=\"options\" id=\"options-statut\"><div class=\"option\" data-value=\"desinvesti\" data-tax=\"statut\">\u0623\u0646\u0647\u064a \u0627\u0644\u0625\u0633\u062a\u062b\u0645\u0627\u0631<\/div><div class=\"option\" data-value=\"activer\" data-tax=\"statut\">\u0645\u0633\u062a\u062b\u0645\u0631<\/div><\/div><div class=\"tags\" id=\"tags-statut\"><\/div><\/div><br><\/form>\n\n    <div id=\"portefeuille-results\" class=\"\"><\/div>\n\n\n\n<script>\njQuery(document).ready(function($){\n    \/\/ --- Fonction AJAX (m\u00eame usage que toi auparavant) ---\n    function load_portefeuille(data){\n        $.ajax({\n            url: 'https:\/\/mnf.ma\/wp-admin\/admin-ajax.php',\n            type: 'POST',\n            data: data,\n            success: function(response){\n                $('#portefeuille-results').html(response);\n            }\n        });\n    }\n\n    \/\/ --- Helper : synchronise les inputs cach\u00e9s dans le formulaire ---\n    function syncHiddenInputs(tax, values){\n        \/\/ form\n        var $form = $('#portefeuille-filters');\n\n        \/\/ supprimer anciennes hidden inputs pour ce taxonomy\n        $form.find('input[type=\"hidden\"][name=\"'+tax+'[]\"]').remove();\n\n        \/\/ ajouter une input cach\u00e9e par valeur s\u00e9lectionn\u00e9e\n        values.forEach(function(v){\n            var $inp = $('<input>', {\n                type: 'hidden',\n                name: tax + '[]',\n                value: v\n            });\n            $form.append($inp);\n        });\n    }\n\n    \/\/ --- Initial load (comme avant) ---\n    load_portefeuille({action:'load_portefeuille'});\n\n    \/\/ --- Int\u00e9gration avec les custom selects cr\u00e9\u00e9s pr\u00e9c\u00e9demment ---\n    \/\/ Pour chaque filter-container on g\u00e8re les interactions (cette partie doit matcher le HTML que tu as g\u00e9n\u00e9r\u00e9)\n    $('.filter-container').each(function(){\n        var $container = $(this);\n        var tax = $container.data('tax'); \/\/ secteur \/ fonds \/ statut\n        var $selectBox = $container.find('.custom-select');\n        var $optionsMenu = $container.find('.options');\n        var $tagsContainer = $container.find('.tags');\n\n        var selectedValues = []; \/\/ tableau des slugs s\u00e9lectionn\u00e9s\n\n        \/\/ ouverture\/fermeture du menu\n        $selectBox.on('click', function(e){\n            e.stopPropagation();\n         \n    \/\/ Fermer tous les autres menus ouverts\n    $('.options').not($optionsMenu).removeClass('open');\n    $('.custom-select').not($selectBox).removeClass('open');\n\n    \/\/ Ouvrir\/fermer celui cliqu\u00e9\n    $optionsMenu.toggleClass('open');\n    $selectBox.toggleClass('open');\n        });\n\n        \/\/ clic sur option dans le menu\n        $optionsMenu.find('.option').each(function(){\n            var $opt = $(this);\n  $opt.on('click', function(e){\n    e.stopPropagation();\n    var value = $opt.data('value').toString();\n\n    \/\/ toggle s\u00e9lection\n    var idx = selectedValues.indexOf(value);\n    if(idx === -1){\n        selectedValues.push(value);\n        $opt.addClass('selected');\n    } else {\n        selectedValues.splice(idx,1);\n        $opt.removeClass('selected');\n    }\n\n    \/\/ mettre \u00e0 jour tags, inputs cach\u00e9s et lancer AJAX\n    renderTagsAndSync();\n\n    \/\/ \ud83d\udd25 Fermer le menu apr\u00e8s s\u00e9lection\n    $optionsMenu.removeClass('open');\n    $selectBox.removeClass('open');\n});\n        });\n\n        \/\/ render tags & sync hidden inputs\n        function renderTagsAndSync(){\n            \/\/ vider et recr\u00e9er les tags visibles\n            $tagsContainer.empty();\n            selectedValues.forEach(function(val){\n                var label = $optionsMenu.find('.option[data-value=\"'+val+'\"]').text() || val;\n                var $tag = $('<div>', {class: 'tag'}).html(label + ' <span class=\"tag-remove\" data-value=\"'+val+'\">\u00d7<\/span>');\n                $tagsContainer.append($tag);\n            });\n\n            \/\/ attacher event remove sur chaque croix\n            $tagsContainer.find('.tag-remove').off('click').on('click', function(e){\n                e.stopPropagation();\n                var val = $(this).data('value').toString();\n\n                \/\/ retirer de selectedValues et d\u00e9cocher dans le menu\n                selectedValues = selectedValues.filter(function(x){ return x !== val; });\n                $optionsMenu.find('.option[data-value=\"'+val+'\"]').removeClass('selected');\n\n                \/\/ re-synchroniser et relancer\n                renderTagsAndSync();\n            });\n\n            \/\/ 1) sync les inputs cach\u00e9s dans le form pour que serialize() fonctionne comme avant\n            syncHiddenInputs(tax, selectedValues);\n\n            \/\/ 2) lancer l'AJAX (comme ton handler existant attend)\n            var data = $('#portefeuille-filters').serialize();\n            data += '&action=load_portefeuille';\n            load_portefeuille(data);\n        }\n\n        \/\/ fermer le menu si clic en dehors du container\n        $(document).on('click', function(e){\n            if(!$(e.target).closest($container).length){\n                $optionsMenu.removeClass('open');\n                $selectBox.removeClass('open');\n            }\n        });\n\n        \/\/ si tu veux pr\u00e9charger des valeurs (optionnel) : r\u00e9cup\u00e9rer les .option.selected initiaux\n        \/\/ et remplir selectedValues au chargement (utile si tu pr\u00e9selectionnes via PHP)\n        $optionsMenu.find('.option.selected').each(function(){\n            selectedValues.push($(this).data('value').toString());\n        });\n        if(selectedValues.length){\n            renderTagsAndSync(); \/\/ sync initial au besoin\n        }\n    });\n\n    \/\/ --- Compatibilit\u00e9 : si tu veux d\u00e9clencher l'ancien handler au 'change' d'inputs existants ---\n    \/\/ (garde ceci si tu as encore des input[type=checkbox] ailleurs)\n    $('#portefeuille-filters').on('change', 'input[type=\"checkbox\"], input[type=\"radio\"], select', function(e){\n        var data = $('#portefeuille-filters').serialize();\n        data += '&action=load_portefeuille';\n        load_portefeuille(data);\n    });\n});\n\t\n\t\n\n\t\n\t\n<\/script>\n    \n\n\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    const pageLang = document.documentElement.lang;\n\n    \/\/ Secteur\n    const secteurDiv = document.querySelector('#select-secteur');\n    if (secteurDiv) {\n        if (pageLang.startsWith('ar')) {\n            secteurDiv.textContent = \"\u0627\u0644\u0642\u0637\u0627\u0639\";\n        } else if (pageLang.startsWith('en')) {\n            secteurDiv.textContent = \"Sector\";\n        } else {\n            secteurDiv.textContent = \"Secteur\";\n        }\n    }\n\n    \/\/ Fonds\n    const fondsDiv = document.querySelector('#select-fonds');\n    if (fondsDiv) {\n        if (pageLang.startsWith('ar')) {\n            fondsDiv.textContent = \"\u0627\u0644\u0635\u0646\u062f\u0648\u0642\";\n        } else if (pageLang.startsWith('en')) {\n            fondsDiv.textContent = \"Fund\";\n        } else {\n            fondsDiv.textContent = \"Fonds\";\n        }\n    }\n\n    \/\/ Statut\n    const statutDiv = document.querySelector('#select-statut');\n    if (statutDiv) {\n        if (pageLang.startsWith('ar')) {\n            statutDiv.textContent = \"\u0627\u0644\u0648\u0636\u0639\";\n        } else if (pageLang.startsWith('en')) {\n            statutDiv.textContent = \"Status\";\n        } else {\n            statutDiv.textContent = \"Statut\";\n        }\n    }\n});\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-11630","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/pages\/11630","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/comments?post=11630"}],"version-history":[{"count":5,"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/pages\/11630\/revisions"}],"predecessor-version":[{"id":11679,"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/pages\/11630\/revisions\/11679"}],"wp:attachment":[{"href":"https:\/\/mnf.ma\/ar\/wp-json\/wp\/v2\/media?parent=11630"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}