{"id":1286,"date":"2024-11-29T09:39:34","date_gmt":"2024-11-29T08:39:34","guid":{"rendered":"https:\/\/cga.dev.kneib.fr:7001\/?page_id=1286"},"modified":"2024-12-02T15:24:53","modified_gmt":"2024-12-02T14:24:53","slug":"recherche-globale","status":"publish","type":"page","link":"https:\/\/alsace-genealogie.com\/?page_id=1286","title":{"rendered":"Recherche globale"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00a0\u00bb1&Prime; _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb background_color=\u00a0\u00bbRGBA(255,255,255,0)\u00a0\u00bb custom_margin=\u00a0\u00bb0px|0px|0px|0px|true|true\u00a0\u00bb custom_padding=\u00a0\u00bb0px|0px|0px|0px|true|true\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb][et_pb_row _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb background_color=\u00a0\u00bbRGBA(255,255,255,0)\u00a0\u00bb width=\u00a0\u00bb100%\u00a0\u00bb max_width=\u00a0\u00bb100%\u00a0\u00bb module_alignment=\u00a0\u00bbcenter\u00a0\u00bb custom_margin=\u00a0\u00bb0px|0px|0px|0px|true|true\u00a0\u00bb custom_padding=\u00a0\u00bb0px|0px|0px|0px|false|true\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime;][et_pb_column type=\u00a0\u00bb4_4&Prime; _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb background_color=\u00a0\u00bbRGBA(255,255,255,0)\u00a0\u00bb custom_padding=\u00a0\u00bb0px|0px|0px|0px|true|true\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb][et_pb_post_title meta=\u00a0\u00bboff\u00a0\u00bb featured_image=\u00a0\u00bboff\u00a0\u00bb disabled_on=\u00a0\u00bboff|off|off\u00a0\u00bb _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb custom_margin=\u00a0\u00bb||-2px|||\u00a0\u00bb custom_padding=\u00a0\u00bb||||false|false\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb][\/et_pb_post_title][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb width=\u00a0\u00bb100%\u00a0\u00bb max_width=\u00a0\u00bb2560px\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb][et_pb_column type=\u00a0\u00bb4_4&Prime; _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb][et_pb_code _builder_version=\u00a0\u00bb4.27.0&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb theme_builder_area=\u00a0\u00bbpost_content\u00a0\u00bb]<link rel=\"stylesheet\" href=\"https:\/\/alsace-genealogie.com\/wp-content\/plugins\/cga\/styles\/front-global-search.css\">\n<script src=\"https:\/\/unpkg.com\/vue@3\/dist\/vue.global.js\"><\/script>\n<script type=\"module\" src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Sortable\/1.15.6\/Sortable.min.js\" integrity=\"sha512-csIng5zcB+XpulRUa+ev1zKo7zRNGpEaVfNB9On1no9KYTEY\/rLGAEEpvgdw6nim1WdTuihZY1eqZ31K7\/fZjw==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/lodash.js\/4.17.21\/lodash.min.js\" integrity=\"sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g\/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n\n<div id=\"cga-main-search-container\">\n    <div class=\"search-form-container\">\n        <div class=\"first-line\">\n            <div class=\"basic-form\">\n                <input type=\"text\" v-model=\"searchInputName\" @keyup.enter=\"search\" placeholder=\"Nom \/ Titre d'ouvrage \/ Auteur...\">\n                <input type=\"text\" v-model=\"searchInputFirstName\" @keyup.enter=\"search\" placeholder=\"Pr\u00e9nom\">\n                <input type=\"text\" v-model=\"searchInputLocation\" @keyup.enter=\"search\" placeholder=\"Lieu\">\n                <button class=\"button\" type=\"text\" @click=\"search\">Rechercher<\/button>\n            <\/div>\n            <div class=\"advanced-forms-buttons\">\n                <!-- <button style=\"cursor: default;\" disabled> Plus de filtres :<\/button> -->\n                <!-- <img decoding=\"async\" src=\"\/wp-content\/themes\/Divi-Community\/img\/icon-parametre.svg\"> -->\n                <button\n                :class=\"{expanded: advancedSearchExpanded}\"\n                @click=\"advancedSearchExpanded = !advancedSearchExpanded\"\n                class=\"button\">\n                    \n                <Premium :show=\"!IS_MEMBER\"><\/Premium>\u25bc Plus de filtres&nbsp;\n                <\/button>\n            <\/div>\n        <\/div>\n            <div v-if=\"advancedSearchExpanded\" class=\"advanced-search\">\n                <div v-for=\"advancedSearch in advancedSearches\" class=\"advanced-search-line\" :class=\"advancedSearch.name\">\n                    <div class=\"advanced-search-line-name\">{{advancedSearch.display_name}}<\/div>\n                    <div v-for=\"field in advancedSearch.fields\" class=\"input-container\">\n                        <input :for=\"advancedSearch.name+'_'+field.name\" :type=\"field.input_type\" v-model=\"field.val\" :disabled=\"!IS_MEMBER\" @keyup.enter=\"search\">\n                        <label @click=\"\" :for=\"advancedSearch.name+'_'+field.name\" :class=\"{small:field.val}\">{{ field.label }}<\/label>\n                        <Premium :show=\"!IS_MEMBER\"><\/Premium>\n                    <\/div>\n                <\/div>\n                <button class=\"button\" type=\"text\" @click=\"search\">Valider<\/button>\n            <\/div>\n        <\/template>\n    <\/div>\n    <div class=\"results-filters-container\">\n        <div class=\"filters-container\">\n            <ul class=\"filter-cat\" :class=\"{active: searchCats.NMD.active}\" @click=\"searchCatClicked(searchCats.NMD)\">\n                <li class=\"active\">\n                    <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/parchemin.svg\">\n                    \u00c9tat civil {{searchCats.NMD.get_count()}}\n                <\/li>\n                <ul>\n                    <li :class=\"{active: searchCats.NMD.bases.N.active==1}\" class=\"naissance\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.NMD,searchCats.NMD.bases.N)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-n.svg\">\n                        Naissances {{ searchCats.NMD.get_counts().N }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.NMD.bases.M.active==1}\" class=\"mariage\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.NMD,searchCats.NMD.bases.M)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-m.svg\">\n                        Mariages {{ searchCats.NMD.get_counts().M }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.NMD.bases.D.active==1}\" class=\"deces\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.NMD,searchCats.NMD.bases.D)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-d.svg\">\n                        D\u00e9c\u00e8s {{ searchCats.NMD.get_counts().D }}\n                    <\/li>\n                <\/ul>\n            <\/ul>\n            <ul class=\"filter-cat\" :class=\"{active: searchCats.P.active}\" @click=\"searchCatClicked(searchCats.P)\">\n                <li class=\"active\">\n                <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-biblio.svg\">\n                    Ouvrages en vente {{searchCats.P.get_count()}}\n                <\/li>\n                <ul>\n                    <li :class=\"{active: searchCats.P.bases.P_strasbourg.active==1}\" class=\"strasbourg\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.P,searchCats.P.bases.P_strasbourg)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                        Strasbourg {{ searchCats.P.get_counts().P_strasbourg }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.P.bases.P_idf.active==1}\" class=\"idf\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.P,searchCats.P.bases.P_idf)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                        \u00cele-de-France {{ searchCats.P.get_counts().P_idf }}\n                    <\/li>\n                <\/ul>\n            <\/ul>\n            <ul class=\"filter-cat\" :class=\"{active: searchCats.B.active}\" @click=\"searchCatClicked(searchCats.B)\">\n                <li class=\"active\">\n                <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/ouvrage.svg\">\n                    Biblioth\u00e8que {{searchCats.B.get_count()}}\n                <\/li>\n                <ul>\n                    <li :class=\"{active: searchCats.B.bases.B_strasbourg.active==1}\" class=\"strasbourg\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_strasbourg)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                        Strasbourg {{ searchCats.B.get_counts().B_strasbourg }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_idf.active==1}\" class=\"idf\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_idf)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                        \u00cele-de-France {{ searchCats.B.get_counts().B_idf }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_saverne.active==1}\" class=\"saverne\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_saverne)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saverne.svg\">\n                        Saverne {{ searchCats.B.get_counts().B_saverne }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_brumath.active==1}\" class=\"brumath\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_brumath)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/brumath.svg\">\n                        Brumath {{ searchCats.B.get_counts().B_brumath }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_selestat.active==1}\" class=\"selestat\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_selestat)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/selestat.svg\">\n                        S\u00e9lestat {{ searchCats.B.get_counts().B_selestat }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_saintamarin.active==1}\" class=\"saintamarin\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_saintamarin)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saintamarin.svg\">\n                        Saint-Amarin {{ searchCats.B.get_counts().B_saintamarin }}\n                    <\/li>\n                <\/ul>\n            <\/ul>\n        <\/div>\n        <div class=\"results-container\" :just-a-js-call=\"activeSearchCat=searchCats.get_active()\">\n            <div class=\"nav-pages\">\n                <div class=\"sortable hint-top\" @click=\"showSortPopup = true\" data-hint=\"Trier les r\u00e9sultats\" >\n                    <img decoding=\"async\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/fleche-haut-bas.svg\">\n                <\/div>\n                <div class=\"sort-popup\" v-if=\"showSortPopup\">\n                    <span class=\"title\">D\u00e9placez les \u00e9l\u00e9ments ci-dessous pour modifier l'ordre de tri :<\/span>\n                    <div class=\"sortable-container\" ref=\"sortableContainerEl\">\n                        <div v-for=\"(sortCol, i) in activeSearchCat.sort_orders\" :key=\"sortCol.name\" class=\"sort-row\" :data-col_name=\"sortCol.name\">\n                            <span class=\"number\">{{i+1}}<\/span>\n                            <!-- <span class=\"handle\"><img decoding=\"async\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-drag.svg\">\n                                {{ sortCol.display }}\n                            <\/span> -->\n                            <div class=up-down-buttons>\n                                <img decoding=\"async\" :class=\"{disabled:i==0}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/up.svg\" direction=\"up\" @click=\"swap_sort\">\n                                <img decoding=\"async\" :class=\"{disabled:i==activeSearchCat.sort_orders.length-1}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/down.svg\" direction=\"down\" @click=\"swap_sort\">\n                            <\/div>\n                            <div class=handle>{{ sortCol.display }}<\/div>\n                            <img decoding=\"async\" class=\"button\" v-if=\"sortCol.order=='DESC'\" @click=\"sortCol.order = 'ASC'\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/desc.svg\">\n                            <img decoding=\"async\" class=\"button\" v-else @click=\"sortCol.order = 'DESC'\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/asc.svg\">\n                        <\/div>\n                    <\/div>\n                    <button @click=\"showSortPopup = false\">OK<\/button>\n                <\/div>\n                <div class=\"pages hint--right\" data-hint=\"Pages\" >\n                    <div\n                        v-for=\"p in activeSearchCat.pages\"\n                        class=\"nav-item\"\n                        :class=\"{active:activeSearchCat.current_page==p}\"\n                        @click=\"change_results_page(activeSearchCat, p)\"\n                    >\n                        {{ p }}\n                    <\/div>\n                    <div v-if=\"activeSearchCat.fetch_err_code == 'TOO_MANY_RESULTS'\" class=\"nav-item disabled\">\n                        ...\n                    <\/div>\n                <\/div>\n                <div v-if=\"activeSearchCat.fetch_message\" class=\"fetch-message\">\n                    {{ activeSearchCat.fetch_message }}\n                <\/div>\n            <\/div>\n            <div class=\"searching-container\" v-if=\"false\">Recherche en cours<\/div>\n            <template v-else>\n                <div class=\"results-table\">\n                    <template v-if=\"activeSearchCat.name=='NMD'\">\n                        <div class=\"header\" @click=\"showSortPopup = true\">\n                            <div><\/div>\n                            <div>Acte<\/div>\n                            <div>Nom(s)<\/div>\n                            <div class=br-topright-5><\/div>\n                        <\/div>\n                        <div class=\"content\">\n                            <div class=\"row\" :class=\"{naissance:r.base=='N', mariage:r.base=='M', deces:r.base=='D'}\" v-for=\"r in activeSearchCat.all_results\" @click=\"result_row_clicked($event,r)\" @mouseup.middle=\"result_row_clicked($event,r)\">\n                                <div class=\"base-icon\">\n                                    <img class=\"picto-medium\" :src=\"'\/wp-content\/plugins\/cga\/assets\/icons\/icon-'+r.base.toLowerCase()+'.svg'\">\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.annee==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-calendar.svg\">\n                                        {{ r.annee }}\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.lieu==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-lieu.svg\">\n                                        {{ r.lieu }}\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div>\n                                        <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.conjoint_nom=='' && r.conjoint_prenom==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-m.svg\">\n                                    <\/div>\n                                    <div class=\"multiline\">\n                                        <div :style=\"{'font-weight':r.base!='M'?'bold':'unset'}\">\n                                            {{ r.nom.toUpperCase() }} {{ r.prenom }}\n                                        <\/div>\n                                        <div>\n                                            {{ r.conjoint_nom.toUpperCase() }} {{ r.conjoint_prenom }}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div class=\"table-content-cell\" v-if=\"IS_MEMBER\" :href=\"get_single_page_url(r)\">\n                                        <img decoding=\"async\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/parchemin.svg\">\n                                        <span>voir<\/span>\n                                    <\/div>\n                                    <span v-else>voir <\/span>\n                                    <Premium :show=\"!IS_MEMBER\"><\/Premium>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/template>\n                    <template v-else-if=\"activeSearchCat.name=='P'\">\n                        <div class=\"content\">\n                            <div class=\"row\" :class=\"{strasbourg:r.base=='P_strasbourg', idf:r.base=='P_idf'}\" v-for=\"r in activeSearchCat.all_results\" @click=\"result_row_clicked($event,r)\" @mouseup.middle=\"result_row_clicked($event,r)\">\n                                <div class=\"base-icon\">\n                                    <img decoding=\"async\" v-if=\"r.base=='P_strasbourg'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='P_idf'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                                    <span v-else>{{r.base}}<\/span>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"titre\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-biblio.svg\">\n                                            <span  class=\"cap bold\">\n                                                {{r.title}}\n                                            <\/span>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"auteur\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/auteur.svg\">\n                                            {{r.cga_auteur}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"cote\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/cote.svg\">\n                                            {{r.cga_cote}}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"ann\u00e9es concern\u00e9es\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.annee==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-calendar.svg\">\n                                            {{r.cga_annees_cga_annee_debut}} - {{r.cga_annees_cga_annee_fin}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"localit\u00e9s concern\u00e9es\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.lieu==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-lieu.svg\">\n                                            {{r.cga_localite}}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div class=\"table-content-cell\" :href=\"get_single_page_url(r)\">\n                                        <img class=\"product-img\" :src=\"r.img_src\">\n                                        <span>{{r._regular_price}}\u20ac<\/span>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/template>\n                    <template v-else-if=\"activeSearchCat.name=='B'\">\n                        <div class=\"content\">\n                            <div class=\"row\" :class=\"r.base.replace(\/^B_\/,'')\" v-for=\"r in activeSearchCat.all_results\" @click=\"result_row_clicked($event,r)\" @mouseup.middle=\"result_row_clicked($event,r)\">\n                                <div class=\"base-icon\">\n                                    <img decoding=\"async\" v-if=\"r.base=='B_strasbourg'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_idf'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_saverne'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saverne.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_brumath'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/brumath.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_selestat'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/selestat.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_saintamarin'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saintamarin.svg\">\n                                    <span v-else>{{r.base}}<\/span>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"titre\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/ouvrage.svg\">\n                                            <span class=\"cap bold\">\n                                                {{r.title}}\n                                            <\/span>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"auteur\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/auteur.svg\">\n                                            {{r.author}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"cote\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/cote.svg\">\n                                            {{r.cote}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\" v-if=\"r.pdf_url\" style=\"align-items: flex-start;\" @click.stop=\"\">\n                                        <div class=\"hint--top\" data-hint=\"voir PDF\">\n                                            <img decoding=\"async\" v-if=\"!IS_MEMBER\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/pdf.svg\">\n                                            <a v-else :href=\"get_pdf_url(r.pdf_url)\" target=\"_blank\">\n                                                <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/pdf.svg\">\n                                            <\/a>\n                                        <\/div>\n                                        <Premium :show=\"!IS_MEMBER\"><\/Premium>\n                                        <div class=\"fts-pages hint--top\" data-hint=\"r\u00e9sultats aux pages\">\n                                            <template v-for=\"p in r.FTS_pages.split(',')\">\n                                                <a v-if=\"IS_MEMBER\" :href=\"get_pdf_url(r.pdf_url,p)\" target=\"_blank\" >\n                                                    {{ p }}\n                                                <\/a>\n                                                <span v-else> {{ p }}<\/span>\n                                            <\/template>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"type d'ouvrage\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: false}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-type.svg\">\n                                            {{r.type}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"localit\u00e9s concern\u00e9es\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: false}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-lieu.svg\">\n                                            {{r.location}}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div class=\"table-content-cell\">\n                                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-oeil.svg\">\n                                        <span>d\u00e9tails<\/span>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/template>\n                <\/div>\n            <\/template>\n        <\/div>\n    <\/div>\n<\/div>\n\n<link rel=\"stylesheet\" href=\"https:\/\/alsace-genealogie.com\/wp-content\/plugins\/cga\/js\/front\/vue-components\/Premium.css\">\n<script type=\"module\">\n    const IS_MEMBER = false;\n    import { Premium } from \"https:\/\/alsace-genealogie.com\/wp-content\/plugins\/cga\/js\/front\/vue-components\/Premium.js\";\n    var ajaxurl = \"https:\/\/alsace-genealogie.com\/wp-admin\/admin-ajax.php\";\n    \n    class SearchBase {\n        constructor(name, display_name, active = 1) {\n            this.name = name,\n            this.display_name = display_name,\n            this.active = active\n            this.results_total = 0\n            this.searching = false\n        }\n        get_count() {\n            if(!this.active) return \"\"\n            if(this.searching) return \"...\"\n            if (this.active) return \"(\" + this.results_total + \")\"\n            else return \"\"\n        }\n    }\n    class SearchCat {\n        constructor(name, bases, active, sort_orders){\n            this.name = name\n            this.bases = bases\n            this.pages = 1\n            this.current_page = 1\n            this.max_pages = 1\n            this.all_results = []\n            this.active = active\n            this.sort_orders = sort_orders\n            this.fetch_message = undefined\n            this.fetch_err_code = undefined\n        }\n        get_bases(){\n            return Object.values(this.bases)\n        }\n        get_count(){\n            return '('+this.get_bases().reduce((sum,b)=>sum+b.results_total,0)+')'\n        }\n        get_counts(){\n            return Object.fromEntries(Object.keys(this.bases).map(key=>[key,this.bases[key].get_count()]))\n        }\n        reset_results(){\n            this.all_results = []\n            this.get_bases().forEach(b=>b.results_total=0)\n        }\n        setSearchingState(state){\n            if(state==false){\n                this.get_bases().forEach(b=>b.searching = false)\n            } else {\n                    this.get_bases().forEach(b=>b.searching=b.active)\n            }\n        }\n    }\n    class AdvancedField {\n        constructor(name, label, input_type=\"input\") {\n            this.name = name\n            this.label = label\n            this.input_type = input_type\n            this.val = undefined\n        }\n        to_POST(){\n            if(this.val) return [this.name, this.val]\n            return null\n        }\n    }\n    class AdvancedSearch {\n        constructor(name, display_name, fields, active = false, expanded = false) {\n            this.name = name\n            this.display_name = display_name\n            this.fields = fields\n            this.active = active\n            this.expanded = expanded\n        }\n        to_POST(){\n            var fs = this.fields.map(f=>f.to_POST()).filter(f=>f!=null)\n            \/\/ if(fs.length==0) return null\n            return [this.name, Object.fromEntries(fs)]\n        }\n    }\n    const {\n        createApp,\n        ref,\n        watch\n    } = Vue\n    const app = createApp({\n        components: {\n            Premium:Premium\n        },\n        setup() {\n            const searchInputName = ref(\"\")\n            const searchInputFirstName = ref(\"\")\n            const searchInputLocation = ref(\"\")\n            const searchCats = ref({\n                NMD: new SearchCat(\n                    'NMD',\n                    {\n                        N: new SearchBase(\"N\", \"Naissances\", 1),\n                        M: new SearchBase(\"M\", \"Mariages\", 1),\n                        D: new SearchBase(\"D\", \"D\u00e9c\u00e8s\", 1),\n                    },\n                    true,\n                    [\n                        {\n                            name: \"annee\",\n                            display: \"Ann\u00e9e\",\n                            order: \"DESC\"\n                        },\n                        {\n                            name: \"nom\",\n                            display: \"Nom\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"lieu\",\n                            display: \"Lieu\",\n                            order: \"ASC\"\n                        }\n                    ]\n                ),\n                P: new SearchCat(\n                    'P',\n                    {\n                        P_strasbourg: new SearchBase(\"P_strasbourg\", \"Strasbourg\", 1),\n                        P_idf: new SearchBase(\"P_idf\", \"\u00cele-de-France\", 1),\n                    },\n                    false,\n                    [\n                        {\n                            name: \"title\",\n                            display: \"Titre\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"cga_auteur\",\n                            display: \"Auteur\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"cga_cote\",\n                            display: \"Cote\",\n                            order: \"ASC\"\n                        }\n                    ]\n                ),\n                B: new SearchCat(\n                    'B',\n                    {\n                        B_strasbourg: new SearchBase(\"B_strasbourg\", \"Strasbourg\", 1),\n                        B_idf: new SearchBase(\"B_idf\", \"\u00cele-de-France\", 1),\n                        B_saverne: new SearchBase(\"B_saverne\", \"Saverne\", 1),\n                        B_brumath: new SearchBase(\"B_brumath\", \"Brumath\", 1),\n                        B_selestat: new SearchBase(\"B_selestat\", \"S\u00e9lestat\", 1),\n                        B_saintamarin: new SearchBase(\"B_saintamarin\", \"Saint-Amarin\", 1),\n                    },\n                    false,\n                    [\n                        {\n                            name: \"title\",\n                            display: \"Titre\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"author\",\n                            display: \"Auteur\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"cote\",\n                            display: \"Cote\",\n                            order: \"ASC\"\n                        }\n                    ]\n                ),\n                get: function(name){\n                    if(name==undefined){\n                        return [this.NMD, this.P, this.B]\n                    } else {\n                        return this[name]\n                    }\n                },\n                get_active: function(){\n                    return this.get().find(sc=>sc.active)\n                },\n                get_active_sort_orders: function(){\n                    return this.get_active().sort_orders\n                }\n            })\n\n            const advancedSearches = ref([\n                new AdvancedSearch(\n                    'global',\n                    'G\u00e9n\u00e9ral',\n                    [\n                        \/\/ new AdvancedField(\"location\", \"Localit\u00e9\"),\n                        new AdvancedField(\"year_from\", \"\u00c0 partir de\", \"number\"),\n                        new AdvancedField(\"year_to\", \"Jusqu'\u00e0\", \"number\"),\n                    ]\n                ),\n                new AdvancedSearch(\n                    'etat_civil',\n                    '\u00c9tat Civil',\n                    [\n                        new AdvancedField(\"spouse_lastname\", \"Nom du conjoint\"),\n                        new AdvancedField(\"spouse_firstname\", \"Pr\u00e9nom du conjoint\"),\n                    ]\n                ),\n                new AdvancedSearch(\n                    'bib',\n                    'Ouvrages',\n                    [\n                        new AdvancedField(\"cote\", \"Cote\"),\n                    ]\n                )\n            ])\n            const advancedSearchExpanded = ref(false)\n            \n            const showSortPopup = ref(false)\n            const sortableContainerEl = ref()\n\n            function searchCatClicked(searchCat){\n                if(searchCat.active) return;\n                searchCats.value.get().forEach(sc=>{\n                    if(sc==searchCat) sc.active = true\n                    else sc.active = false\n                })\n                set_url()\n            }\n\n            function searchSubCatClicked(searchCat, searchSubCat){\n                if(searchCat.active){\n                    searchSubCat.active ^= true\n                    search_one_cat(searchCat)\n                }\n            }\n            \n            function sortOrdersChanged(ev){\n                const rows = Array.from(ev.from.querySelectorAll('div.sort-row')).map(div=>div.dataset.col_name)\n                searchCats.value.get_active_sort_orders().sort((a,b) => rows.indexOf(a.name)-rows.indexOf(b.name))\n            }\n\n            function swap_sort(ev){\n                const disabled = ev.target.classList.contains('disabled')\n                if(disabled) return\n                const direction = ev.target.getAttribute('direction')\n                const rowEl = ev.target.closest('div.sort-row')\n                if(direction==\"down\"){\n                    rowEl.nextElementSibling.after(rowEl)\n                } else if(direction==\"up\"){\n                    rowEl.previousElementSibling.before(rowEl)\n                }\n                sortOrdersChanged({from:sortableContainerEl.value})\n            }\n\n            watch(sortableContainerEl, (newel) => {\n                if(newel){ \/\/ each time the element is shown\n                    new Sortable(newel,{\n                        animation: 150,\n                        ghostClass: 'dragging',\n                        handle: '.handle',\n                        onEnd: sortOrdersChanged\n                    })                    \n                } else { \/\/ each time the element is hidden\n                    search()\n                }\n            });\n\n            function search() {\n                set_url()\n                searchCats.value.get().forEach(searchCat=>{\n                    search_one_cat(searchCat)\n                })\n            }\n\n            function search_one_cat(searchCat) {\n                searchCat.reset_results()\n                if(searchCat.name=='NMD' && searchInputName.value.length<2 && searchInputLocation.value.length<3) {\n                    searchCat.fetch_message = \"Veuillez saisir ou moins un nom ou un lieu valide.\"\n                    return \n                }\n                \n                searchCat.setSearchingState(true)\n                searchCat.fetch_message = 'Recherche en cours...'\n                fetch(\n                    ajaxurl, {\n                        method: 'POST',\n                        headers: {\n                            'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8',\n                            'Cache-Control': 'no-cache',\n                        },\n                        body: new URLSearchParams({\n                            action: \"cga_main_search\",\n                            nameTerms: searchInputName.value,\n                            firstNameTerms: searchInputFirstName.value,\n                            locationTerms: searchInputLocation.value,\n                            page: searchCat.current_page,\n                            sort: JSON.stringify([\n                                searchCat.sort_orders.map(o=>o.name),\n                                searchCat.sort_orders.map(o=>o.order),\n                            ]),\n                            bases: JSON.stringify(Object.values(searchCat.bases).filter(sb=>sb.active).map(sb=>sb.name)),\n                            advanced: JSON.stringify(\n                                Object.fromEntries(\n                                    advancedSearches.value\n                                    .map(as=>as.to_POST())\n                                    \/\/ .filter(as=>as!=null)\n                                )\n                            )\n                        })\n                    }\n                )\n                .then(res => {\n                    return res.json()\n                })\n                .then(body => {\n                    if(body.status!=\"OK\"){\n                        searchCat.fetch_message = body.msg\n                        throw new Error(\"Error in fetch.\")\n                    }\n                    searchCat.all_results = body.results.map(r=>_.mapValues(r,v=>v==null?\"\":v)) \/\/convert null values from body.results objects to \"\".\n                    Object.entries(body.totals).forEach(([k,v])=>searchCat.bases[k].results_total = Number(v))\n                    searchCat.pages = Math.min(Number(body.pages), Number(body.max_pages))\n                    searchCat.current_page = Number(body.page)\n                    searchCat.fetch_message = body.msg\n                    searchCat.fetch_err_code = body.err_code\n                })\n                .catch((error)=>{\n                    \/\/ FIXME: maybe handle errors\n                    console.error(error.message)\n                })\n                .finally(()=>{\n                    searchCat.setSearchingState(false)\n                })\n            }\n\n            function add_url_param(url, name, value){\n                const url_obj = new URL(url)\n                url_obj.searchParams.set(name, value)\n                return url_obj.href\n            }\n\n            function get_pdf_url(baseurl, page){\n                var ret = baseurl\n                if(page>0){\n                    var ret = add_url_param(ret,'page',page)\n                }\n                if(searchInputName.value && searchInputName.value.length > 2){\n                    ret = add_url_param(ret,'highlight',searchInputName.value)\n                }\n                return ret\n            }\n\n            function set_url() {\n                const url = new URL(location.href)\n                \n                url.searchParams.set('activeCat',searchCats.value.get_active().name)\n\n                if(searchInputName.value != null && searchInputName.value != \"\") {\n                    url.searchParams.set('searchInputName', encodeURI(searchInputName.value))\n                } else {\n                    url.searchParams.delete('searchInputName')\n                }\n\n                if(searchInputFirstName.value != null && searchInputFirstName.value != \"\") {\n                    url.searchParams.set('searchInputFirstName', encodeURI(searchInputFirstName.value))\n                } else {\n                    url.searchParams.delete('searchInputFirstName')\n                }\n\n                if(searchInputLocation.value != null && searchInputLocation.value != \"\") {\n                    url.searchParams.set('searchInputLocation', encodeURI(searchInputLocation.value))\n                } else {\n                    url.searchParams.delete('searchInputLocation')\n                }\n\n                searchCats.value.get().forEach(searchCat=>{\n                    const page = searchCat.current_page\n                    const param_name = searchCat.name+'SearchPage'\n                    if(page != null && page != 1){\n                        url.searchParams.set(param_name, encodeURI(page))\n                    } else {\n                        url.searchParams.delete(param_name)\n                    }\n                })\n\n                advancedSearches.value.forEach(as=>{\n                    let paramName=as.name+'_'\n                    as.fields.forEach(af=>{\n                        if(af.val != null && af.val != \"\") url.searchParams.set(paramName+af.name, encodeURI(af.val))\n                        else url.searchParams.delete(paramName+af.name)\n                    })\n                })\n                window.history.replaceState(null, null, url.href);\n            }\n\n            function load_url() {\n                const url = new URL(location.href)\n                const activeCat_fromURL = url.searchParams.get('activeCat')\n                if (activeCat_fromURL != null) searchCatClicked(searchCats.value.get(activeCat_fromURL))\n                const searchInputName_fromURL = url.searchParams.get('searchInputName')\n                const searchInputFirstName_fromURL = url.searchParams.get('searchInputFirstName')\n                const searchInputLocation_fromURL = url.searchParams.get('searchInputLocation')\n                if (searchInputName_fromURL != null) searchInputName.value = decodeURI(searchInputName_fromURL)\n                if (searchInputFirstName_fromURL != null) searchInputFirstName.value = decodeURI(searchInputFirstName_fromURL)\n                if (searchInputLocation_fromURL != null) searchInputLocation.value = decodeURI(searchInputLocation_fromURL)\n                advancedSearches.value.forEach(as=>{\n                    let paramName=as.name+'_'\n                    as.fields.forEach(af=>{\n                        const fullParamName = paramName+af.name\n                        const param_fromURL = url.searchParams.get(fullParamName)\n                        if (param_fromURL != null){\n                            af.val = decodeURI(param_fromURL)\n                            as.expanded = true\n                        }\n                    })\n                })\n                searchCats.value.get().forEach(searchCat=>{\n                    const searchPage_fromURL = url.searchParams.get(searchCat.name+'SearchPage')\n                    if (searchPage_fromURL != null) searchCat.current_page = Number(decodeURI(searchPage_fromURL))\n                })\n                search()\n            }\n\n            function change_results_page(activeSearchCat,p) {\n                activeSearchCat.current_page = p\n                search_one_cat(activeSearchCat)\n            }\n\n            function result_row_clicked(ev, row) {\n                if(ev.target.tagName!='A'){\n                    window.open(get_single_page_url(row), '_blank').focus();\n                }\n            }\n\n            function get_single_page_url(row) {\n                const url_makers = {\n                    N: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?page_id=3614`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    M: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?page_id=3610`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    D: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?page_id=3605`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    P_strasbourg: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=1850`),\n                        params:[\n                            {url_name: 'p', row_value_getter:(r)=>r.id},\n                            {url_name: 'attribute_pa_warehouse', row_value_getter:(r)=>r.base.replace(\/^P_\/, \"\")}\n                        ]\n                    },\n                    P_idf: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=1850`),\n                        params:[\n                            {url_name: 'p', row_value_getter:(r)=>r.id},\n                            {url_name: 'attribute_pa_warehouse', row_value_getter:(r)=>r.base.replace(\/^P_\/, \"\")}\n                        ]\n                    },\n                    B_strasbourg: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_idf: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_saverne: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_selestat: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_brumath: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                }\n                const url_maker = url_makers[row.base]\n                const u = url_maker.base_url\n                url_maker.params.forEach(p=>{\n                    u.searchParams.set(p.url_name, p.row_value_getter(row))\n                })\n                return u.href\n            }\n\n            return {\n                IS_MEMBER,\n                searchInputName,\n                searchInputFirstName,\n                searchInputLocation,\n                searchCats,\n                search,\n                get_single_page_url,\n                result_row_clicked,\n                advancedSearches,\n                advancedSearchExpanded,\n                change_results_page,\n                load_url,\n                showSortPopup,\n                sortableContainerEl,\n                searchCatClicked,\n                searchSubCatClicked,\n                swap_sort,\n                get_pdf_url,\n            }\n        },\n        mounted() {\n            this.load_url()\n            \/\/ Handle popup close :\n            document.addEventListener('mouseup', (ev) => {\n                const el = document.querySelector(\".sort-popup\")\n                if (el && !el.contains(ev.target)) this.showSortPopup = false\n            })\n        }\n    })\n    app.mount('#cga-main-search-container')\n<\/script>\n[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<link rel=\"stylesheet\" href=\"https:\/\/alsace-genealogie.com\/wp-content\/plugins\/cga\/styles\/front-global-search.css\">\n<script src=\"https:\/\/unpkg.com\/vue@3\/dist\/vue.global.js\"><\/script>\n<script type=\"module\" src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/Sortable\/1.15.6\/Sortable.min.js\" integrity=\"sha512-csIng5zcB+XpulRUa+ev1zKo7zRNGpEaVfNB9On1no9KYTEY\/rLGAEEpvgdw6nim1WdTuihZY1eqZ31K7\/fZjw==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/lodash.js\/4.17.21\/lodash.min.js\" integrity=\"sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g\/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\n\n<div id=\"cga-main-search-container\">\n    <div class=\"search-form-container\">\n        <div class=\"first-line\">\n            <div class=\"basic-form\">\n                <input type=\"text\" v-model=\"searchInputName\" @keyup.enter=\"search\" placeholder=\"Nom \/ Titre d'ouvrage \/ Auteur...\">\n                <input type=\"text\" v-model=\"searchInputFirstName\" @keyup.enter=\"search\" placeholder=\"Pr\u00e9nom\">\n                <input type=\"text\" v-model=\"searchInputLocation\" @keyup.enter=\"search\" placeholder=\"Lieu\">\n                <button class=\"button\" type=\"text\" @click=\"search\">Rechercher<\/button>\n            <\/div>\n            <div class=\"advanced-forms-buttons\">\n                <!-- <button style=\"cursor: default;\" disabled> Plus de filtres :<\/button> -->\n                <!-- <img decoding=\"async\" src=\"\/wp-content\/themes\/Divi-Community\/img\/icon-parametre.svg\"> -->\n                <button\n                :class=\"{expanded: advancedSearchExpanded}\"\n                @click=\"advancedSearchExpanded = !advancedSearchExpanded\"\n                class=\"button\">\n                    \n                <Premium :show=\"!IS_MEMBER\"><\/Premium>\u25bc Plus de filtres&nbsp;\n                <\/button>\n            <\/div>\n        <\/div>\n            <div v-if=\"advancedSearchExpanded\" class=\"advanced-search\">\n                <div v-for=\"advancedSearch in advancedSearches\" class=\"advanced-search-line\" :class=\"advancedSearch.name\">\n                    <div class=\"advanced-search-line-name\">{{advancedSearch.display_name}}<\/div>\n                    <div v-for=\"field in advancedSearch.fields\" class=\"input-container\">\n                        <input :for=\"advancedSearch.name+'_'+field.name\" :type=\"field.input_type\" v-model=\"field.val\" :disabled=\"!IS_MEMBER\" @keyup.enter=\"search\">\n                        <label @click=\"\" :for=\"advancedSearch.name+'_'+field.name\" :class=\"{small:field.val}\">{{ field.label }}<\/label>\n                        <Premium :show=\"!IS_MEMBER\"><\/Premium>\n                    <\/div>\n                <\/div>\n                <button class=\"button\" type=\"text\" @click=\"search\">Valider<\/button>\n            <\/div>\n        <\/template>\n    <\/div>\n    <div class=\"results-filters-container\">\n        <div class=\"filters-container\">\n            <ul class=\"filter-cat\" :class=\"{active: searchCats.NMD.active}\" @click=\"searchCatClicked(searchCats.NMD)\">\n                <li class=\"active\">\n                    <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/parchemin.svg\">\n                    \u00c9tat civil {{searchCats.NMD.get_count()}}\n                <\/li>\n                <ul>\n                    <li :class=\"{active: searchCats.NMD.bases.N.active==1}\" class=\"naissance\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.NMD,searchCats.NMD.bases.N)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-n.svg\">\n                        Naissances {{ searchCats.NMD.get_counts().N }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.NMD.bases.M.active==1}\" class=\"mariage\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.NMD,searchCats.NMD.bases.M)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-m.svg\">\n                        Mariages {{ searchCats.NMD.get_counts().M }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.NMD.bases.D.active==1}\" class=\"deces\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.NMD,searchCats.NMD.bases.D)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-d.svg\">\n                        D\u00e9c\u00e8s {{ searchCats.NMD.get_counts().D }}\n                    <\/li>\n                <\/ul>\n            <\/ul>\n            <ul class=\"filter-cat\" :class=\"{active: searchCats.P.active}\" @click=\"searchCatClicked(searchCats.P)\">\n                <li class=\"active\">\n                <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-biblio.svg\">\n                    Ouvrages en vente {{searchCats.P.get_count()}}\n                <\/li>\n                <ul>\n                    <li :class=\"{active: searchCats.P.bases.P_strasbourg.active==1}\" class=\"strasbourg\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.P,searchCats.P.bases.P_strasbourg)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                        Strasbourg {{ searchCats.P.get_counts().P_strasbourg }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.P.bases.P_idf.active==1}\" class=\"idf\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.P,searchCats.P.bases.P_idf)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                        \u00cele-de-France {{ searchCats.P.get_counts().P_idf }}\n                    <\/li>\n                <\/ul>\n            <\/ul>\n            <ul class=\"filter-cat\" :class=\"{active: searchCats.B.active}\" @click=\"searchCatClicked(searchCats.B)\">\n                <li class=\"active\">\n                <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/ouvrage.svg\">\n                    Biblioth\u00e8que {{searchCats.B.get_count()}}\n                <\/li>\n                <ul>\n                    <li :class=\"{active: searchCats.B.bases.B_strasbourg.active==1}\" class=\"strasbourg\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_strasbourg)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                        Strasbourg {{ searchCats.B.get_counts().B_strasbourg }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_idf.active==1}\" class=\"idf\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_idf)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                        \u00cele-de-France {{ searchCats.B.get_counts().B_idf }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_saverne.active==1}\" class=\"saverne\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_saverne)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saverne.svg\">\n                        Saverne {{ searchCats.B.get_counts().B_saverne }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_brumath.active==1}\" class=\"brumath\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_brumath)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/brumath.svg\">\n                        Brumath {{ searchCats.B.get_counts().B_brumath }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_selestat.active==1}\" class=\"selestat\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_selestat)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/selestat.svg\">\n                        S\u00e9lestat {{ searchCats.B.get_counts().B_selestat }}\n                    <\/li>\n                    <li :class=\"{active: searchCats.B.bases.B_saintamarin.active==1}\" class=\"saintamarin\" title=\"ajouter\/supprimer\" @click=\"searchSubCatClicked(searchCats.B,searchCats.B.bases.B_saintamarin)\">\n                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saintamarin.svg\">\n                        Saint-Amarin {{ searchCats.B.get_counts().B_saintamarin }}\n                    <\/li>\n                <\/ul>\n            <\/ul>\n        <\/div>\n        <div class=\"results-container\" :just-a-js-call=\"activeSearchCat=searchCats.get_active()\">\n            <div class=\"nav-pages\">\n                <div class=\"sortable hint-top\" @click=\"showSortPopup = true\" data-hint=\"Trier les r\u00e9sultats\" >\n                    <img decoding=\"async\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/fleche-haut-bas.svg\">\n                <\/div>\n                <div class=\"sort-popup\" v-if=\"showSortPopup\">\n                    <span class=\"title\">D\u00e9placez les \u00e9l\u00e9ments ci-dessous pour modifier l'ordre de tri :<\/span>\n                    <div class=\"sortable-container\" ref=\"sortableContainerEl\">\n                        <div v-for=\"(sortCol, i) in activeSearchCat.sort_orders\" :key=\"sortCol.name\" class=\"sort-row\" :data-col_name=\"sortCol.name\">\n                            <span class=\"number\">{{i+1}}<\/span>\n                            <!-- <span class=\"handle\"><img decoding=\"async\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-drag.svg\">\n                                {{ sortCol.display }}\n                            <\/span> -->\n                            <div class=up-down-buttons>\n                                <img decoding=\"async\" :class=\"{disabled:i==0}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/up.svg\" direction=\"up\" @click=\"swap_sort\">\n                                <img decoding=\"async\" :class=\"{disabled:i==activeSearchCat.sort_orders.length-1}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/down.svg\" direction=\"down\" @click=\"swap_sort\">\n                            <\/div>\n                            <div class=handle>{{ sortCol.display }}<\/div>\n                            <img decoding=\"async\" class=\"button\" v-if=\"sortCol.order=='DESC'\" @click=\"sortCol.order = 'ASC'\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/desc.svg\">\n                            <img decoding=\"async\" class=\"button\" v-else @click=\"sortCol.order = 'DESC'\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/asc.svg\">\n                        <\/div>\n                    <\/div>\n                    <button @click=\"showSortPopup = false\">OK<\/button>\n                <\/div>\n                <div class=\"pages hint--right\" data-hint=\"Pages\" >\n                    <div\n                        v-for=\"p in activeSearchCat.pages\"\n                        class=\"nav-item\"\n                        :class=\"{active:activeSearchCat.current_page==p}\"\n                        @click=\"change_results_page(activeSearchCat, p)\"\n                    >\n                        {{ p }}\n                    <\/div>\n                    <div v-if=\"activeSearchCat.fetch_err_code == 'TOO_MANY_RESULTS'\" class=\"nav-item disabled\">\n                        ...\n                    <\/div>\n                <\/div>\n                <div v-if=\"activeSearchCat.fetch_message\" class=\"fetch-message\">\n                    {{ activeSearchCat.fetch_message }}\n                <\/div>\n            <\/div>\n            <div class=\"searching-container\" v-if=\"false\">Recherche en cours<\/div>\n            <template v-else>\n                <div class=\"results-table\">\n                    <template v-if=\"activeSearchCat.name=='NMD'\">\n                        <div class=\"header\" @click=\"showSortPopup = true\">\n                            <div><\/div>\n                            <div>Acte<\/div>\n                            <div>Nom(s)<\/div>\n                            <div class=br-topright-5><\/div>\n                        <\/div>\n                        <div class=\"content\">\n                            <div class=\"row\" :class=\"{naissance:r.base=='N', mariage:r.base=='M', deces:r.base=='D'}\" v-for=\"r in activeSearchCat.all_results\" @click=\"result_row_clicked($event,r)\" @mouseup.middle=\"result_row_clicked($event,r)\">\n                                <div class=\"base-icon\">\n                                    <img class=\"picto-medium\" :src=\"'\/wp-content\/plugins\/cga\/assets\/icons\/icon-'+r.base.toLowerCase()+'.svg'\">\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.annee==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-calendar.svg\">\n                                        {{ r.annee }}\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.lieu==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-lieu.svg\">\n                                        {{ r.lieu }}\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div>\n                                        <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.conjoint_nom=='' && r.conjoint_prenom==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-m.svg\">\n                                    <\/div>\n                                    <div class=\"multiline\">\n                                        <div :style=\"{'font-weight':r.base!='M'?'bold':'unset'}\">\n                                            {{ r.nom.toUpperCase() }} {{ r.prenom }}\n                                        <\/div>\n                                        <div>\n                                            {{ r.conjoint_nom.toUpperCase() }} {{ r.conjoint_prenom }}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div class=\"table-content-cell\" v-if=\"IS_MEMBER\" :href=\"get_single_page_url(r)\">\n                                        <img decoding=\"async\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/parchemin.svg\">\n                                        <span>voir<\/span>\n                                    <\/div>\n                                    <span v-else>voir <\/span>\n                                    <Premium :show=\"!IS_MEMBER\"><\/Premium>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/template>\n                    <template v-else-if=\"activeSearchCat.name=='P'\">\n                        <div class=\"content\">\n                            <div class=\"row\" :class=\"{strasbourg:r.base=='P_strasbourg', idf:r.base=='P_idf'}\" v-for=\"r in activeSearchCat.all_results\" @click=\"result_row_clicked($event,r)\" @mouseup.middle=\"result_row_clicked($event,r)\">\n                                <div class=\"base-icon\">\n                                    <img decoding=\"async\" v-if=\"r.base=='P_strasbourg'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='P_idf'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                                    <span v-else>{{r.base}}<\/span>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"titre\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-biblio.svg\">\n                                            <span  class=\"cap bold\">\n                                                {{r.title}}\n                                            <\/span>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"auteur\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/auteur.svg\">\n                                            {{r.cga_auteur}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"cote\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/cote.svg\">\n                                            {{r.cga_cote}}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"ann\u00e9es concern\u00e9es\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.annee==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-calendar.svg\">\n                                            {{r.cga_annees_cga_annee_debut}} - {{r.cga_annees_cga_annee_fin}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"localit\u00e9s concern\u00e9es\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: r.lieu==''}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-lieu.svg\">\n                                            {{r.cga_localite}}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div class=\"table-content-cell\" :href=\"get_single_page_url(r)\">\n                                        <img class=\"product-img\" :src=\"r.img_src\">\n                                        <span>{{r._regular_price}}\u20ac<\/span>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/template>\n                    <template v-else-if=\"activeSearchCat.name=='B'\">\n                        <div class=\"content\">\n                            <div class=\"row\" :class=\"r.base.replace(\/^B_\/,'')\" v-for=\"r in activeSearchCat.all_results\" @click=\"result_row_clicked($event,r)\" @mouseup.middle=\"result_row_clicked($event,r)\">\n                                <div class=\"base-icon\">\n                                    <img decoding=\"async\" v-if=\"r.base=='B_strasbourg'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/strasbourg.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_idf'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/idf.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_saverne'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saverne.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_brumath'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/brumath.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_selestat'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/selestat.svg\">\n                                    <img decoding=\"async\" v-else-if=\"r.base=='B_saintamarin'\" class=\"picto-medium\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/saintamarin.svg\">\n                                    <span v-else>{{r.base}}<\/span>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"titre\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/ouvrage.svg\">\n                                            <span class=\"cap bold\">\n                                                {{r.title}}\n                                            <\/span>\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"auteur\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/auteur.svg\">\n                                            {{r.author}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"cote\">\n                                            <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/cote.svg\">\n                                            {{r.cote}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\" v-if=\"r.pdf_url\" style=\"align-items: flex-start;\" @click.stop=\"\">\n                                        <div class=\"hint--top\" data-hint=\"voir PDF\">\n                                            <img decoding=\"async\" v-if=\"!IS_MEMBER\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/pdf.svg\">\n                                            <a v-else :href=\"get_pdf_url(r.pdf_url)\" target=\"_blank\">\n                                                <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/pdf.svg\">\n                                            <\/a>\n                                        <\/div>\n                                        <Premium :show=\"!IS_MEMBER\"><\/Premium>\n                                        <div class=\"fts-pages hint--top\" data-hint=\"r\u00e9sultats aux pages\">\n                                            <template v-for=\"p in r.FTS_pages.split(',')\">\n                                                <a v-if=\"IS_MEMBER\" :href=\"get_pdf_url(r.pdf_url,p)\" target=\"_blank\" >\n                                                    {{ p }}\n                                                <\/a>\n                                                <span v-else> {{ p }}<\/span>\n                                            <\/template>\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"type d'ouvrage\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: false}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-type.svg\">\n                                            {{r.type}}\n                                        <\/div>\n                                    <\/div>\n                                    <div class=\"table-content-cell\">\n                                        <div class=\"hint--top\" data-hint=\"localit\u00e9s concern\u00e9es\">\n                                            <img decoding=\"async\" class=\"picto-small\" :class=\"{hidden: false}\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-lieu.svg\">\n                                            {{r.location}}\n                                        <\/div>\n                                    <\/div>\n                                <\/div>\n                                <div class=\"table-content-cell\">\n                                    <div class=\"table-content-cell\">\n                                        <img decoding=\"async\" class=\"picto-small\" src=\"\/wp-content\/plugins\/cga\/assets\/icons\/icon-oeil.svg\">\n                                        <span>d\u00e9tails<\/span>\n                                    <\/div>\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/template>\n                <\/div>\n            <\/template>\n        <\/div>\n    <\/div>\n<\/div>\n\n<link rel=\"stylesheet\" href=\"https:\/\/alsace-genealogie.com\/wp-content\/plugins\/cga\/js\/front\/vue-components\/Premium.css\">\n<script type=\"module\">\n    const IS_MEMBER = false;\n    import { Premium } from \"https:\/\/alsace-genealogie.com\/wp-content\/plugins\/cga\/js\/front\/vue-components\/Premium.js\";\n    var ajaxurl = \"https:\/\/alsace-genealogie.com\/wp-admin\/admin-ajax.php\";\n    \n    class SearchBase {\n        constructor(name, display_name, active = 1) {\n            this.name = name,\n            this.display_name = display_name,\n            this.active = active\n            this.results_total = 0\n            this.searching = false\n        }\n        get_count() {\n            if(!this.active) return \"\"\n            if(this.searching) return \"...\"\n            if (this.active) return \"(\" + this.results_total + \")\"\n            else return \"\"\n        }\n    }\n    class SearchCat {\n        constructor(name, bases, active, sort_orders){\n            this.name = name\n            this.bases = bases\n            this.pages = 1\n            this.current_page = 1\n            this.max_pages = 1\n            this.all_results = []\n            this.active = active\n            this.sort_orders = sort_orders\n            this.fetch_message = undefined\n            this.fetch_err_code = undefined\n        }\n        get_bases(){\n            return Object.values(this.bases)\n        }\n        get_count(){\n            return '('+this.get_bases().reduce((sum,b)=>sum+b.results_total,0)+')'\n        }\n        get_counts(){\n            return Object.fromEntries(Object.keys(this.bases).map(key=>[key,this.bases[key].get_count()]))\n        }\n        reset_results(){\n            this.all_results = []\n            this.get_bases().forEach(b=>b.results_total=0)\n        }\n        setSearchingState(state){\n            if(state==false){\n                this.get_bases().forEach(b=>b.searching = false)\n            } else {\n                    this.get_bases().forEach(b=>b.searching=b.active)\n            }\n        }\n    }\n    class AdvancedField {\n        constructor(name, label, input_type=\"input\") {\n            this.name = name\n            this.label = label\n            this.input_type = input_type\n            this.val = undefined\n        }\n        to_POST(){\n            if(this.val) return [this.name, this.val]\n            return null\n        }\n    }\n    class AdvancedSearch {\n        constructor(name, display_name, fields, active = false, expanded = false) {\n            this.name = name\n            this.display_name = display_name\n            this.fields = fields\n            this.active = active\n            this.expanded = expanded\n        }\n        to_POST(){\n            var fs = this.fields.map(f=>f.to_POST()).filter(f=>f!=null)\n            \/\/ if(fs.length==0) return null\n            return [this.name, Object.fromEntries(fs)]\n        }\n    }\n    const {\n        createApp,\n        ref,\n        watch\n    } = Vue\n    const app = createApp({\n        components: {\n            Premium:Premium\n        },\n        setup() {\n            const searchInputName = ref(\"\")\n            const searchInputFirstName = ref(\"\")\n            const searchInputLocation = ref(\"\")\n            const searchCats = ref({\n                NMD: new SearchCat(\n                    'NMD',\n                    {\n                        N: new SearchBase(\"N\", \"Naissances\", 1),\n                        M: new SearchBase(\"M\", \"Mariages\", 1),\n                        D: new SearchBase(\"D\", \"D\u00e9c\u00e8s\", 1),\n                    },\n                    true,\n                    [\n                        {\n                            name: \"annee\",\n                            display: \"Ann\u00e9e\",\n                            order: \"DESC\"\n                        },\n                        {\n                            name: \"nom\",\n                            display: \"Nom\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"lieu\",\n                            display: \"Lieu\",\n                            order: \"ASC\"\n                        }\n                    ]\n                ),\n                P: new SearchCat(\n                    'P',\n                    {\n                        P_strasbourg: new SearchBase(\"P_strasbourg\", \"Strasbourg\", 1),\n                        P_idf: new SearchBase(\"P_idf\", \"\u00cele-de-France\", 1),\n                    },\n                    false,\n                    [\n                        {\n                            name: \"title\",\n                            display: \"Titre\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"cga_auteur\",\n                            display: \"Auteur\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"cga_cote\",\n                            display: \"Cote\",\n                            order: \"ASC\"\n                        }\n                    ]\n                ),\n                B: new SearchCat(\n                    'B',\n                    {\n                        B_strasbourg: new SearchBase(\"B_strasbourg\", \"Strasbourg\", 1),\n                        B_idf: new SearchBase(\"B_idf\", \"\u00cele-de-France\", 1),\n                        B_saverne: new SearchBase(\"B_saverne\", \"Saverne\", 1),\n                        B_brumath: new SearchBase(\"B_brumath\", \"Brumath\", 1),\n                        B_selestat: new SearchBase(\"B_selestat\", \"S\u00e9lestat\", 1),\n                        B_saintamarin: new SearchBase(\"B_saintamarin\", \"Saint-Amarin\", 1),\n                    },\n                    false,\n                    [\n                        {\n                            name: \"title\",\n                            display: \"Titre\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"author\",\n                            display: \"Auteur\",\n                            order: \"ASC\"\n                        },\n                        {\n                            name: \"cote\",\n                            display: \"Cote\",\n                            order: \"ASC\"\n                        }\n                    ]\n                ),\n                get: function(name){\n                    if(name==undefined){\n                        return [this.NMD, this.P, this.B]\n                    } else {\n                        return this[name]\n                    }\n                },\n                get_active: function(){\n                    return this.get().find(sc=>sc.active)\n                },\n                get_active_sort_orders: function(){\n                    return this.get_active().sort_orders\n                }\n            })\n\n            const advancedSearches = ref([\n                new AdvancedSearch(\n                    'global',\n                    'G\u00e9n\u00e9ral',\n                    [\n                        \/\/ new AdvancedField(\"location\", \"Localit\u00e9\"),\n                        new AdvancedField(\"year_from\", \"\u00c0 partir de\", \"number\"),\n                        new AdvancedField(\"year_to\", \"Jusqu'\u00e0\", \"number\"),\n                    ]\n                ),\n                new AdvancedSearch(\n                    'etat_civil',\n                    '\u00c9tat Civil',\n                    [\n                        new AdvancedField(\"spouse_lastname\", \"Nom du conjoint\"),\n                        new AdvancedField(\"spouse_firstname\", \"Pr\u00e9nom du conjoint\"),\n                    ]\n                ),\n                new AdvancedSearch(\n                    'bib',\n                    'Ouvrages',\n                    [\n                        new AdvancedField(\"cote\", \"Cote\"),\n                    ]\n                )\n            ])\n            const advancedSearchExpanded = ref(false)\n            \n            const showSortPopup = ref(false)\n            const sortableContainerEl = ref()\n\n            function searchCatClicked(searchCat){\n                if(searchCat.active) return;\n                searchCats.value.get().forEach(sc=>{\n                    if(sc==searchCat) sc.active = true\n                    else sc.active = false\n                })\n                set_url()\n            }\n\n            function searchSubCatClicked(searchCat, searchSubCat){\n                if(searchCat.active){\n                    searchSubCat.active ^= true\n                    search_one_cat(searchCat)\n                }\n            }\n            \n            function sortOrdersChanged(ev){\n                const rows = Array.from(ev.from.querySelectorAll('div.sort-row')).map(div=>div.dataset.col_name)\n                searchCats.value.get_active_sort_orders().sort((a,b) => rows.indexOf(a.name)-rows.indexOf(b.name))\n            }\n\n            function swap_sort(ev){\n                const disabled = ev.target.classList.contains('disabled')\n                if(disabled) return\n                const direction = ev.target.getAttribute('direction')\n                const rowEl = ev.target.closest('div.sort-row')\n                if(direction==\"down\"){\n                    rowEl.nextElementSibling.after(rowEl)\n                } else if(direction==\"up\"){\n                    rowEl.previousElementSibling.before(rowEl)\n                }\n                sortOrdersChanged({from:sortableContainerEl.value})\n            }\n\n            watch(sortableContainerEl, (newel) => {\n                if(newel){ \/\/ each time the element is shown\n                    new Sortable(newel,{\n                        animation: 150,\n                        ghostClass: 'dragging',\n                        handle: '.handle',\n                        onEnd: sortOrdersChanged\n                    })                    \n                } else { \/\/ each time the element is hidden\n                    search()\n                }\n            });\n\n            function search() {\n                set_url()\n                searchCats.value.get().forEach(searchCat=>{\n                    search_one_cat(searchCat)\n                })\n            }\n\n            function search_one_cat(searchCat) {\n                searchCat.reset_results()\n                if(searchCat.name=='NMD' && searchInputName.value.length<2 && searchInputLocation.value.length<3) {\n                    searchCat.fetch_message = \"Veuillez saisir ou moins un nom ou un lieu valide.\"\n                    return \n                }\n                \n                searchCat.setSearchingState(true)\n                searchCat.fetch_message = 'Recherche en cours...'\n                fetch(\n                    ajaxurl, {\n                        method: 'POST',\n                        headers: {\n                            'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8',\n                            'Cache-Control': 'no-cache',\n                        },\n                        body: new URLSearchParams({\n                            action: \"cga_main_search\",\n                            nameTerms: searchInputName.value,\n                            firstNameTerms: searchInputFirstName.value,\n                            locationTerms: searchInputLocation.value,\n                            page: searchCat.current_page,\n                            sort: JSON.stringify([\n                                searchCat.sort_orders.map(o=>o.name),\n                                searchCat.sort_orders.map(o=>o.order),\n                            ]),\n                            bases: JSON.stringify(Object.values(searchCat.bases).filter(sb=>sb.active).map(sb=>sb.name)),\n                            advanced: JSON.stringify(\n                                Object.fromEntries(\n                                    advancedSearches.value\n                                    .map(as=>as.to_POST())\n                                    \/\/ .filter(as=>as!=null)\n                                )\n                            )\n                        })\n                    }\n                )\n                .then(res => {\n                    return res.json()\n                })\n                .then(body => {\n                    if(body.status!=\"OK\"){\n                        searchCat.fetch_message = body.msg\n                        throw new Error(\"Error in fetch.\")\n                    }\n                    searchCat.all_results = body.results.map(r=>_.mapValues(r,v=>v==null?\"\":v)) \/\/convert null values from body.results objects to \"\".\n                    Object.entries(body.totals).forEach(([k,v])=>searchCat.bases[k].results_total = Number(v))\n                    searchCat.pages = Math.min(Number(body.pages), Number(body.max_pages))\n                    searchCat.current_page = Number(body.page)\n                    searchCat.fetch_message = body.msg\n                    searchCat.fetch_err_code = body.err_code\n                })\n                .catch((error)=>{\n                    \/\/ FIXME: maybe handle errors\n                    console.error(error.message)\n                })\n                .finally(()=>{\n                    searchCat.setSearchingState(false)\n                })\n            }\n\n            function add_url_param(url, name, value){\n                const url_obj = new URL(url)\n                url_obj.searchParams.set(name, value)\n                return url_obj.href\n            }\n\n            function get_pdf_url(baseurl, page){\n                var ret = baseurl\n                if(page>0){\n                    var ret = add_url_param(ret,'page',page)\n                }\n                if(searchInputName.value && searchInputName.value.length > 2){\n                    ret = add_url_param(ret,'highlight',searchInputName.value)\n                }\n                return ret\n            }\n\n            function set_url() {\n                const url = new URL(location.href)\n                \n                url.searchParams.set('activeCat',searchCats.value.get_active().name)\n\n                if(searchInputName.value != null && searchInputName.value != \"\") {\n                    url.searchParams.set('searchInputName', encodeURI(searchInputName.value))\n                } else {\n                    url.searchParams.delete('searchInputName')\n                }\n\n                if(searchInputFirstName.value != null && searchInputFirstName.value != \"\") {\n                    url.searchParams.set('searchInputFirstName', encodeURI(searchInputFirstName.value))\n                } else {\n                    url.searchParams.delete('searchInputFirstName')\n                }\n\n                if(searchInputLocation.value != null && searchInputLocation.value != \"\") {\n                    url.searchParams.set('searchInputLocation', encodeURI(searchInputLocation.value))\n                } else {\n                    url.searchParams.delete('searchInputLocation')\n                }\n\n                searchCats.value.get().forEach(searchCat=>{\n                    const page = searchCat.current_page\n                    const param_name = searchCat.name+'SearchPage'\n                    if(page != null && page != 1){\n                        url.searchParams.set(param_name, encodeURI(page))\n                    } else {\n                        url.searchParams.delete(param_name)\n                    }\n                })\n\n                advancedSearches.value.forEach(as=>{\n                    let paramName=as.name+'_'\n                    as.fields.forEach(af=>{\n                        if(af.val != null && af.val != \"\") url.searchParams.set(paramName+af.name, encodeURI(af.val))\n                        else url.searchParams.delete(paramName+af.name)\n                    })\n                })\n                window.history.replaceState(null, null, url.href);\n            }\n\n            function load_url() {\n                const url = new URL(location.href)\n                const activeCat_fromURL = url.searchParams.get('activeCat')\n                if (activeCat_fromURL != null) searchCatClicked(searchCats.value.get(activeCat_fromURL))\n                const searchInputName_fromURL = url.searchParams.get('searchInputName')\n                const searchInputFirstName_fromURL = url.searchParams.get('searchInputFirstName')\n                const searchInputLocation_fromURL = url.searchParams.get('searchInputLocation')\n                if (searchInputName_fromURL != null) searchInputName.value = decodeURI(searchInputName_fromURL)\n                if (searchInputFirstName_fromURL != null) searchInputFirstName.value = decodeURI(searchInputFirstName_fromURL)\n                if (searchInputLocation_fromURL != null) searchInputLocation.value = decodeURI(searchInputLocation_fromURL)\n                advancedSearches.value.forEach(as=>{\n                    let paramName=as.name+'_'\n                    as.fields.forEach(af=>{\n                        const fullParamName = paramName+af.name\n                        const param_fromURL = url.searchParams.get(fullParamName)\n                        if (param_fromURL != null){\n                            af.val = decodeURI(param_fromURL)\n                            as.expanded = true\n                        }\n                    })\n                })\n                searchCats.value.get().forEach(searchCat=>{\n                    const searchPage_fromURL = url.searchParams.get(searchCat.name+'SearchPage')\n                    if (searchPage_fromURL != null) searchCat.current_page = Number(decodeURI(searchPage_fromURL))\n                })\n                search()\n            }\n\n            function change_results_page(activeSearchCat,p) {\n                activeSearchCat.current_page = p\n                search_one_cat(activeSearchCat)\n            }\n\n            function result_row_clicked(ev, row) {\n                if(ev.target.tagName!='A'){\n                    window.open(get_single_page_url(row), '_blank').focus();\n                }\n            }\n\n            function get_single_page_url(row) {\n                const url_makers = {\n                    N: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?page_id=3614`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    M: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?page_id=3610`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    D: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?page_id=3605`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    P_strasbourg: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=1850`),\n                        params:[\n                            {url_name: 'p', row_value_getter:(r)=>r.id},\n                            {url_name: 'attribute_pa_warehouse', row_value_getter:(r)=>r.base.replace(\/^P_\/, \"\")}\n                        ]\n                    },\n                    P_idf: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=1850`),\n                        params:[\n                            {url_name: 'p', row_value_getter:(r)=>r.id},\n                            {url_name: 'attribute_pa_warehouse', row_value_getter:(r)=>r.base.replace(\/^P_\/, \"\")}\n                        ]\n                    },\n                    B_strasbourg: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_idf: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_saverne: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_selestat: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                    B_brumath: {\n                        base_url: new URL(`https:\/\/alsace-genealogie.com\/?post_type=page&p=2588`),\n                        params:[\n                            {url_name: 'id', row_value_getter:(r)=>r.id}\n                        ]\n                    },\n                }\n                const url_maker = url_makers[row.base]\n                const u = url_maker.base_url\n                url_maker.params.forEach(p=>{\n                    u.searchParams.set(p.url_name, p.row_value_getter(row))\n                })\n                return u.href\n            }\n\n            return {\n                IS_MEMBER,\n                searchInputName,\n                searchInputFirstName,\n                searchInputLocation,\n                searchCats,\n                search,\n                get_single_page_url,\n                result_row_clicked,\n                advancedSearches,\n                advancedSearchExpanded,\n                change_results_page,\n                load_url,\n                showSortPopup,\n                sortableContainerEl,\n                searchCatClicked,\n                searchSubCatClicked,\n                swap_sort,\n                get_pdf_url,\n            }\n        },\n        mounted() {\n            this.load_url()\n            \/\/ Handle popup close :\n            document.addEventListener('mouseup', (ev) => {\n                const el = document.querySelector(\".sort-popup\")\n                if (el && !el.contains(ev.target)) this.showSortPopup = false\n            })\n        }\n    })\n    app.mount('#cga-main-search-container')\n<\/script>\n\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"class_list":["post-1286","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=\/wp\/v2\/pages\/1286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1286"}],"version-history":[{"count":10,"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=\/wp\/v2\/pages\/1286\/revisions"}],"predecessor-version":[{"id":1345,"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=\/wp\/v2\/pages\/1286\/revisions\/1345"}],"wp:attachment":[{"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alsace-genealogie.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}