1 2/* 3 * Copyright (C) Atexo - All Rights Reserved 4 * Unauthorized copying of this file, via any medium is strictly prohibited 5 * Proprietary and confidential 6 */ 7 8/* 9 * Composants JS carte interactive 10 * 11 * Version 1.0 12 * 13 * 14 * Composants jsMap, jsMapSubItem, jsMapSubItemsTab, jsMapItem, jsMapItemsTab 15 * 16 */ 17 18 19//Composant jsMapSubItem 20jsMapSubItem = function (obj, map, type, pos, subpos){ 21 22 this.component = 'jsMapSubItem'; 23 24 this.name = obj.name; //ex : "Somme" 25 this.code = obj.code; //ex : "80" 26 this.nuts = obj.nuts; //ex : "FR223" 27 this.path = obj.path; //Chemin vectoriel de l'element 28 this.color = obj.color; //ex : "#edc667" 29 this.map = map; //Carte JS 30 31 this.id = 'sub_it_'+this.nuts; 32 this.label = this.code+' - '+this.name; //ex : "80 - Somme" 33 34 this.local = +obj.local; //Sous-element a placer dans la carte locale ou non 35 this.local_color = obj.local_color; //Couleur du sous-element en mode "local" 36 this.local_selcolor= obj.local_selcolor; //Couleur du sous-element selectionne en mode "local" 37 this.local_path = obj.local_path; //Chemin vectoriel du sous-element en mode "local" 38 39 this.pos = pos; //Position de l'element parent dans le tableau listant les elements de la carte 40 this.subpos = subpos; //Position du sous-element courant dans le tableau listant les s
40ous elements de l'element parent 41 42 this.type = type; //ex : departement 43 44 this.selected = false; // Sous-element selectionne ou non 45 46 /** 47 * Met a jour la valeur de l'etat de selection du sous-element 48 * 49 */ 50 this.applySelection = function(selection){ 51 52 //Modification de l'etat de selection du sous-element 53 this.selected = selection; 54 55 //Actualisation de la couleur du sous-element 56 if(this.map.mode == this.type){ 57 58 if(this.map.browser == 'MSIE' && (this.map.browser_version == '7' || this.map.browser_version == '8' )){ 59 60 this.draw(); 61 62 } else { 63 64 this.updateColor(); 65 66 } 67 } 68 } 69 70 /** 71 * Modifie la couleur du sous-element 72 * 73 */ 74 this.setColor = function(color){ 75 76 //Recuperation de l'ID HTML du sous-element 77 var map_id = '#'+this.id; 78 79 //Recuperation du composant HTML du sous-element 80 var map_item = J(map_id); 81 82 //Actualisation de la couleur du composant HTML 83 map_item.attr('fill',color); 84 } 85 86 /** 87 * Met a jour la couleur du sous-element en fonction de son statut "selectionne"/"non selectionne" 88 * 89 */ 90 this.updateColor = function (){ 91 92 var show_local = this.map.show_local; 93 94 if(this.selected){ 95 96 if(show_local && this.local){ 97 98 this.setColor(this.local_selcolor); 99 100 } else { 101 102 this.setColor(this.map.features.selcolor); 103 104 } 105 106 } else { 107 108 if(show_local && this.local){ 109 110 this.setColor(this.local_color); 111 112 } else { 113 114 this.setColor(this.color); 115 116 } 117 } 118 } 119 120 /** 121 * Met a jour la couleur du sous-element en fonction de son statut "selectionne"/"non selectionne" 122 * 123 */ 124 this.drawColor = function (){ 125 126 var map_id = this.map.name + '.' + this.id; 127 128 if(this.selected){ 129 130 if(this.map.show_local && this.local){ 131 132 this.map.container.map_id = this.map.container.path(this.local_path).attr(this.map.features).attr('fill',this.local_selcolor); 133 134 } else { 135 136 this.map.container.map_id = this.map.container.path(this.path).attr(this.map.features).attr('fill',this.map.features.selcolor); 137 138 } 139 140 } else { 141 142 if(this.map.show_local && this.local){ 143 144 this.map.container.map_id = this.map.container.path(this.local_path).attr(this.map.features).attr('fill',this.local_color); 145 146 } else { 147 148 this.map.container.map_id = this.map.container.path(this.path).attr(this.map.features).attr('fill',this.color); 149 150 } 151 } 152 } 153 154 /** 155 * Dessine le chemin vectoriel du sous-element et les evenements lies 156 * 157 */ 158 this.draw = function(){ 159 160 //Attributs de l'objet Raphael a creer 161 162 //Ajouter cet objet a la carte 163 var map_id = this.map.name + '.' + this.id; 164 165 this.drawColor(); 166 167 //Mettre a jour ses proprietes 168 this.map.container.map_id[0].style.cursor = 'pointer'; 169 this.map.container.map_id[0].setAttribute("id",this.id); 170 171 172 var obj = this.map.container.map_id; 173 var obj_id = '#'+this.map.container.map_id[0].id; 174 var label = this.label; 175 176 //Ajout evenement "onMouseOver" 177 this.map.container.map_id[0].onmouseover= function () { 178 179 tipText = label; 180 181 obj.attr('opacity',0.5); 182 map.container.safari(); 183 // no longer usable 184 //J(tip).stop(true, true).show(); 185 over = true; 186 187 }; 188 189 //Ajout evenement "onMouseOut" 190 this.map.container.map_id[0].onmouseout= function () { 191 192 obj.attr('opacity',1); 193 map.container.safari(); 194 // no longer usable 195 //J(tip).stop(true, true).hide(); 196 over = false; 197 198 }; 199 200 //Ajout evenement "onClick" 201 var js_obj = this; 202 var onmouseclick = this.map.onmouseclick; 203 this.map.container.map_id[0].onclick = function () { 204 onmouseclick(js_obj); 205 }; 206 207 } 208 209 /** 210 * Deselectionne le sous-element 211 * 212 */ 213 this.unselect = function (){ 214 215 var selection = false; 216 217 this.applySelection(selection); 218 219 } 220 221} 222 223 224//Composant jsMapSubItemsTab 225jsMapSubItemsTab = function (map, pos, json_subitems){ 226 227 this.map = map; 228 this.type = json_subitems.type; 229 this.json_subitems = json_subitems.tab; 230 231 this.tab = new Array(); 232 233 for(var i = 0, c = this.json_subitems.length; i < c; i++){ 234 235 //Position du sous element dans le tableau 236 var subpos = this.tab.length; 237 238 //Creation du sous-element 239 var subitem = null; 240 subitem = new jsMapSubItem(this.json_subitems[i], this.map, this.type, pos, subpos); 241 242 //Ajout du sous-element au tableau des sous-elements 243 this.tab[subpos] = subitem; 244 245 } 246
247 /** 248 * Modifie la valeur du statut de selection pour l'ensemble des sous-elements references dans le tableau des sous-elements 249 * 250 */ 251 this.applySelection = function(selection){ 252 253 for (var i = 0, c = this.tab.length; i < c; i++) { 254 255 this.tab[i].applySelection(selection); 256 257 } 258 259 } 260 261 /** 262 * Dessine les sous-elements references dans le tableau des sous-elements 263 * 264 */ 265 this.draw = function(subitems){ 266 267 if(this.map.mode == this.type){ 268 269 for (var i = 0, c = this.tab.length; i < c; i++) { 270 271 var selection = false; 272 if(subitems.subitems.tab[i].id){ 273 274 selection = subitems.subitems.tab[i].selection; 275 276 } 277 278 this.tab[i].draw(selection); 279 280 } 281 } 282 283 } 284 285 /** 286 * Chargement des sous-elements deja selectionnes 287 * 288 */ 289 this.loadSelectedSubitems = function(selSubitemsTab){ 290 291 //Initialisation 292 var selection = true; 293 var d = selSubitemsTab.length; 294 295 if(d > 0){ 296 //Parcours de l'ensemble des sous-elements composant le tableau des sous-elements 297 for (var i = 0, c = this.tab.length; i < c; i++) { 298 //Si navigateur IE7 ou IE8 (version JS ne prenant pas en compte la mathode indexOf) 299 if(this.map.browser == 'MSIE' && (this.map.browser_version == '7' || this.map.browser_version == '8' )){ //|| this.map.browser_version == '9')){ 300 //Verification presence du sous-element dans le tableau des sous-elements precedemment selectionnes 301 for(var j = 0; j < d; j++){ 302 303 if(selSubitemsTab[j] == this.tab[i].code){ // cette ligne pose pb sous IE7 304 this.tab[i].applySelection(selection); // cette ligne pose pb sous IE7 305 break; 306 } 307 } 308 } else { 309 //Si navigateurs plus evolues 310 if(selSubitemsTab.indexOf(this.tab[i].code)> -1){ 311 //Mise a jour du statut du sous-element 312 this.tab[i].applySelection(selection); 313 } 314 } 315 } 316 } 317 } 318 319} 320 321 322//Composant jsMapItem 323jsMapItem = function (obj, map, type, pos, subitems){ 324 325 this.component = 'jsMapItem'; 326 327 this.name = obj.name; 328 this.code = obj.code; 329 this.nuts = obj.nuts; 330 this.path = obj.path; 331 this.color = obj.color; 332 this.map = map; 333 334 this.local = +obj.local; 335 336 this.id = 'it_'+this.nuts; 337 this.label = this.name; 338 339 this.pos = pos; 340 this.type = type; 341 342 this.subitems = subitems; 343 344 this.selected = false; 345 this.selected_subitems = false; 346 347 /** 348 * Met a jour la valeur de l'etat de selection de l'element 349 * 350 */ 351 this.applySelection = function(selection){ 352 353 //Modification de l'attribut pour les sous-composants 354 this.subitems.applySelection(selection); 355 356 //Mise a jour des proprietes du composant 357 this.update(); 358 359 } 360 361 /** 362 * Modifie la couleur de l'element 363 * 364 */ 365 this.setColor = function (color){ 366 367 var map_id = '#'+this.id; 368 var map_item = J(map_id); 369 map_item.attr('fill', color); 370 371 } 372 373 /** 374 * Met a jour la couleur de l'element en fonction de son statut "selectionne"/"non selectionne" 375 * 376 */ 377 this.updateColor = function (){ 378 379 if(this.selected){ 380 381 this.setColor(this.map.features.selcolor); 382 383 } else { 384 385 this.setColor(this.color); 386 387 } 388 } 389 390 391 /** 392 * Met a jour la couleur de l'element en fonction de son statut "selectionne"/"non selectionne" 393 * 394 */ 395 this.drawColor = function (){ 396 397 var map_id = this.map.name + '.' + this.id; 398 399 if(this.selected){ 400 401 this.map.container.map_id = this.map.container.path(this.path).attr(this.map.features).attr('fill',this.map.features.selcolor); 402 403 } else { 404 405 this.map.container.map_id = this.map.container.path(this.path).attr(this.map.features).attr('fill',this.color); 406 407 } 408 } 409 410 /** 411 * Met a jour le statut "selectionne"/"non selectionne" de l'element en fonction du statut de ses sous-elements 412 * 413 */ 414 this.update = function(){ 415 416 var selected = 0; 417 var not_selected = 0; 418 419 //Verification du statut de selection des elements imbriques 420 for (var i = 0, c = this.subitems.tab.length; i < c; i++) { 421 422 if(this.subitems.tab[i].selected){ 423 424 selected += 1; 425 426 } else { 427 428 not_selected += 1; 429 430 } 431 } 432 433 //Test pour la mise a jour du statut de l'element imbriquant 434 if(selected == this.subitems.tab.length){ 435 436 //Tous les sous elements selectionnes 437 438 //Mise a jour de l'attribut selected_subitems 439 this.selected_subitems = true; 440 441 //Mise a jour de l'attribut selected 442 this.selected = true; 443 444 445 } else if(not_selected == this.subitems.tab.length){ 446 447 //Tous les sous elements deselectionnes 448 449 //Mise a jour de l'attribut selected_subitems 450 this.selected_subitems = false;
451 452 //Mise a jour du statut 453 this.selected = false; 454 455 456 } else { 457 458 //Il y a a la fois des sous elements selectionnes et deselectionnes 459 //Si au moins un subitem selectionne, l'item est selectionne 460 461 //Mise a jour de l'attribut selected_subitems 462 this.selected_subitems = true; 463 464 //Mise a jour de l'attribut selected 465 this.selected = true; 466 467 468 } 469 470 //Si IE7 et IE8 471 if(this.map.browser == 'MSIE' && (this.map.browser_version == '7' || this.map.browser_version == '8')){ 472 473 if(this.map.mode == this.type){ 474 475 this.draw(this.selected); 476 477 } 478 } else { 479 480 //Si navigateurs plus evolues 481 this.updateColor(); 482 483 } 484 } 485 486 /** 487 * Dessine le chemin vectoriel de l'element et les evenements lies aux interactions avec la souris 488 * 489 */ 490 this.draw = function(){ 491 492 //Ajouter cet objet a la carte 493 var map_id = this.map.name + '.' + this.id; 494 495 this.drawColor(); 496 497 //Mettre a jour ses proprietes 498 this.map.container.map_id[0].style.cursor = 'pointer'; 499 this.map.container.map_id[0].setAttribute("id",this.id); 500 501 var obj = this.map.container.map_id; 502 var obj_id = '#'+this.map.container.map_id[0].id; 503 var label = this.label; 504 505 //Ajout evenement "onMouseOver" 506 this.map.container.map_id[0].onmouseover= function () { 507 508 tipText = label; 509 510 obj.attr('opacity',0.5); 511 map.container.safari(); 512 // no longer usable 513 //J(tip).stop(true, true).show(); 514 over = true; 515 516 }; 517 518 //Ajout evenement "onMouseOut" 519 this.map.container.map_id[0].onmouseout= function () { 520 521 obj.attr('opacity',1); 522 map.container.safari(); 523 // no longer usable 524 //J(tip).stop(true, true).hide(); 525 over = false; 526 527 }; 528 529 //Ajout evenement "onClick" 530 var js_obj = this; 531 var onmouseclick = this.map.onmouseclick; 532 this.map.container.map_id[0].onclick = function () { 533 onmouseclick(js_obj); 534 }; 535 536 } 537 538 /** 539 * Dessine les sous-elements de l'element 540 * 541 */ 542 this.drawSubitems = function(subitems){ 543 544 var show_local = this.map.show_local; 545 546 //Tracage des elements si la vue n'est pas locale ou si ils font partie de la vue locale 547 if((show_local && this.local) || !show_local){ 548 549 this.subitems.draw(subitems); 550 551 } 552 } 553 554 555 /** 556 * Deselectionne l'element 557 * 558 */ 559 this.unselect = function(){ 560 561 var selection = false; 562 563 //Mise a jour de l'attribut de selection du composant 564 this.applySelection(selection); 565 566 } 567 568 /** 569 * Chargement des sous-elements deja selectionnes 570 * 571 */ 572 this.loadSelectedSubitems = function(selSubitemsTab){ 573 574 if(selSubitemsTab.length > 0){ 575 //Chargement des sous-elements deja selectionnes 576 this.subitems.loadSelectedSubitems(selSubitemsTab); 577 //Mise a jour de l'element courant en fonction du statut de ses sous-elements 578 this.update(); 579 } 580 } 581 582} 583 584 585//Composant jsMapItemsTab 586jsMapItemsTab = function (map, json_items){ 587 588 this.map = map; 589 this.type = json_items.type; 590 this.json_items = json_items.tab; 591 592 this.tab = new Array(); 593 594 for(var i = 0, c = this.json_items.length; i < c; i++){ 595 596 //Position de l'element dans le tableau 597 var pos = this.tab.length; 598 599 //Recuperation des donnnes parsees a partir du format JSON 600 var json_subitems = this.json_items[i].subitems; 601 602 //Creation des sous-elements 603 var subitems_tab = new jsMapSubItemsTab(this.map, pos, json_subitems); 604 605 //Creation de l'element 606 var item = null; 607 item = new jsMapItem(this.json_items[i], this.map, this.type, pos, subitems_tab); 608 609 //Ajout de l'element au tableau des elements 610 this.tab[pos] = item; 611 612 } 613 614 /** 615 * Charge les sous-elements devant etre pre-selectionnes 616 * 617 */ 618 this.update = function(){ 619 620 for (var i = 0, c = this.tab.length; i < c; i++) { 621 622 this.tab[i].update(); 623 624 } 625 626 } 627 628 /** 629 * Dessine les elements references dans le tableau des elements 630 * 631 */ 632 this.draw = function (map){ 633 634 if(map.mode == this.type){ 635 636 for (var i = 0, c = this.tab.length; i < c; i++) { 637 638 var item_selection = ''; 639 640 if(map.items.tab[i].id){ 641 642 item_selection = map.items.tab[i].selection; 643 644 } 645 646 this.tab[i].draw(item_selection); 647 648 } 649 650 } else { 651 652 for (var i = 0, c = this.tab.length; i < c; i++) { 653 654 this.tab[i].drawSubitems(map.items.tab[i]); 655 656 } 657 } 658 } 659
660 /** 661 * Deselectionne l'ensemble des elements contenus dans le tableau des elements 662 * 663 */ 664 this.unselect = function (){ 665 666 for (var i = 0, c = this.tab.length; i < c; i++) { 667 668 this.tab[i].unselect(); 669 670 } 671 } 672 673 674 /** 675 * Charge les sous-elements devant etre pre-selectionnes 676 * 677 */ 678 this.loadSelectedSubitems = function(selSubitemsTab){ 679 680 if(selSubitemsTab.length > 0){ 681 682 for (var i = 0, c = this.tab.length; i < c; i++) { 683 684 //Chargement des sous-elements deja selectionnes 685 this.tab[i].loadSelectedSubitems(selSubitemsTab); 686 687 } 688 } 689 } 690 691} 692 693 694 695//Composant jsMap 696 697jsMap = function (map_json, onmouseclick, browser_name, browser_version){ 698 699 //Initialisation des valeurs des attributs 700 this.component = 'jsMap'; 701 this.mode = ''; //Mode de la carte pour savoir quels elements tracer 702 this.name = map_json.name; //Nom de la carte 703 this.canvas_items = map_json.canvas_items; //Parametres du canvas des elements de la carte 704 this.canvas_subitems = map_json.canvas_subitems; //Parametres du canvas des sous elements de la carte 705 this.canvas_local_subitems = map_json.canvas_local_subitems; //Parametres du canvas des elements de la carte en mode affichage local 706 this.features = map_json.features; //Caracteristiques generaux de la carte 707 this.json_items = map_json.items; //Elements de la carte au format JSON 708 709 this.show_local = true; //Afficher les elements de la carte locale 710 711 //Recuperation des methodes pour la gestion evenementielles 712 this.onmouseclick = onmouseclick; 713 714 //Creation des elements de la carte 715 var items = new jsMapItemsTab (this, this.json_items); 716 this.items = items; 717 718 //Recuperation des informations sur le navigateur 719 this.browser = browser_name; 720 this.browser_version = browser_version; 721 722 723 /** 724 * Dessine le canvas des sous-elements a dessiner dans la vue locale 725 * 726 */ 727 this.drawCanvasLocalSubitems = function (){ 728 729 //Suppresion du contenu du canvas 730 J('#paper').empty(); 731 732 //Initialisation de l'objet Raphael 733 this.container = Raphael("paper", +this.canvas_local_subitems.paper_width, +this.canvas_local_subitems.paper_height); 734 735 //Initialisation du canvas de l'objet Raphael 736 this.container.setViewBox(+this.canvas_local_subitems.x, +this.canvas_local_subitems.y, +this.canvas_local_subitems.width, +this.canvas_local_subitems.height, +this.canvas_local_subitems.fit); 737 738 } 739 740 741 /** 742 * Dessine le canvas des elements a dessiner dans la vue regionale 743 * 744 */ 745 this.drawCanvasItems = function (){ 746 747 //Suppresion du contenu du canvas 748 J('#paper').empty(); 749 750 //Initialisation de l'objet Raphael 751 this.container = Raphael("paper", +this.canvas_items.paper_width, +this.canvas_items.paper_height); 752 753 //Initialisation du canvas de l'objet Raphael 754 this.container.setViewBox(+this.canvas_items.x, +this.canvas_items.y, +this.canvas_items.width, +this.canvas_items.height, +this.canvas_items.fit); 755 756 } 757 758 /** 759 * Dessine le canvas des sous-elements a dessiner dans la vue departementale 760 * 761 */ 762 this.drawCanvasSubitems = function (){ 763 764 //Suppresion du contenu du canvas 765 J('#paper').empty(); 766 767 //Initialisation de l'objet Raphael 768 this.container = Raphael("paper", +this.canvas_subitems.paper_width, +this.canvas_subitems.paper_height); 769 770 //Initialisation du canvas de l'objet Raphael 771 this.container.setViewBox(+this.canvas_subitems.x, +this.canvas_subitems.y, +this.canvas_subitems.width, +this.canvas_subitems.height, +this.canvas_subitems.fit); 772 773 } 774 775 /** 776 * Dessine la vue "regionale" 777 * 778 */ 779 this.drawItems = function (obj,mode){ 780 781 //Mise a jour du mode de la carte 782 this.mode = mode; 783 this.show_local = false;
784 785 //Tracage du canvas des elements 786 this.drawCanvasItems(); 787 788 //Tracage des elements 789 this.items.draw(obj); 790 791 //Recuperation de l'objet cree 792 var obj = this; 793 794 return obj; 795 796 } 797 798 /** 799 * Dessine la vue "departementale" 800 * 801 */ 802 this.drawSubitems = function (obj,mode){ 803 804 //Mise a jour du mode de la carte 805 this.mode = mode; 806 this.show_local = false; 807 808 //Tracage du canvas des sous elements 809 this.drawCanvasSubitems(); 810 811 //Tracage des sous elements 812 this.items.draw(obj); 813 814 //Recuperation de l'objet cree 815 var obj = this; 816 817 return obj; 818 819 } 820 821 /** 822 * Dessine la vue "locale" 823 * 824 */ 825 this.drawLocalSubitems = function (obj,mode){ 826 827 //Mise a jour du mode de la carte 828 this.mode = mode; 829 this.show_local = true; 830 831 //Tracage du canvas des sous elements 832 this.drawCanvasLocalSubitems(); 833 834 //Tracage des sous elements 835 this.items.draw(obj); 836 837 //Recuperation de l'objet cree 838 var obj = this; 839 840 return obj; 841 842 } 843 844 /** 845 * Met a jour l'ensemble des elements et sous-elements composant la carte 846 * 847 */ 848 this.update = function (){ 849 //Mise a jour des elements et sous elements de la carte (statut "selectionne") 850 this.items.update(); 851 852 } 853 854 /** 855 * Deselectionne l'ensemble des elements et sous-elements composant la carte 856 * 857 */ 858 this.unselect = function(){ 859 //Mise a jour des elements et sous elements de la carte (statut "selectionne") 860 this.items.unselect(); 861 862 } 863 864 /** 865 * Charge l'ensemble des sous-elements de la carte devant etre pre-selectionnes 866 * 867 */ 868 this.loadSelectedSubitems = function(selSubitemsTab){ 869 870 if(selSubitemsTab.length > 0){ 871 //Chargement des sous-elements preselectionnes 872 this.items.loadSelectedSubitems(selSubitemsTab); 873 } 874 } 875 876 877} 878 879
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.