PageSourceSearch

https://boutique.france-catholique.fr/core/aboshop/menu.factory.js?v=

js france-catholique.fr collected 2026-10-02 10:36:44 UTC 6,514 bytes, 211 lines download raw bytes

1'use strict'; //
2
3
4// 761110
5// 35000
6
7// ****************************************************
8//  Gestion des Menus (Header et Footer)
9// ****************************************************
10angular.module('AboShopApp').factory('menusManager', ['$q','TbsWS','utils','productsManager', 'commonConfig', '$rootScope', 'categoriesManager',function ($q, TbsWS, utils, productsManager, commonConfig, $rootScope, categoriesManager) {
11	var factory = {};
12	
13	function recursiveStoreId(items, list, param){
14		for(var i =0;i<items.length;i++){
15  			if(items[i].type === "menu"){
16	    		list = _.union(list, recursiveStoreId(items[i].items, list, param));
17	    	} else if(items[i].type === param){
18    			list.push(items[i].id);
19	    	}
20		}
21		return list;
22	}
23	
24	function removeItem(items){
25		return _.filter(items, function(item){
26			let sdelete = item.mustbedelete;
27			delete item.mustbedelete;
28			//return !sdelete; 
29			return true;
30		});
31	}
32	
33	function recursivePrepareItem(item,itsCms,itsProduit,itsCategories){
34		var cms,product,categorie;
35		item.translated=true;
36		if(item.type === "menu"){
37			item.hassubmenu=false;
38			for(var i =0;i< item.items.length;i++){
39				if(item.items[i].type === "menu"){
40					item.hassubmenu=true;
41				}
42				recursivePrepareItem(item.items[i],itsCms,itsProduit,itsCategories);
43			}
44			item.items = removeItem(item.items);
45		} else if(item.type === "cms"){
46			item.mustbedelete = false;
47			
48  			cms = utils.findById(itsCms, item.id, "idPage");
49			if(cms){
50    			if(cms.estModal){
51    				item.estmodal = true;
52    			} else {
53    				item.id = item.id; 
54    			}
55    			if(item.label === undefined){
56    				item.label = cms.titrePage;
57    				item.translated=false;
58    			}
59			} else {
60				item.mustbedelete = true;
61			}
62			item.img = commonConfig.nocmsimg;
63    	} else if(item.type === "produit"){
64    		item.mustbedelete = false;
65    		product = utils.findById(itsProduit, item.id, "refProduit");
66    		if(product && product !== undefined){
67    			item.img = product.images[0] + '?' + commonConfig.forceversion;
68    			if(item.label === undefined){
69    				item.label = product.libelle;
70    				item.translated=false;
71    			}
72    			item.estUnDon = product.estUnDon;
73    			item.estUnArticleLibre = product.estUnArticleLibre;
74    			item.estUnAbonnement = product.estUnAbonnement;
75    			item.estUneFormule = product.estUneFormule;
76          	} else {
77          		item.mustbedelete = true;
78          	}
79    	} else if(item.type === "page"){
80    		item.mustbedelete = false;
81			item.img = commonConfig.nocmsimg;
82    	} else if(item.type === "categorie"){
83    		item.mustbedelete = false;
84    		categorie = utils.findById(itsCategories, parseInt(item.id), "refCategorie");
85    		if(categorie && categorie !== undefined){
86    			item.img = commonConfig.nocmsimg;
87    			if(item.label === undefined){
88    				item.label = categorie.nom;
89    				item.profil = categorie.profil;
90    				item.translated=false;
91					item.page = categorie.page;
92    			}
93          	} else {
94          		item.mustbedelete = true;
95          	}
96    	} else if(item.type === "link"){
97    		item.mustbedelete = false;
98			item.img = commonConfig.nocmsimg;
99    	} else {
100    		item.mustbedelete = true;
101    	}
102	}
103	
104  	function loadMenu(deferred,json,itemsCms,itemsProduit,itsCategories){
105  		var cmenu,i =0;
106  		for(var p in json){
107			if(p.startsWith("menu")){
108				cmenu = json[p];
109				for(i =0;i<cmenu.length;i++){
110					recursivePrepareItem(cmenu[i],itemsCms,itemsProduit,itsCategories);
111      			}
112      			json[p] = removeItem(cmenu);
113          	}
114        }
115        deferred.resolve(json);
116  	}
117	
118    factory.buildMenu = function buildMenu(json) {
119    	var deferred = $q.defer(),
120    	p,
121  		pagesCmsIds= [],
122  		productsIds= [],
123  		categoriesIds = [],
124  		i =0,
125  		j =0,
126  		params = {},
127		itemsCms=[],
128		itemsProduit=[],
129		itemsCategories = [],
130  		loadProduit=false,
131  		loadCms=false,
132  		loadCategories=false;
133	          	
134			  		
135	  	function _tryEndLoad(){
136	  		if(loadProduit && loadCms && loadCategories){
137	  			loadMenu(deferred,json,itemsCms,itemsProduit,itemsCategories);
138	  		}
139	  	}	
140      		
141      	for(var p in json){
142      		if(p.startsWith("menu")){	   
143      			productsIds = _.union(productsIds, recursiveStoreId(json[p],productsIds,"produit"));
144      			pagesCmsIds = _.union(pagesCmsIds, recursiveStoreId(json[p],pagesCmsIds,"cms"));
145      			categoriesIds = _.union(categoriesIds, recursiveStoreId(json[p],categoriesIds,"categorie"));
146      		}
147      	}
148      	productsIds = _.uniq(productsIds);
149      	pagesCmsIds = _.uniq(pagesCmsIds);
150      	categoriesIds = _.uniq(categoriesIds);
151      	
152      	//Chargement des page cms et Quand tout est charge (cms + produit),on construit le menu
153      	
154      	if(pagesCmsIds.length > 0){
155  			params.array = pagesCmsIds;
156  			TbsWS.call('gettypepage/'+ $rootScope.preferredLanguage,'public',params).then(
157		          function(data){
158		          	loadCms=true;
159		          	itemsCms=data;
160		          	_tryEndLoad();
161		          }
162		          ,function(error) {
163		          	loadCms=true;
164		          	_tryEndLoad();
165		        }
166		    );
167  		} else {
168          	loadCms=true;
169		    _tryEndLoad();
170  		}
171      	
172      	//Chargement des produits et Quand tout est charge (cms + produit),on construit le menu
173      	if(productsIds.length > 0){
174  			productsManager.loadProductsFromIds(productsIds).then(
175          		function(products){
176          			loadProduit=true;
177          			itemsProduit = products;
178		          	_tryEndLoad();
179          		}
180		          ,function(error) {
181		          	loadProduit=true;
182		          	_tryEndLoad();
183		        }
184          	);
185  		} else {
186          	loadProduit=true;
187		    _tryEndLoad();
188  		}
189      	
190      	//Chargement des categories et Quand tout est charge (cms + produit + categories),on construit le menu
191      	if(categoriesIds.length > 0){
192      		categoriesManager.loadCategoriesFromIds(categoriesIds).then(
193				function(categories){
194					loadCategories=true;
195          			itemsCategories = categories;
196		          	_tryEndLoad();
197          		}
198		          ,function(error) {
199		          	loadCategories=true;
200		          	_tryEndLoad();
201		        }
202			);
203  		} else {
204          	loadCategories=true;
205		    _tryEndLoad();
206  		}
207  		
208	    return deferred.promise;
209    };
210    return factory;
211}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.